From c7efa0d1130e57bb4413113db8f9430ea998501e Mon Sep 17 00:00:00 2001 From: Alexander Platov Date: Mon, 17 Jul 2023 09:41:46 +0300 Subject: [PATCH] Updated Calendar layout. (#3504) Signed-off-by: Alexander Platov --- packages/theme/styles/_colors.scss | 2 + packages/theme/styles/_layouts.scss | 1 + .../src/components/DropdownLabelsIntl.svelte | 2 +- .../components/calendar/DayCalendar.svelte | 431 ++++++++++++++++++ .../components/calendar/MonthCalendar.svelte | 67 +-- .../components/calendar/WeekCalendar.svelte | 83 ++-- .../components/calendar/YearCalendar.svelte | 42 +- .../ui/src/components/icons/Dropdown.svelte | 4 +- packages/ui/src/index.ts | 1 + packages/ui/src/types.ts | 12 + .../src/components/CalendarView.svelte | 400 +++++++++------- .../src/components/EventElement.svelte | 78 ++++ .../src/components/Events.svelte | 76 +-- plugins/calendar-resources/src/index.ts | 1 + 14 files changed, 891 insertions(+), 309 deletions(-) create mode 100644 packages/ui/src/components/calendar/DayCalendar.svelte create mode 100644 plugins/calendar-resources/src/components/EventElement.svelte diff --git a/packages/theme/styles/_colors.scss b/packages/theme/styles/_colors.scss index 9101b78c2d..20436cbefb 100644 --- a/packages/theme/styles/_colors.scss +++ b/packages/theme/styles/_colors.scss @@ -183,6 +183,7 @@ --theme-toggle-bg-hover: rgba(120, 120, 128, 0.64); --theme-toggle-on-bg-color: #205dc2; --theme-toggle-on-bg-hover: #1A53AF; + --theme-radio-bg-color: #343442; --theme-error-color: #eb5757; --theme-urgent-color: #F5694A; @@ -371,6 +372,7 @@ --theme-toggle-bg-hover: rgba(120, 120, 128, 0.64); --theme-toggle-on-bg-color: #205dc2; --theme-toggle-on-bg-hover: #1A53AF; + --theme-radio-bg-color: #E5E5E5; --theme-error-color: #eb5757; // Dark --theme-urgent-color: #F5694A; diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index b14d703e69..6f080197db 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -902,6 +902,7 @@ a.no-line { .background-button-noborder-bg-hover { background-color: var(--noborder-bg-hover); } .background-primary-color { background-color: var(--accented-button-default); } .background-content-accent-color { background-color: var(--accent-color); } +.background-comp-header-color { background-color: var(--theme-comp-header-color); } .content-trans-color { color: var(--theme-trans-color); } .content-darker-color { color: var(--theme-darker-color); } diff --git a/packages/ui/src/components/DropdownLabelsIntl.svelte b/packages/ui/src/components/DropdownLabelsIntl.svelte index 3165488310..99c07e8ed4 100644 --- a/packages/ui/src/components/DropdownLabelsIntl.svelte +++ b/packages/ui/src/components/DropdownLabelsIntl.svelte @@ -87,7 +87,7 @@ on:click={openPopup} > - diff --git a/packages/ui/src/components/calendar/DayCalendar.svelte b/packages/ui/src/components/calendar/DayCalendar.svelte new file mode 100644 index 0000000000..449b7a245d --- /dev/null +++ b/packages/ui/src/components/calendar/DayCalendar.svelte @@ -0,0 +1,431 @@ + + + + +
checkSizes(element)} + > + + {#each [...Array(displayedDaysCount).keys()] as dayOfWeek} + {@const day = getDay(weekMonday, dayOfWeek)} + + {/each} + + + {#each [...Array(displayedDaysCount).keys()] as dayOfWeek} + {@const day = getDay(weekMonday, dayOfWeek)} + {@const alldays = events.filter((ev) => ev.allDay && ev.day === dayOfWeek)} + + + {/each} + + {#each [...Array(displayedHours).keys()] as hourOfDay} + {#each [...Array(2).keys()] as half} + {#if hourOfDay === 0 && half === 0} +
+ {:else if hourOfDay < displayedHours - 1 && half} +
+ {addZero(hourOfDay + 1)}:00 +
+ {:else if half} +
+ {/if} + {#each [...Array(displayedDaysCount).keys()] as dayOfWeek} + {@const day = getDay(weekMonday, dayOfWeek)} + {@const cell = hourOfDay * 2 + displayedHours * 2 * dayOfWeek + half} + +
{ + dispatch('create', { + day, + hour: hourOfDay, + halfHour: half === 1, + date: new Date(day.setHours(hourOfDay, half * 30, 0, 0)) + }) + }} + /> + {/each} + {/each} + {/each} + + {#key calendarWidth} + {#each events.filter((ev) => !ev.allDay) as event, i} + {@const rect = getRect(event)} + +
+ +
+ {/each} + {/key} +
+ + + diff --git a/packages/ui/src/components/calendar/MonthCalendar.svelte b/packages/ui/src/components/calendar/MonthCalendar.svelte index e24b1ee05b..c4d08fc447 100644 --- a/packages/ui/src/components/calendar/MonthCalendar.svelte +++ b/packages/ui/src/components/calendar/MonthCalendar.svelte @@ -15,6 +15,7 @@ -
-
- {#each [...Array(7).keys()] as dayOfWeek} -
{getWeekDayName(day(firstDayOfCurrentMonth, dayOfWeek), weekFormat)}
- {/each} -
-
- {#each [...Array(displayedWeeksCount).keys()] as weekIndex} + +
+
{#each [...Array(7).keys()] as dayOfWeek} - {@const date = weekday(firstDayOfCurrentMonth, weekIndex, dayOfWeek)} -
-
- -
onSelect(date)} - > - {#if !$$slots.cell} - {date.getDate()} - {:else} - - {/if} +
{getWeekDayName(day(firstDayOfCurrentMonth, dayOfWeek), weekFormat)}
+ {/each} +
+
+ {#each [...Array(displayedWeeksCount).keys()] as weekIndex} + {#each [...Array(7).keys()] as dayOfWeek} + {@const date = weekday(firstDayOfCurrentMonth, weekIndex, dayOfWeek)} +
+
+ +
onSelect(date)} + > + {#if !$$slots.cell} + {date.getDate()} + {:else} + + {/if} +
-
+ {/each} {/each} - {/each} +
-
+ diff --git a/plugins/calendar-resources/src/components/EventElement.svelte b/plugins/calendar-resources/src/components/EventElement.svelte new file mode 100644 index 0000000000..82748b4ce2 --- /dev/null +++ b/plugins/calendar-resources/src/components/EventElement.svelte @@ -0,0 +1,78 @@ + + + +{#if event} + +
{ + if (event) showPanel(view.component.EditDoc, event._id, event._class, 'content') + }} + > + {#if !narrow} + {event.title} + {/if} + {#if !oneRow} + {getTime(startDate)}-{getTime(endDate)} + {/if} +
+{/if} + + diff --git a/plugins/calendar-resources/src/components/Events.svelte b/plugins/calendar-resources/src/components/Events.svelte index 57335f02d6..0b72ebcf02 100644 --- a/plugins/calendar-resources/src/components/Events.svelte +++ b/plugins/calendar-resources/src/components/Events.svelte @@ -17,25 +17,9 @@ import { Class, DocumentQuery, Ref, Space, WithLookup } from '@hcengineering/core' import { Asset, IntlString } from '@hcengineering/platform' import { createQuery } from '@hcengineering/presentation' - import { - AnyComponent, - Button, - Component, - Label, - Loading, - SearchEdit, - showPopup, - TabList, - IconAdd - } from '@hcengineering/ui' + import { AnyComponent, Button, Component, Label, Loading, showPopup, TabList, IconAdd } from '@hcengineering/ui' import view, { Viewlet, ViewletPreference } from '@hcengineering/view' - import { - FilterButton, - getViewOptions, - setActiveViewletId, - ViewletSettingButton, - viewOptionStore - } from '@hcengineering/view-resources' + import { getViewOptions, setActiveViewletId, viewOptionStore } from '@hcengineering/view-resources' import calendar from '../plugin' // import { deviceOptionsStore as deviceInfo } from '@hcengineering/ui' @@ -50,7 +34,7 @@ export let createLabel: IntlString | undefined = calendar.string.CreateEvent const viewletQuery = createQuery() - let search = '' + const search = '' let resultQuery: DocumentQuery = {} let viewlets: WithLookup[] = [] @@ -106,8 +90,6 @@ } }) - // $: twoRows = $deviceInfo.twoRows - $: viewOptions = getViewOptions(selectedViewlet, $viewOptionStore) @@ -130,35 +112,25 @@
-
-
- updateResultQuery(search)} /> - -
- -
-
- - -
-
-{#if selectedViewlet?.$lookup?.descriptor?.component} - {#if loading} - - {:else} - +
+ {#if selectedViewlet?.$lookup?.descriptor?.component} + {#if loading} + + {:else} + + {/if} {/if} -{/if} +
diff --git a/plugins/calendar-resources/src/index.ts b/plugins/calendar-resources/src/index.ts index 4d17b37682..9cbfce596c 100644 --- a/plugins/calendar-resources/src/index.ts +++ b/plugins/calendar-resources/src/index.ts @@ -127,6 +127,7 @@ async function removePast (client: TxOperations, object: ReccuringInstance): Pro export enum CalendarMode { Day, + Days, Week, Month, Year