From 6aa026dd9055971b062b6767b3e57af090fa17df Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Tue, 11 Apr 2023 22:05:01 +0600 Subject: [PATCH] =?UTF-8?q?TSK-1079=20=D0=91=D0=B0=D0=B3=20=D0=9E=D1=82?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=9D?= =?UTF-8?q?=D0=B5=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85=20=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D1=82=D1=8B=D1=85=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF?= =?UTF-8?q?=20=D0=B2=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=20=D0=90?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=20(#2944)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Denis Bykhov --- .../src/components/list/ListCategories.svelte | 12 +++++++-- plugins/view-resources/src/utils.ts | 27 +++++++++++++++++++ plugins/view-resources/src/viewOptions.ts | 16 ++++++----- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/plugins/view-resources/src/components/list/ListCategories.svelte b/plugins/view-resources/src/components/list/ListCategories.svelte index 1e316e003e..2ed26825eb 100644 --- a/plugins/view-resources/src/components/list/ListCategories.svelte +++ b/plugins/view-resources/src/components/list/ListCategories.svelte @@ -19,7 +19,15 @@ import { AnyComponent } from '@hcengineering/ui' import { AttributeModel, BuildModelKey, CategoryOption, ViewOptionModel, ViewOptions } from '@hcengineering/view' import { createEventDispatcher, onDestroy } from 'svelte' - import { buildModel, getAdditionalHeader, getCategories, getGroupByValues, getPresenter, groupBy } from '../../utils' + import { + buildModel, + concatCategories, + getAdditionalHeader, + getCategories, + getGroupByValues, + getPresenter, + groupBy + } from '../../utils' import { CategoryQuery, noCategory } from '../../viewOptions' import ListCategory from './ListCategory.svelte' @@ -85,7 +93,7 @@ const f = await getResource(categoryFunc.action) const res = hierarchy.clone(await f(_class, query, groupByKey, update, queryId, $statusStore)) if (res !== undefined) { - categories = Array.from(new Set([...categories, ...res])) + categories = concatCategories(res, categories) return } } diff --git a/plugins/view-resources/src/utils.ts b/plugins/view-resources/src/utils.ts index b96d3f5553..c841b1fec7 100644 --- a/plugins/view-resources/src/utils.ts +++ b/plugins/view-resources/src/utils.ts @@ -655,6 +655,33 @@ export async function getCategories ( ) } +export function concatCategories (arr1: CategoryType[], arr2: CategoryType[]): CategoryType[] { + const uniqueValues: Set = new Set() + const uniqueObjects: Map = new Map() + + for (const item of arr1) { + if (typeof item === 'object') { + const id = item.name + uniqueObjects.set(id, item) + } else { + uniqueValues.add(item) + } + } + + for (const item of arr2) { + if (typeof item === 'object') { + const id = item.name + if (!uniqueObjects.has(id)) { + uniqueObjects.set(id, item) + } + } else { + uniqueValues.add(item) + } + } + + return [...uniqueValues, ...uniqueObjects.values()] +} + /** * @public */ diff --git a/plugins/view-resources/src/viewOptions.ts b/plugins/view-resources/src/viewOptions.ts index b59d9df3fc..334733fb7d 100644 --- a/plugins/view-resources/src/viewOptions.ts +++ b/plugins/view-resources/src/viewOptions.ts @@ -131,16 +131,18 @@ export async function showEmptyGroups ( if (hierarchy.isDerived(attrClass, core.class.Status)) { // We do not need extensions for all status categories. - let statusList = mgr.statuses.filter((it) => { + let statusList = mgr.filter((it) => { return it.ofAttribute === attr._id }) if (query !== undefined) { - statusList = matchQuery( - statusList, - query as DocumentQuery, - _class, - hierarchy - ) as unknown as Array> + const { [key]: st, space } = query + const resQuery: DocumentQuery = { + space + } + if (st !== undefined) { + resQuery._id = st + } + statusList = matchQuery(statusList, resQuery, _class, hierarchy) as unknown as Array> } const statuses = statusList.map((it) => it._id) return await groupByCategory(client, _class, key, statuses, mgr, viewletDescriptorId)