diff --git a/webui/scripts/test-scheduling-page-structure.mjs b/webui/scripts/test-scheduling-page-structure.mjs index 3f44d88..c84bc66 100644 --- a/webui/scripts/test-scheduling-page-structure.mjs +++ b/webui/scripts/test-scheduling-page-structure.mjs @@ -52,6 +52,7 @@ assert.match(page, /type="email"[\s\S]*aria-label=\{I18N\.participantEmail\}/); assert.doesNotMatch(page, /header: I18N\.required|\{selected\.calendar_id\}<\/p>/); diff --git a/webui/src/api/scheduling.ts b/webui/src/api/scheduling.ts index fbe90c0..7f2a1ce 100644 --- a/webui/src/api/scheduling.ts +++ b/webui/src/api/scheduling.ts @@ -12,6 +12,7 @@ export type SchedulingCandidateSlot = { timezone: string; location?: string | null; position: number; + revision: string; freebusy_checked_at?: string | null; freebusy_status?: string | null; freebusy_conflicts: Record[]; @@ -121,6 +122,7 @@ export type SchedulingAvailabilityPayload = { answers: Array<{ slot_id: string; value: SchedulingAvailabilityValue; + option_revision: string; }>; }; diff --git a/webui/src/features/scheduling/SchedulingPage.tsx b/webui/src/features/scheduling/SchedulingPage.tsx index 6620667..50ba6c9 100644 --- a/webui/src/features/scheduling/SchedulingPage.tsx +++ b/webui/src/features/scheduling/SchedulingPage.tsx @@ -403,8 +403,16 @@ export default function SchedulingPage({ settings, auth }: { settings: ApiSettin event.preventDefault(); if (!selected || !selectedParticipant || !canRespond || availabilityLoading) return; const answers = selected.slots - .map((slot) => ({ slot_id: slot.id, value: availability[slot.id] })) - .filter((answer): answer is { slot_id: string; value: SchedulingAvailabilityValue } => Boolean(answer.value)); + .map((slot) => ({ + slot_id: slot.id, + value: availability[slot.id], + option_revision: slot.revision + })) + .filter((answer): answer is { + slot_id: string; + value: SchedulingAvailabilityValue; + option_revision: string; + } => Boolean(answer.value)); if (!answers.length) { setError(I18N.selectResponse); return;