What works today
- Create recurring events with DAILY/WEEKLY/MONTHLY/YEARLY, INTERVAL,
BYDAY, BYMONTHDAY, BYMONTH, COUNT, UNTIL via RecurrenceEditor component
- Edit recurring events (modifies the entire series)
- Delete with three options: this occurrence (EXDATE), this & future
(modifies UNTIL), or all (deletes event)
- CalDAV expansion — backend uses
expand=True so recurring instances
show as individual events in the calendar view
- EXDATE handling —
CalDavService.addExdateToEvent() correctly adds
exception dates matching the event's date format (DATE vs DATE-TIME)
- Recurrence propagation —
EventCalendarAdapter copies the source
event's recurrenceRule to expanded instances so the UI knows they're
recurring
- Helper functions —
hasRecurrence(), isRecurringInstance(),
describeRecurrence() exist in event-calendar-helper.ts with unit tests
What's missing
1. Edit single instance vs entire series (high priority)
When editing a recurring event (via modal, drag-and-drop, or resize), the
entire series is modified. There is no prompt asking "Edit this occurrence
only" or "Edit all events in the series."
What needs to happen:
Files involved:
useSchedulerHandlers.ts — handleEventDrop, handleEventResize,
handleModalSave
CalDavService.ts — needs a method to create override instances
(RECURRENCE-ID)
- New component or extend
DeleteEventModal into a generic
RecurringEditModal
2. Recurring event indicator in calendar view (medium priority)
There is no visual indicator on the calendar that an event is recurring. The
describeRecurrence() helper exists and is tested but is not used anywhere
in the UI.
3. BYSETPOS patterns (low priority)
The RecurrenceEditor does not support positional patterns like "1st Monday
of month" or "last Friday of month." This requires BYSETPOS in the RRULE.
4. No frontend tests for RecurrenceEditor (medium priority)
There are no unit tests for the RecurrenceEditor component itself. The only
recurrence-related tests are for helper functions in
event-calendar-helper.test.ts.
5. No natural language recurrence summary in event modal (low priority)
When editing an existing recurring event, the recurrence section shows the
raw editor controls. There is no human-readable summary like "Repeats every
2 weeks on Monday and Friday, 10 times."
6. Unsupported RRULE properties silently dropped on edit (high priority)
The RecurrenceEditor does not display or manage BYSETPOS, WKST,
BYYEARDAY, or BYWEEKNO. When editing an event that has these properties:
- Custom mode: properties are preserved via
...value spread (safe)
- Simple mode presets (Daily/Weekly/Monthly/Yearly/None): a new object
is built with only the known fields — BYSETPOS, WKST, BYYEARDAY,
BYWEEKNO are silently dropped, changing the recurrence pattern
without any warning
This can happen when editing events imported from other calendar apps
(Outlook, Google Calendar) that use positional patterns like "1st Monday
of month" (BYDAY=MO;BYSETPOS=1).
Minimal fix:
Files: RecurrenceEditor.tsx lines 169-178 (handleSimpleChange)
What works today
BYDAY, BYMONTHDAY, BYMONTH, COUNT, UNTIL via
RecurrenceEditorcomponent(modifies UNTIL), or all (deletes event)
expand=Trueso recurring instancesshow as individual events in the calendar view
CalDavService.addExdateToEvent()correctly addsexception dates matching the event's date format (DATE vs DATE-TIME)
EventCalendarAdaptercopies the sourceevent's
recurrenceRuleto expanded instances so the UI knows they'rerecurring
hasRecurrence(),isRecurringInstance(),describeRecurrence()exist inevent-calendar-helper.tswith unit testsWhat's missing
1. Edit single instance vs entire series (high priority)
When editing a recurring event (via modal, drag-and-drop, or resize), the
entire series is modified. There is no prompt asking "Edit this occurrence
only" or "Edit all events in the series."
What needs to happen:
DeleteEventModalasking: "This event" / "This and future events" /"All events"
RECURRENCE-IDmatchingthe occurrence date (override instance) + add EXDATE to the parent
with UNTIL, create a new recurring event starting from the edited
occurrence
handleEventDropandhandleEventResizeinuseSchedulerHandlers.tscurrently have no recurring instance check — they silently modify the
whole series. They need the same this/all prompt.
Files involved:
useSchedulerHandlers.ts—handleEventDrop,handleEventResize,handleModalSaveCalDavService.ts— needs a method to create override instances(RECURRENCE-ID)
DeleteEventModalinto a genericRecurringEditModal2. Recurring event indicator in calendar view (medium priority)
There is no visual indicator on the calendar that an event is recurring. The
describeRecurrence()helper exists and is tested but is not used anywherein the UI.
calendar grid
the event tooltip or detail view
3. BYSETPOS patterns (low priority)
The
RecurrenceEditordoes not support positional patterns like "1st Mondayof month" or "last Friday of month." This requires
BYSETPOSin the RRULE.weekday selection
BYSETPOS+BYDAYin the recurrence rule4. No frontend tests for RecurrenceEditor (medium priority)
There are no unit tests for the
RecurrenceEditorcomponent itself. The onlyrecurrence-related tests are for helper functions in
event-calendar-helper.test.ts.RecurrenceEditorrendering and interactionsuseEventForm(setting/clearingrecurrence)
5. No natural language recurrence summary in event modal (low priority)
When editing an existing recurring event, the recurrence section shows the
raw editor controls. There is no human-readable summary like "Repeats every
2 weeks on Monday and Friday, 10 times."
describeRecurrence()(already implemented) to show a summaryin the event modal or as a collapsed preview of the recurrence section
6. Unsupported RRULE properties silently dropped on edit (high priority)
The
RecurrenceEditordoes not display or manageBYSETPOS,WKST,BYYEARDAY, orBYWEEKNO. When editing an event that has these properties:...valuespread (safe)is built with only the known fields —
BYSETPOS,WKST,BYYEARDAY,BYWEEKNOare silently dropped, changing the recurrence patternwithout any warning
This can happen when editing events imported from other calendar apps
(Outlook, Google Calendar) that use positional patterns like "1st Monday
of month" (
BYDAY=MO;BYSETPOS=1).Minimal fix:
recurrenceRulecontains properties the editorcan't represent (
bySetPos,weekStart,byYearDay,byWeekNo),show a warning: "This event has a recurrence pattern that can't be
fully edited here. Saving may simplify it."
(pass them through in
handleSimpleChangetoo)Files:
RecurrenceEditor.tsxlines 169-178 (handleSimpleChange)