From f13c501eec97ebfa150257b109c3ca67c101b9e1 Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Mon, 17 Apr 2023 20:55:33 +0600 Subject: [PATCH] Fix status filter count (#3000) --- .../src/components/filter/ObjectFilter.svelte | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/plugins/view-resources/src/components/filter/ObjectFilter.svelte b/plugins/view-resources/src/components/filter/ObjectFilter.svelte index 02be8c150a..5fe26f6313 100644 --- a/plugins/view-resources/src/components/filter/ObjectFilter.svelte +++ b/plugins/view-resources/src/components/filter/ObjectFilter.svelte @@ -51,22 +51,22 @@ $: clazz = hierarchy.getClass(targetClass) $: isStatus = client.getHierarchy().isDerived(targetClass, core.class.Status) ?? false - let statusesCount: number[] = [] + let statusesCount: Record = {} - const groupValues = (val: (Status | undefined)[]): (Doc | undefined)[] => { + const groupValues = (val: Status[]): Doc[] => { const statuses = val - const result: (Doc | undefined)[] = [] - statusesCount = [] - const unique = [...new Set(val.map((v) => v?.name?.trim()?.toLocaleLowerCase()))] + const result: Doc[] = [] + statusesCount = {} + const unique = [...new Set(val.map((v) => v.name.trim().toLocaleLowerCase()))] unique.forEach((label, i) => { let count = 0 statuses.forEach((state) => { - if (state?.name?.trim()?.toLocaleLowerCase() === label?.trim()?.toLowerCase()) { + if (state.name.trim().toLocaleLowerCase() === label) { if (!count) result[i] = state count += targets.get(state?._id) ?? 0 } }) - statusesCount[i] = count + ;(statusesCount as any)[label] = count }) return result } @@ -111,9 +111,6 @@ values.unshift(undefined) } if (values.length !== targets.size) { - for (const value of values) { - targets.delete(value?._id) - } const oldSize = filter.value.length filter.value = filter.value.filter((p) => !targets.has(p._id)) const removed = oldSize - (filter.value.length ?? 0) @@ -156,6 +153,11 @@ const dispatch = createEventDispatcher() $: if (targetClass) getValues(search) + + function getStatusCount (value: Doc): string { + const label = (value as Status).name.trim().toLowerCase() + return statusesCount[label]?.toString() ?? '' + }
dispatch('changeContent')}> @@ -197,8 +199,8 @@ {/if}
- {#if isStatus} - {statusesCount[i] ?? ''} + {#if isStatus && value} + {getStatusCount(value)} {:else} {targets.get(value?._id) ?? ''} {/if}