fix(11-05): CR-01 surface reminderIsCustom to preserve custom VALARMs on edit

- expand.ts: add reminderIsCustom:boolean to CalendarOccurrence interface;
  derived from classifyValarms kind==='custom'; propagated to both
  non-recurring and recurring occurrence branches
- client.ts: mirror reminderIsCustom on CalendarOccurrence (atomic mirror)
- EventForm.tsx: extend deriveReminderValue to accept isCustom flag;
  returns '__custom__' when true, making the existing D-08 preserve branch
  live — editing a custom-alarm event now omits reminderLeadMinutes from
  the payload so outboxWorker extractValarms keeps the original VALARM
- Fix existing test fixtures (EventForm.test.tsx, EventDetailPopover.test.tsx)
  to include reminderIsCustom:false on all CalendarOccurrence literals

Fixes CAL-14 Pitfall 1: Apple Calendar absolute DATE-TIME / multi-VALARM
alarms no longer silently stripped on any edit round-trip from the PWA.
This commit is contained in:
Lucas Berger
2026-06-14 08:11:46 -04:00
parent 5d6cb47191
commit f6b47ebf1e
5 changed files with 54 additions and 10 deletions
@@ -60,6 +60,7 @@ const TIMED_OCCURRENCE: CalendarOccurrence = {
description: 'Daily team sync meeting',
hasRrule: false,
reminderLeadMinutes: null,
reminderIsCustom: false,
};
const OCCURRENCE_WITH_HTML: CalendarOccurrence = {
@@ -88,6 +89,7 @@ const ALLDAY_OCCURRENCE: CalendarOccurrence = {
description: null,
hasRrule: false,
reminderLeadMinutes: null,
reminderIsCustom: false,
};
// ── Import component (after mocks are declared) ───────────────────────────────