add calendar dashboard edit

This commit is contained in:
Schneider Roland 2025-12-03 07:47:16 +01:00
parent fa098f4a1b
commit f740c11685
5 changed files with 38 additions and 20 deletions

View File

@ -33,7 +33,7 @@
<div class="form-control"><label class="label cursor-pointer justify-start gap-4">
<span class="label-text">Ismétlődő</span>
<input type="checkbox" formControlName="is_recurring" class="checkbox" />
<input type="checkbox" formControlName="isRecurring" class="checkbox" />
</label></div>
@if (isRecurring?.value === true) {

View File

@ -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() {

View File

@ -22,7 +22,7 @@ export interface EventFormDTO {
description?: string;
start_time?: Date;
end_time?: Date;
is_recurring: boolean;
isRecurring: boolean;
recurrenceRule?: RecurrenceRuleDto;
}

View File

@ -374,18 +374,20 @@ 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<RecurrenceRule>);
}
if (updateRRule) {
// Update the properties on the relation object
event.recurrenceRule.frequency = updateRRule.frequency;
event.recurrenceRule.interval = updateRRule.interval;
@ -393,6 +395,12 @@ export class CalendarService {
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
// This handles the relations correctly and prevents the "one-to-many" error.

View File

@ -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