feat: Add originalStartTime to event DTOs and service to correctly identify and manage event exceptions in the UI.

This commit is contained in:
Schneider Roland
2025-12-31 12:27:25 +01:00
parent 7ed3367ed8
commit 4349fa39b4
3 changed files with 15 additions and 6 deletions

View File

@@ -36,10 +36,15 @@ export class SingleEventDashboardEventActivation {
const event = this.event();
console.info('setEventOccurrenceActivation', event);
const eventId = this.event()?.id!;
const startTime = this.event()?.startTime!;
const eventId = event?.id!;
const originalStartTime = event?.originalStartTime!;
let payload: CreateExceptionDto | undefined;
const eventException = event?.exceptions?.length ? event.exceptions[0] : undefined;
// Correctly find the exception that matches this specific occurrence
const eventException = event?.exceptions?.find(ex =>
new Date(ex.originalStartTime).getTime() === new Date(originalStartTime).getTime()
);
if (eventException) {
payload = {
...eventException,
@@ -50,7 +55,7 @@ export class SingleEventDashboardEventActivation {
};
} else {
payload = {
originalStartTime: new Date(startTime),
originalStartTime: new Date(originalStartTime),
isCancelled: !activated,
};
}

View File

@@ -33,6 +33,7 @@ export type CalendarEventDto = {
id: number;
title: string;
startTime: string,
originalStartTime: string,
endTime: string,
description: string,
isModified?: boolean;

View File

@@ -62,10 +62,10 @@ type BookingWithUserDto = {
id: number;
};
// The final shape of a calendar event occurrence
export type CalendarEventDto = Omit<Event, 'bookings'> & {
isModified?: boolean;
isCancelled?: boolean;
originalStartTime: Date;
eventBookings: BookingWithUserDto[];
};
@@ -146,6 +146,7 @@ export class CalendarService {
const key = `${event.id}-${event.startTime.getTime()}`;
return {
...event,
originalStartTime: event.startTime,
eventBookings: bookingMap.get(key) || [],
};
});
@@ -197,6 +198,7 @@ export class CalendarService {
exception.newEndTime ||
new Date(occurrenceDate.getTime() + duration),
isModified: true,
originalStartTime: occurrenceDate,
eventBookings: bookingMap.get(key) || [],
isCancelled: !!exception.isCancelled,
});
@@ -206,6 +208,7 @@ export class CalendarService {
recurringOccurrences.push({
...event,
startTime: occurrenceDate,
originalStartTime: occurrenceDate,
endTime: new Date(occurrenceDate.getTime() + duration),
eventBookings: bookingMap.get(key) || [],
});