feat(detail): duplicate an event as a new one (#52) #77

Merged
makiolaj merged 3 commits from feat/duplicate-events into release/v2.15.0 2026-07-15 17:23:45 +00:00
Owner

Adds a Duplicate action to the event detail top bar. It opens the shared editor pre-filled with a copy of the event as a new, unsaved event, so a one-off (a shift, an appointment) can be recreated by changing just the day and time instead of re-typing every field. Resolves [#52].

How it works

  • Reuses the existing prefilled-create overlay (openImportedcreateEvent), so the copy becomes an independent event with the default reminder applied — no new data-layer path.
  • Recurrence is dropped: a duplicate is a single event; the editor still exposes a recurrence picker for anyone who wants a series.
  • The occurrence's own start/end carry over unchanged (user edits the day/time).
  • Offered for any loaded event, including read-only ones (WebCal, birthdays): the source calendar is kept only when it's writable, otherwise the copy resolves to the first writable calendar.
  • The detail-screen write-permission handling was generalised (requireWrite {}) to cover edit, delete, and the new duplicate action.

Notes

  • Targets release/v2.15.0 (not main); release/v2.15.0 is merged in and the changelog entry sits under [Unreleased] → Added.
  • Confirmed working on-device (emulator).

🤖 Generated with Claude Code

Adds a **Duplicate** action to the event detail top bar. It opens the shared editor pre-filled with a copy of the event as a new, unsaved event, so a one-off (a shift, an appointment) can be recreated by changing just the day and time instead of re-typing every field. Resolves [#52]. ## How it works - Reuses the existing prefilled-create overlay (`openImported` → `createEvent`), so the copy becomes an independent event with the default reminder applied — no new data-layer path. - Recurrence is dropped: a duplicate is a single event; the editor still exposes a recurrence picker for anyone who wants a series. - The occurrence's own start/end carry over unchanged (user edits the day/time). - Offered for **any** loaded event, including read-only ones (WebCal, birthdays): the source calendar is kept only when it's writable, otherwise the copy resolves to the first writable calendar. - The detail-screen write-permission handling was generalised (`requireWrite {}`) to cover edit, delete, and the new duplicate action. ## Notes - Targets `release/v2.15.0` (not `main`); `release/v2.15.0` is merged in and the changelog entry sits under `[Unreleased] → Added`. - Confirmed working on-device (emulator). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
makiolaj added 3 commits 2026-07-15 17:16:04 +00:00
Add a Duplicate action to the event detail top bar that opens the shared
event form seeded with a copy of the event as a new, unsaved event, so a
non-recurring event can be re-created with just the day and time changed
instead of re-entering every field.

The copy reuses the existing prefilled-create overlay (createEvent), so it
becomes an independent event with the default reminder applied. Recurrence
is dropped — a duplicate is a single event; the edit form still exposes a
recurrence picker for anyone who wants a series. The occurrence's own times
carry over unchanged. Duplicate is offered for any loaded event, including
read-only ones (WebCal, birthdays): the source calendar is kept only when
it's writable, otherwise the copy resolves to the first writable calendar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(changelog): note the duplicate-event action (#52)
All checks were successful
Translations / check (pull_request) Successful in 26s
CI / ci (pull_request) Successful in 9m15s
a19772e3a7
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
makiolaj merged commit 9999fcdd2a into release/v2.15.0 2026-07-15 17:23:45 +00:00
makiolaj deleted branch feat/duplicate-events 2026-07-15 17:23:45 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: makiolaj/calendula#77