fix: send iMIP invitation emails when creating or updating calendar events #192
sendImipInvitation() was fully implemented but never called after createEvent or updateEvent — only sendImipCancellation was wired up (in deleteEvent). This meant that even when the "send invitation" checkbox was checked and participants were correctly saved on the server, no invitation email was dispatched to attendees. Apply the same pattern already used by deleteEvent: after a successful create/update, if sendSchedulingMessages is true and the event has participants, call sendImipInvitation() in a best-effort try/catch so that email failures do not roll back the calendar operation. For createEvent, the raw server response (created) is used directly since it is already available and matches the CalendarEvent type expected by sendImipInvitation. For updateEvent, the updated event is reconstructed by merging the existing store event with the incoming patch, avoiding an extra API round-trip.
This commit is contained in:
@@ -288,6 +288,13 @@ export const useCalendarStore = create<CalendarStore>()(
|
||||
}
|
||||
|
||||
set((state) => ({ events: [...state.events, mappedCreated] }));
|
||||
if (sendSchedulingMessages && created.participants) {
|
||||
try {
|
||||
await client.sendImipInvitation(created);
|
||||
} catch (e) {
|
||||
debug.error('Failed to send invitation emails:', e);
|
||||
}
|
||||
}
|
||||
return mappedCreated;
|
||||
} catch (error) {
|
||||
debug.error('Failed to create event:', error);
|
||||
@@ -342,6 +349,22 @@ export const useCalendarStore = create<CalendarStore>()(
|
||||
return merged;
|
||||
}),
|
||||
}));
|
||||
if (sendSchedulingMessages) {
|
||||
const mergedParticipants = cleanUpdates.participants ?? storeEvent?.participants;
|
||||
if (mergedParticipants) {
|
||||
const eventForInvitation = {
|
||||
...(storeEvent ?? {}),
|
||||
...cleanUpdates,
|
||||
id: realId,
|
||||
participants: mergedParticipants,
|
||||
} as import('@/lib/jmap/types').CalendarEvent;
|
||||
try {
|
||||
await client.sendImipInvitation(eventForInvitation);
|
||||
} catch (e) {
|
||||
debug.error('Failed to send invitation emails:', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
debug.error('Failed to update event:', error);
|
||||
set({ error: 'Failed to update event' });
|
||||
|
||||
Reference in New Issue
Block a user