From afc881a7c65de6827e2346aafe290bc5ffc65122 Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Mon, 7 Aug 2023 18:39:04 +0600 Subject: [PATCH] UBER-668 UBER-669 UBER-670 UBER-671 (#3566) Signed-off-by: Denis Bykhov --- models/calendar/src/index.ts | 25 +- models/calendar/src/plugin.ts | 3 +- packages/ui/src/index.ts | 1 - .../components/CalendarEventPresenter.svelte | 37 +++ .../src/components/CalendarView.svelte | 128 ++++------ .../src/components}/DayCalendar.svelte | 240 ++++++++++++------ .../src/components/EventElement.svelte | 124 +++++++-- plugins/calendar-resources/src/index.ts | 7 +- plugins/calendar/src/index.ts | 12 +- plugins/calendar/src/utils.ts | 10 +- 10 files changed, 406 insertions(+), 181 deletions(-) create mode 100644 plugins/calendar-resources/src/components/CalendarEventPresenter.svelte rename {packages/ui/src/components/calendar => plugins/calendar-resources/src/components}/DayCalendar.svelte (77%) diff --git a/models/calendar/src/index.ts b/models/calendar/src/index.ts index 0e8d100a48..d7f09e8d9d 100644 --- a/models/calendar/src/index.ts +++ b/models/calendar/src/index.ts @@ -14,7 +14,15 @@ // import activity from '@hcengineering/activity' -import { Calendar, Event, ReccuringEvent, ReccuringInstance, RecurringRule, calendarId } from '@hcengineering/calendar' +import { + Calendar, + CalendarEventPresenter, + Event, + ReccuringEvent, + ReccuringInstance, + RecurringRule, + calendarId +} from '@hcengineering/calendar' import { Contact } from '@hcengineering/contact' import { DateRangeMode, Domain, IndexKind, Markup, Ref, Timestamp } from '@hcengineering/core' import { @@ -22,6 +30,7 @@ import { Builder, Collection, Index, + Mixin, Model, Prop, ReadOnly, @@ -35,13 +44,14 @@ import { } from '@hcengineering/model' import attachment from '@hcengineering/model-attachment' import contact from '@hcengineering/model-contact' -import core, { TAttachedDoc } from '@hcengineering/model-core' +import core, { TAttachedDoc, TClass } from '@hcengineering/model-core' import { TSpaceWithStates } from '@hcengineering/model-task' import view, { createAction } from '@hcengineering/model-view' import workbench from '@hcengineering/model-workbench' import notification from '@hcengineering/notification' import setting from '@hcengineering/setting' import calendar from './plugin' +import { AnyComponent } from '@hcengineering/ui' export * from '@hcengineering/calendar' export { calendarId } from '@hcengineering/calendar' @@ -115,8 +125,13 @@ export class TReccuringInstance extends TEvent implements ReccuringInstance { virtual?: boolean } +@Mixin(calendar.mixin.CalendarEventPresenter, core.class.Class) +export class TCalendarEventPresenter extends TClass implements CalendarEventPresenter { + presenter!: AnyComponent +} + export function createModel (builder: Builder): void { - builder.createModel(TCalendar, TReccuringEvent, TReccuringInstance, TEvent) + builder.createModel(TCalendar, TReccuringEvent, TReccuringInstance, TEvent, TCalendarEventPresenter) builder.createDoc( workbench.class.Application, @@ -131,6 +146,10 @@ export function createModel (builder: Builder): void { calendar.app.Calendar ) + builder.mixin(calendar.class.Event, core.class.Class, calendar.mixin.CalendarEventPresenter, { + presenter: calendar.component.CalendarEventPresenter + }) + builder.createDoc( view.class.Viewlet, core.space.Model, diff --git a/models/calendar/src/plugin.ts b/models/calendar/src/plugin.ts index 9da16f06e2..821b550e81 100644 --- a/models/calendar/src/plugin.ts +++ b/models/calendar/src/plugin.ts @@ -28,7 +28,8 @@ export default mergeIds(calendarId, calendar, { IntegrationConnect: '' as AnyComponent, CreateCalendar: '' as AnyComponent, EventPresenter: '' as AnyComponent, - CalendarIntegrationIcon: '' as AnyComponent + CalendarIntegrationIcon: '' as AnyComponent, + CalendarEventPresenter: '' as AnyComponent }, action: { SaveEventReminder: '' as Ref, diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 945359e80f..2456b32d58 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -172,7 +172,6 @@ export { default as Panel } from './components/Panel.svelte' export { default as MonthCalendar } from './components/calendar/MonthCalendar.svelte' export { default as YearCalendar } from './components/calendar/YearCalendar.svelte' export { default as WeekCalendar } from './components/calendar/WeekCalendar.svelte' -export { default as DayCalendar } from './components/calendar/DayCalendar.svelte' export { default as FocusHandler } from './components/FocusHandler.svelte' export { default as ListView } from './components/ListView.svelte' diff --git a/plugins/calendar-resources/src/components/CalendarEventPresenter.svelte b/plugins/calendar-resources/src/components/CalendarEventPresenter.svelte new file mode 100644 index 0000000000..321b58eca3 --- /dev/null +++ b/plugins/calendar-resources/src/components/CalendarEventPresenter.svelte @@ -0,0 +1,37 @@ + + + +{#if !narrow} + {event.title} +{/if} +{#if !oneRow} + {getTime(startDate)}-{getTime(endDate)} +{/if} diff --git a/plugins/calendar-resources/src/components/CalendarView.svelte b/plugins/calendar-resources/src/components/CalendarView.svelte index f14aa9099e..38d92c16b6 100644 --- a/plugins/calendar-resources/src/components/CalendarView.svelte +++ b/plugins/calendar-resources/src/components/CalendarView.svelte @@ -13,7 +13,7 @@ // limitations under the License. -->
@@ -383,7 +375,7 @@ {:else if mode === CalendarMode.Week} showCreateDialog(e.detail.date, e.detail.withTime)} on:drop - > - - {@const event = objects.find((event) => event._id === id)} - {#if event} - - {/if} - - + on:dragenter={dragEnter} + /> {:else if mode === CalendarMode.Day || mode === CalendarMode.Days} {#key mode} showCreateDialog(e.detail.date, e.detail.withTime)} on:drop - > - - {@const event = objects.find((event) => event._id === id)} - {#if event} - - {/if} - - + on:dragenter={dragEnter} + /> {/key} {/if} diff --git a/packages/ui/src/components/calendar/DayCalendar.svelte b/plugins/calendar-resources/src/components/DayCalendar.svelte similarity index 77% rename from packages/ui/src/components/calendar/DayCalendar.svelte rename to plugins/calendar-resources/src/components/DayCalendar.svelte index 698bc88c3c..5eb138f056 100644 --- a/packages/ui/src/components/calendar/DayCalendar.svelte +++ b/plugins/calendar-resources/src/components/DayCalendar.svelte @@ -13,28 +13,29 @@ // limitations under the License. --> {#if event}
{ - if (event) showPanel(view.component.EditDoc, event._id, event._class, 'content') - }} + on:click|stopPropagation={click} + on:dragstart={dragStart} + on:drag={drag} + on:dragend={drop} + on:drop > - {#if !narrow && !empty} - {event.title} - {/if} - {#if !oneRow && !empty} - {getTime(startDate)}-{getTime(endDate)} + {#if !empty && presenter?.presenter} + {/if}
{/if}