diff --git a/admin/src/app/features/calendar/components/create-event-form/create-event-form.html b/admin/src/app/features/calendar/components/create-event-form/create-event-form.html index ef8c8ad..929005e 100644 --- a/admin/src/app/features/calendar/components/create-event-form/create-event-form.html +++ b/admin/src/app/features/calendar/components/create-event-form/create-event-form.html @@ -33,7 +33,7 @@
@if (isRecurring?.value === true) { diff --git a/admin/src/app/features/calendar/components/create-event-form/create-event-form.ts b/admin/src/app/features/calendar/components/create-event-form/create-event-form.ts index 5709b6b..ad97b48 100644 --- a/admin/src/app/features/calendar/components/create-event-form/create-event-form.ts +++ b/admin/src/app/features/calendar/components/create-event-form/create-event-form.ts @@ -76,7 +76,7 @@ export class CreateEventForm implements OnInit { description: [null], startTime: [null, Validators.required], endTime: [null, Validators.required], - is_recurring: [false], + isRecurring: [false], recurrenceRule: this.fb.group({ frequency: ['DAILY'],//'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY'; interval: [1],//number @@ -97,6 +97,16 @@ export class CreateEventForm implements OnInit { const interval = recurringRule?.get('interval'); if (isRecurring) { + if (this.frequency?.value === null || this.frequency?.value === undefined ){ + this.form.patchValue( + { + recurrenceRule: { + frequency: 'DAILY', + interval: 1, + }, + } + ) + } frequency?.setValidators([Validators.required]); interval?.setValidators([Validators.required, Validators.min(1)]); } else { @@ -139,7 +149,7 @@ export class CreateEventForm implements OnInit { startTime, endTime, eventTypeId: event?.eventType?.id, - is_recurring: event.isRecurring , + isRecurring: event.isRecurring , recurrenceRule: { frequency: event.recurrenceRule?.frequency, interval: event.recurrenceRule?.interval, @@ -216,7 +226,7 @@ export class CreateEventForm implements OnInit { const payload: EventFormDTO = { ...this.form.value }; - if (!payload.is_recurring) { + if (!payload.isRecurring) { delete payload.recurrenceRule; } @@ -264,7 +274,7 @@ export class CreateEventForm implements OnInit { } get isRecurring() { - return this.form.get('is_recurring'); + return this.form.get('isRecurring'); } get recurringRule() { diff --git a/admin/src/app/features/calendar/models/event-form-dto.model.ts b/admin/src/app/features/calendar/models/event-form-dto.model.ts index 0968091..3d6ae2e 100644 --- a/admin/src/app/features/calendar/models/event-form-dto.model.ts +++ b/admin/src/app/features/calendar/models/event-form-dto.model.ts @@ -22,7 +22,7 @@ export interface EventFormDTO { description?: string; start_time?: Date; end_time?: Date; - is_recurring: boolean; + isRecurring: boolean; recurrenceRule?: RecurrenceRuleDto; } diff --git a/server/src/calendar/calendar.service.ts b/server/src/calendar/calendar.service.ts index 46e94a0..29e3fb6 100644 --- a/server/src/calendar/calendar.service.ts +++ b/server/src/calendar/calendar.service.ts @@ -374,24 +374,32 @@ export class CalendarService { event.eventType = undefined; } - // 4. Handle Recurrence Rule - // Because your entity has @OneToOne(..., { cascade: true }), - // modifying event.recurrenceRule and calling eventRepository.save(event) - // will automatically save/update the rule. - if (event.isRecurring && updateEventDto.recurrenceRule) { + // await this.eventRepository.save(event); + + if (updateEventDto.isRecurring) { const updateRRule = updateEventDto.recurrenceRule; - // If no rule exists yet, initialize a new one if (!event.recurrenceRule) { - event.recurrenceRule = this.recurrenceRuleRepository.create({}); + event.recurrenceRule = this.recurrenceRuleRepository.create({ + frequency: 'DAILY', + interval: 1, + count: 1, + } as Partial); } - // Update the properties on the relation object - event.recurrenceRule.frequency = updateRRule.frequency; - event.recurrenceRule.interval = updateRRule.interval; - event.recurrenceRule.byDay = updateRRule.byDay as string; - event.recurrenceRule.endDate = updateRRule.endDate as Date; - event.recurrenceRule.count = updateRRule.count as number; + if (updateRRule) { + // Update the properties on the relation object + event.recurrenceRule.frequency = updateRRule.frequency; + event.recurrenceRule.interval = updateRRule.interval; + event.recurrenceRule.byDay = updateRRule.byDay as string; + event.recurrenceRule.endDate = updateRRule.endDate as Date; + event.recurrenceRule.count = updateRRule.count as number; + } + } else { + if (event.recurrenceRule) { + await this.recurrenceRuleRepository.remove(event.recurrenceRule); + event.recurrenceRule = undefined; + } } // 5. Use SAVE instead of UPDATE diff --git a/server/src/entity/event.entity.ts b/server/src/entity/event.entity.ts index 62ecaf0..a92dd1e 100644 --- a/server/src/entity/event.entity.ts +++ b/server/src/entity/event.entity.ts @@ -58,7 +58,7 @@ export class Event { @OneToOne(() => RecurrenceRule, (rule) => rule.event, { cascade: true, // Automatically save/update recurrence rule when event is saved }) - recurrenceRule: RecurrenceRule; + recurrenceRule?: RecurrenceRule; @OneToMany(() => EventException, (exception) => exception.event, { cascade: true, // Automatically save/update exceptions when event is saved