diff --git a/packages/ui/src/types.ts b/packages/ui/src/types.ts index 916e7cc6f4..cda2a87483 100644 --- a/packages/ui/src/types.ts +++ b/packages/ui/src/types.ts @@ -465,6 +465,7 @@ export interface CalendarItem { date: Timestamp dueDate: Timestamp day: number + blockTime: boolean access: 'freeBusyReader' | 'reader' | 'writer' | 'owner' } diff --git a/plugins/calendar-resources/src/components/DayCalendar.svelte b/plugins/calendar-resources/src/components/DayCalendar.svelte index cc1c18b40d..e62626c427 100644 --- a/plugins/calendar-resources/src/components/DayCalendar.svelte +++ b/plugins/calendar-resources/src/components/DayCalendar.svelte @@ -118,6 +118,7 @@ allDay: event.allDay, date: eventStart, dueDate: eventEnd, + blockTime: event.blockTime, day, access: event.access }) @@ -136,6 +137,7 @@ result.push({ _id: event._id, allDay: event.allDay, + blockTime: event.blockTime, date: eventStart, dueDate: eventEnd, day: -1, @@ -343,8 +345,9 @@ } } - const calcTime = (events: CalendarItem[]): number => { - if (events.length === 0) return 0 + const calcTime = (_events: CalendarItem[]): number => { + if (_events.length === 0) return 0 + const events = _events.filter((ev) => ev.blockTime) // Extract and sort intervals by start time const intervals = events.map((it) => [it.date, it.dueDate]).sort((a, b) => a[0] - b[0]) diff --git a/server-plugins/calendar-resources/src/index.ts b/server-plugins/calendar-resources/src/index.ts index 1024775879..9fdb02b55f 100644 --- a/server-plugins/calendar-resources/src/index.ts +++ b/server-plugins/calendar-resources/src/index.ts @@ -372,6 +372,7 @@ async function onEventCreate (ctx: TxCreateDoc, control: TriggerControl): const { _class, space, attachedTo, attachedToClass, collection, ...attr } = event const data = attr as any as Data const calendars = await control.findAll(control.ctx, calendar.class.Calendar, { hidden: false }) + const events = await control.findAll(control.ctx, calendar.class.Event, { eventId: event.eventId }) const access = 'reader' for (const part of event.participants) { const socialIds = await getSocialIds(control, part as Ref) @@ -382,6 +383,7 @@ async function onEventCreate (ctx: TxCreateDoc, control: TriggerControl): const user = primarySocialString const calendar = getCalendar(calendars, socialStrings) if (calendar === undefined) continue + if (events.find((p) => p.user === user) !== undefined) continue const innerTx = control.txFactory.createTxCreateDoc( _class, space,