getodk / central

ODK Central is a server that is easy to use, very fast, and stuffed with features that make data collection easier. Contribute and make the world a better place! ✨🗄✨
https://docs.getodk.org/central-intro/
Apache License 2.0
126 stars 155 forks source link

Delete Submissions from UI #709

Closed matthew-white closed 2 weeks ago

matthew-white commented 2 months ago

As of v2024.2, submission deletion is possible via the API (#667). Submissions will be purged after 30 days. We also want to add submission deletion to Frontend, which is what this issue is for.

We support entity deletion in Frontend, and we can probably adapt that same code for submission deletion. There are some details to consider, for example, after an entity is deleted, the entity count is updated. We support entity deletion from the entities table and from the entity detail page, and I think it'd be nice to similarly be able to delete a submission from either the submissions table or the submission detail page.

We don't yet support listing deleted entities or restoring/undeleting them, but we will want to be able to list and (I think) also restore deleted submissions from Frontend. To do so, we'll need to make a Backend change so that it's possible to retrieve the list of deleted submissions (something like the ?deleted=true flag that we support for the forms endpoint).

There is a related mockup in the release criteria for v2024.3. There are also some old notes from the block 14 release criteria (under Later Release). Submission deletion has been discussed on the forum, for example, here.

Here's an idea that was in the parking lot that I'm not sure is captured elsewhere:

there will be some language on the projects table (or maybe an activity feed) showing that there are pending deleted submissions.

matthew-white commented 1 month ago

we'll need to make a Backend change so that it's possible to retrieve the list of deleted submissions (something like the ?deleted=true flag that we support for the forms endpoint).

I think we should probably add something like the ?deleted=true flag to the REST API endpoint to list submissions. But Frontend actually doesn't use that endpoint: it uses OData instead. We'll need to modify the OData endpoint so that it can return deleted submissions. As part of that, we'll need to return deletedAt under __system. I think we should also include a deletedAt property in the OData schema/metadata. (Should we include it in the schema all the time or only when deleted submissions are requested?)

issa-tseng commented 1 week ago

suggested css adjustments:

.toggle-deleted-submissions {
  margin-left: 8px;    // up from 5
  .icon-close { margin-left: 3px; } // up from 0
}
.purge-description {
  left: 12px; // up from 5
}

otherwise it seems like it works great!

matthew-white commented 3 days ago

Thanks, @issa-tseng! I have a PR up for these changes here: getodk/central-frontend#1055.