Milestone v1.0: FamilySync MVP #1

Merged
luckberg merged 376 commits from gsd/v1.0-milestone into main 2026-06-10 17:39:19 -04:00
Showing only changes of commit 44d336c01b - Show all commits
+8 -1
View File
@@ -64,6 +64,8 @@ export interface CalendarOccurrence {
allDay: boolean
location: string | null
description: string | null
/** True when this occurrence belongs to a recurring series (has RRULE). False for single events. */
hasRrule: boolean
}
/**
@@ -219,8 +221,11 @@ export function expandOccurrences(
const occurrences: CalendarOccurrence[] = []
// Capture once — used in both the non-recurring and recurring branches to populate hasRrule.
const isRecurring = event.isRecurring()
// --- 4. Non-recurring event: single occurrence check ---
if (!event.isRecurring()) {
if (!isRecurring) {
if (dtstart.compare(rangeStart) >= 0 && dtstart.compare(rangeEnd) < 0) {
// Use ICAL.Event.endDate which derives end from DTEND, or DTSTART+DURATION, or sensible default.
// Do NOT use getFirstPropertyValue('dtend') directly — events with only DURATION set return null,
@@ -253,6 +258,7 @@ export function expandOccurrences(
allDay,
location: event.location ?? null,
description: event.description ?? null,
hasRrule: isRecurring, // always false in the non-recurring branch
})
}
return occurrences
@@ -299,6 +305,7 @@ export function expandOccurrences(
allDay,
location: event.location ?? null,
description: event.description ?? null,
hasRrule: isRecurring, // always true in the recurring branch
})
}