Android: delete an event / the series (parity with web) #78

Closed
opened 2026-08-14 17:39:55 +00:00 by nalum · 0 comments
Owner

Summary

Android cannot delete an event. The web event sheet has "Delete the series" (events.delete on the parent) alongside "cancel this one"; the Android event sheet has cancel-this-one, join/leave and edit, but no delete at all — not for a series, not for a plain event. This is a surface-parity gap (system rule 1).

Evidence

grep -rn "events.delete" android/ returns nothing. The web wires it in web/src/queue/registry.ts and surfaces it as "Delete the series" in EventDetail. Android's MoreRepositories has deleteMeal/deleteReward but no deleteEvent.

Scope

  • CalendarRepository: add deleteEvent(uid) calling EventService.Delete through the offline queue (queue.onlineFirst("events.delete", …)), mirroring the meal/reward delete methods and the web's events.delete.
  • Android EventSheet (ui/Today.kt): add a Delete the series action (danger-styled, two-step confirm like the existing cancel), mirroring the web. For a plain (non-recurring) event this deletes the event; for a recurring one it deletes the whole series. Keep "cancel this one" for a single occurrence.
  • Gate the affordance on the permission matrix (can("EventService", "Delete")) via the existing Permissions store — the same pattern the affordance work uses.

Notes

  • EventService.Delete already permits Admin, Member and Child (matrix), scoped by the membership guard — no server change.
  • Danger colour + icon + word, per the frontend canon.

Definition of done

  • A member can delete an event (and a recurring series) from the Android event sheet, matching the web.
  • The action is matrix-gated and uses a confirm step.
  • make check passes; verified on device against the live deploy.
### Summary Android cannot delete an event. The web event sheet has **"Delete the series"** (`events.delete` on the parent) alongside "cancel this one"; the Android event sheet has cancel-this-one, join/leave and edit, but **no delete at all** — not for a series, not for a plain event. This is a surface-parity gap (system rule 1). ### Evidence `grep -rn "events.delete" android/` returns nothing. The web wires it in `web/src/queue/registry.ts` and surfaces it as "Delete the series" in `EventDetail`. Android's `MoreRepositories` has `deleteMeal`/`deleteReward` but no `deleteEvent`. ### Scope - `CalendarRepository`: add `deleteEvent(uid)` calling `EventService.Delete` through the offline queue (`queue.onlineFirst("events.delete", …)`), mirroring the meal/reward delete methods and the web's `events.delete`. - Android `EventSheet` (`ui/Today.kt`): add a **Delete the series** action (danger-styled, two-step confirm like the existing cancel), mirroring the web. For a plain (non-recurring) event this deletes the event; for a recurring one it deletes the whole series. Keep "cancel this one" for a single occurrence. - Gate the affordance on the permission matrix (`can("EventService", "Delete")`) via the existing `Permissions` store — the same pattern the affordance work uses. ### Notes - `EventService.Delete` already permits Admin, Member and Child (matrix), scoped by the membership guard — no server change. - Danger colour + icon + word, per the frontend canon. ### Definition of done - A member can delete an event (and a recurring series) from the Android event sheet, matching the web. - The action is matrix-gated and uses a confirm step. - `make check` passes; verified on device against the live deploy.
nalum added this to the (deleted) project 2026-08-14 21:51:03 +00:00
nalum added reference main 2026-08-16 14:43:35 +00:00
nalum changed reference from main to v1.5.0 2026-08-16 14:43:57 +00:00
nalum closed this issue 2026-08-16 19:44:31 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eagraiclainne/app#78
No description provided.