From 91286ab1e6d6b249b82ff593f287801e927c9821 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev <haiodo@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:38:03 +0700 Subject: [PATCH] UBERF-4388: Few performance related fixes (#4053) Signed-off-by: Andrey Sobolev <haiodo@gmail.com> --- .../breadcrumbs/BreadcrumbsElement.svelte | 8 ++++++- .../src/components/schedule/MonthView.svelte | 24 +++++++++++++++---- .../issues/edit/QueryIssuesList.svelte | 10 ++++++-- .../src/components/list/ListView.svelte | 15 ++++++++---- 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/packages/presentation/src/components/breadcrumbs/BreadcrumbsElement.svelte b/packages/presentation/src/components/breadcrumbs/BreadcrumbsElement.svelte index 1572c94b73..9248be6047 100644 --- a/packages/presentation/src/components/breadcrumbs/BreadcrumbsElement.svelte +++ b/packages/presentation/src/components/breadcrumbs/BreadcrumbsElement.svelte @@ -13,6 +13,7 @@ // limitations under the License. --> <script lang="ts"> + import { resizeObserver } from '@hcengineering/ui' export let label: string | undefined = undefined export let title: string | undefined = undefined export let position: 'start' | 'middle' | 'end' | undefined = undefined @@ -24,7 +25,12 @@ $: lenght = clientWidth + 32 > 300 ? 300 : clientWidth + 32 </script> -<div class="hidden-text text-md font-medium pointer-events-none content-pointer-events-none" bind:clientWidth> +<div + class="hidden-text text-md font-medium pointer-events-none content-pointer-events-none" + use:resizeObserver={(evt) => { + clientWidth = evt.clientWidth + }} +> {#if $$slots.default} <slot /> {:else} diff --git a/plugins/hr-resources/src/components/schedule/MonthView.svelte b/plugins/hr-resources/src/components/schedule/MonthView.svelte index fd54b872f4..0bb501574a 100644 --- a/plugins/hr-resources/src/components/schedule/MonthView.svelte +++ b/plugins/hr-resources/src/components/schedule/MonthView.svelte @@ -29,7 +29,8 @@ Scroller, showPopup, tooltip, - deviceOptionsStore as deviceInfo + deviceOptionsStore as deviceInfo, + resizeObserver } from '@hcengineering/ui' import hr from '../../plugin' import { getHolidayDatesForEmployee, getRequests, isHoliday } from '../../utils' @@ -251,10 +252,20 @@ {@const dep = departmentById.get(department)} <Scroller horizontal fade={{ multipler: { top: headerHeightRem, left: headerWidthRem } }} noFade> - <div bind:clientWidth={containerWidth} class="timeline"> + <div + use:resizeObserver={(evt) => { + containerWidth = evt.clientWidth + }} + class="timeline" + > {#key [containerWidthRem, columnWidthRem, headerWidthRem]} <!-- Resource Header --> - <div bind:clientWidth={headerWidth} class="timeline-header timeline-resource-header"> + <div + use:resizeObserver={(evt) => { + headerWidth = evt.clientWidth + }} + class="timeline-header timeline-resource-header" + > <div class="timeline-row"> <div class="timeline-resource-cell"> <div class="timeline-resource-header__title"> @@ -268,7 +279,12 @@ </div> <!-- Resource Content --> - <div bind:clientWidth={headerWidth} class="timeline-resource-content"> + <div + use:resizeObserver={(evt) => { + headerWidth = evt.clientWidth + }} + class="timeline-resource-content" + > {#each rows as row} <div class="timeline-row" style={getRowStyle(row)}> <div class="timeline-resource-cell"> diff --git a/plugins/tracker-resources/src/components/issues/edit/QueryIssuesList.svelte b/plugins/tracker-resources/src/components/issues/edit/QueryIssuesList.svelte index bdec957878..7bec36f1c4 100644 --- a/plugins/tracker-resources/src/components/issues/edit/QueryIssuesList.svelte +++ b/plugins/tracker-resources/src/components/issues/edit/QueryIssuesList.svelte @@ -16,7 +16,7 @@ import { Class, Doc, DocumentQuery, Ref } from '@hcengineering/core' import { createQuery, getClient } from '@hcengineering/presentation' import { Issue } from '@hcengineering/tracker' - import { Button, Chevron, ExpandCollapse, IconAdd, closeTooltip, showPopup } from '@hcengineering/ui' + import { Button, Chevron, ExpandCollapse, IconAdd, closeTooltip, resizeObserver, showPopup } from '@hcengineering/ui' import view, { ViewOptions, Viewlet, ViewletPreference } from '@hcengineering/view' import { ViewletsSettingButton } from '@hcengineering/view-resources' import { afterUpdate } from 'svelte' @@ -157,7 +157,13 @@ {#if hasSubIssues && viewOptions && viewlet} {#if !isCollapsed} <ExpandCollapse isExpanded={!isCollapsed}> - <div class="list" class:collapsed={isCollapsed} bind:clientWidth={listWidth}> + <div + class="list" + class:collapsed={isCollapsed} + use:resizeObserver={(evt) => { + listWidth = evt.clientWidth + }} + > <SubIssueList createItemDialog={CreateIssue} createItemLabel={tracker.string.AddIssueTooltip} diff --git a/plugins/view-resources/src/components/list/ListView.svelte b/plugins/view-resources/src/components/list/ListView.svelte index e5d1b6988c..aad2a360c5 100644 --- a/plugins/view-resources/src/components/list/ListView.svelte +++ b/plugins/view-resources/src/components/list/ListView.svelte @@ -15,10 +15,10 @@ <script lang="ts"> import { Class, Doc, DocumentQuery, FindOptions, Ref, Space } from '@hcengineering/core' import { IntlString } from '@hcengineering/platform' - import { AnyComponent, Scroller } from '@hcengineering/ui' - import { BuildModelKey, Viewlet, ViewOptions } from '@hcengineering/view' - import { onMount } from 'svelte' import { ActionContext } from '@hcengineering/presentation' + import { AnyComponent, Scroller, resizeObserver } from '@hcengineering/ui' + import { BuildModelKey, ViewOptions, Viewlet } from '@hcengineering/view' + import { onMount } from 'svelte' import { ListSelectionProvider, SelectDirection, focusStore } from '../..' import List from './List.svelte' @@ -41,7 +41,7 @@ let list: List let scroll: Scroller let divScroll: HTMLDivElement - let listWidth: number + let listWidth: number = 0 const listProvider = new ListSelectionProvider( (offset: 1 | -1 | 0, of?: Doc, dir?: SelectDirection, noScroll?: boolean) => { @@ -63,7 +63,12 @@ mode: 'browser' }} /> -<div bind:clientWidth={listWidth} class="w-full h-full py-4 clear-mins"> +<div + use:resizeObserver={(evt) => { + listWidth = evt.clientWidth + }} + class="w-full h-full py-4 clear-mins" +> <Scroller bind:this={scroll} bind:divScroll