diff --git a/components/TableScheduleEventSlots.vue b/components/TableScheduleEventSlots.vue index e3d6650..8de0988 100644 --- a/components/TableScheduleEventSlots.vue +++ b/components/TableScheduleEventSlots.vue @@ -123,7 +123,7 @@ diff --git a/components/TableScheduleShiftSlots.vue b/components/TableScheduleShiftSlots.vue index 09a45a0..dddb5e2 100644 --- a/components/TableScheduleShiftSlots.vue +++ b/components/TableScheduleShiftSlots.vue @@ -124,7 +124,7 @@ diff --git a/utils/client-schedule.ts b/utils/client-schedule.ts index d0d78d6..1e64a19 100644 --- a/utils/client-schedule.ts +++ b/utils/client-schedule.ts @@ -197,19 +197,6 @@ export class ClientScheduleEvent extends ClientEntity { } } - discardSlot(id: Id) { - if (!this.slotIds.has(id)) { - throw new Error("ClientScheduleEvent.discardSlot: slot does not exist"); - } - const slot = this.schedule.eventSlots.get(id)!; - if (slot.isNewEntity) { - this.slotIds.delete(id); - this.schedule.eventSlots.delete(id); - } else { - slot.discard(); - } - } - static create( schedule: ClientSchedule, id: Id, @@ -300,7 +287,7 @@ export class ClientScheduleEvent extends ClientEntity { export class ClientScheduleEventSlot { schedule!: ClientSchedule; serverDeleted: boolean; - serverEventId: Id; + serverEventId: Id | undefined; serverStart: DateTime; serverEnd: DateTime; serverLocationIds: Set; @@ -311,7 +298,7 @@ export class ClientScheduleEventSlot { public id: Id, public isNewEntity: boolean, public deleted: boolean, - public eventId: Id, + public eventId: Id | undefined, public start: DateTime, public end: DateTime, public locationIds: Set, @@ -341,11 +328,11 @@ export class ClientScheduleEventSlot { ); } - setEventId(newEventId: Id) { + setEventId(newEventId: Id | undefined) { if (this.eventId === newEventId) return; - this.schedule.events.get(newEventId)!.slotIds.add(this.id); - this.schedule.events.get(this.eventId)!.slotIds.delete(this.id); + this.schedule.events.get(newEventId!)?.slotIds.add(this.id); + this.schedule.events.get(this.eventId!)?.slotIds.delete(this.id); this.eventId = newEventId; } @@ -582,19 +569,6 @@ export class ClientScheduleShift extends ClientEntity { } } - discardSlot(id: Id) { - if (!this.slotIds.has(id)) { - throw new Error("ClientScheduleShift.discardSlot: slot does not exist"); - } - const slot = this.schedule.shiftSlots.get(id)!; - if (slot.isNewEntity) { - this.slotIds.delete(id); - this.schedule.shiftSlots.delete(id); - } else { - slot.discard(); - } - } - static create( schedule: ClientSchedule, id: Id, @@ -670,7 +644,7 @@ export class ClientScheduleShift extends ClientEntity { export class ClientScheduleShiftSlot { schedule!: ClientSchedule; serverDeleted: boolean; - serverShiftId: Id; + serverShiftId: Id | undefined; serverStart: DateTime; serverEnd: DateTime; serverAssigned: Set; @@ -679,7 +653,7 @@ export class ClientScheduleShiftSlot { public id: Id, public isNewEntity: boolean, public deleted: boolean, - public shiftId: Id, + public shiftId: Id | undefined, public start: DateTime, public end: DateTime, public assigned: Set, @@ -703,11 +677,11 @@ export class ClientScheduleShiftSlot { ); } - setShiftId(newShiftId: Id) { + setShiftId(newShiftId: Id | undefined) { if (this.shiftId === newShiftId) return; - this.schedule.shifts.get(newShiftId)!.slotIds.add(this.id); - this.schedule.shifts.get(this.shiftId)!.slotIds.delete(this.id); + this.schedule.shifts.get(newShiftId!)?.slotIds.add(this.id); + this.schedule.shifts.get(this.shiftId!)?.slotIds.delete(this.id); this.shiftId = newShiftId; } @@ -823,6 +797,39 @@ export class ClientSchedule extends ClientEntity { this.shifts.discard(); } + discardEventSlot(id: Id) { + const eventSlot = this.eventSlots.get(id); + if (!eventSlot) { + throw new Error("ClientSchedule.discardEventSlot: slot does not exist"); + } + if (eventSlot.isNewEntity) { + this.eventSlots.delete(id); + if (eventSlot.eventId !== undefined) + this.events.get(eventSlot.eventId)?.slotIds.delete(id); + if (eventSlot.serverEventId !== undefined && eventSlot.serverEventId !== eventSlot.eventId) + this.events.get(eventSlot.serverEventId)?.schedule.eventSlots.delete(id); + } else { + eventSlot.discard(); + } + } + + discardShiftSlot(id: Id) { + const shiftSlot = this.shiftSlots.get(id); + if (!shiftSlot) { + throw new Error("ClientSchedule.discardShiftSlot: slot does not exist"); + } + if (shiftSlot.isNewEntity) { + this.shiftSlots.delete(id); + if (shiftSlot.shiftId !== undefined) + this.shifts.get(shiftSlot.shiftId)?.slotIds.delete(id); + if (shiftSlot.serverShiftId !== undefined && shiftSlot.serverShiftId !== shiftSlot.shiftId) + this.shifts.get(shiftSlot.serverShiftId)?.schedule.shiftSlots.delete(id); + } else { + shiftSlot.discard(); + } + } + + override isModified() { return ( super.isModified()