diff --git a/components/calendar/event-detail-popover.tsx b/components/calendar/event-detail-popover.tsx index d7f1f9ba..ffa7cf68 100644 --- a/components/calendar/event-detail-popover.tsx +++ b/components/calendar/event-detail-popover.tsx @@ -182,7 +182,8 @@ export function EventDetailPopover({ const isAttendeeMode = useMemo(() => { if (!event.participants) return false; - return !event.isOrigin && !userIsOrganizer; + if (userIsOrganizer) return false; + return event.isOrigin === false; }, [event, userIsOrganizer]); const userParticipantId = useMemo( diff --git a/components/calendar/event-modal.tsx b/components/calendar/event-modal.tsx index 27662dec..b2154f61 100644 --- a/components/calendar/event-modal.tsx +++ b/components/calendar/event-modal.tsx @@ -227,7 +227,12 @@ export function EventModal({ const isAttendeeMode = useMemo(() => { if (!event || !event.participants) return false; - return !event.isOrigin && !userIsOrganizer; + // Only enter attendee (read-only + RSVP) mode when we are definitively NOT + // the organizer AND the event explicitly did not originate from this + // account. Stalwart may omit `isOrigin`, so treat a missing value as "ours" + // (editable) rather than locking the user out of their own events. + if (userIsOrganizer) return false; + return event.isOrigin === false; }, [event, userIsOrganizer]); const userParticipantId = useMemo(() => {