From b97556da5e954fdbd5457e79d7c8df2edd9c851c Mon Sep 17 00:00:00 2001 From: Adam Obuchowicz Date: Tue, 4 Mar 2025 12:12:27 +0100 Subject: [PATCH] Add number of matched elements when filtering --- .../project-view/componentBrowser.spec.ts | 2 ++ .../components/ComponentBrowser/ComponentList.vue | 9 ++++++--- .../components/ComponentBrowser/filtering.ts | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/gui/integration-test/project-view/componentBrowser.spec.ts b/app/gui/integration-test/project-view/componentBrowser.spec.ts index f64efc8a2345..73659fe4ee88 100644 --- a/app/gui/integration-test/project-view/componentBrowser.spec.ts +++ b/app/gui/integration-test/project-view/componentBrowser.spec.ts @@ -202,6 +202,8 @@ test('Filtering list', async ({ page }) => { await expect(segments).toHaveText(['Data.', 're', 'ad', '_te', 'xt']) const highlighted = locate.componentBrowserEntry(page).locator('.component-label-segment.match') await expect(highlighted).toHaveText(['re', '_te']) + // Filtered-out group are hidden, and the rest displays number of matched elements. + await expect(page.locator('.groupEntry')).toHaveText(['all (1)', 'Input (1)']) }) test('Navigating groups', async ({ page }) => { diff --git a/app/gui/src/project-view/components/ComponentBrowser/ComponentList.vue b/app/gui/src/project-view/components/ComponentBrowser/ComponentList.vue index 5750386b108b..f26e57fc7032 100644 --- a/app/gui/src/project-view/components/ComponentBrowser/ComponentList.vue +++ b/app/gui/src/project-view/components/ComponentBrowser/ComponentList.vue @@ -5,7 +5,7 @@ import type { Filtering } from '@/components/ComponentBrowser/filtering' import SvgIcon from '@/components/SvgIcon.vue' import VirtualizedList from '@/components/VirtualizedList.vue' import { groupColorStyle } from '@/composables/nodeColors' -import { useSuggestionDbStore } from '@/stores/suggestionDatabase' +import { GroupInfo, useSuggestionDbStore } from '@/stores/suggestionDatabase' import { tryGetIndex } from '@/util/data/array' import { computed, ref, toRef, watch } from 'vue' import type { ComponentExposed } from 'vue-component-type-helpers' @@ -48,11 +48,12 @@ watch(selectedGroupIndex, () => (selectedComponentIndex.value = 0)) const suggestionDbStore = useSuggestionDbStore() const components = computed(() => makeComponentList(suggestionDbStore.entries, props.filtering)) const currentGroups = computed(() => { - return Array.from(components.value.keys(), (id) => ({ + return Array.from(components.value.entries(), ([id, components]) => ({ id, ...(id === 'all' ? { name: 'all' } : id === 'suggestions' ? { name: 'suggestions' } : (suggestionDbStore.groups[id] ?? { name: 'unknown' })), + ...(props.filtering.pattern != null ? { displayedNumber: components.length } : {}), })) }) const displayedGroupId = computed(() => @@ -111,7 +112,9 @@ defineExpose({ :debounceMouseSelection="MOUSE_SELECTION_DEBOUNCE" >
- {{ group.name }} + + {{ group.name }}{{ group.displayedNumber ? ` (${group.displayedNumber})` : '' }} +
diff --git a/app/gui/src/project-view/components/ComponentBrowser/filtering.ts b/app/gui/src/project-view/components/ComponentBrowser/filtering.ts index 466990f03022..5eef5142a8e5 100644 --- a/app/gui/src/project-view/components/ComponentBrowser/filtering.ts +++ b/app/gui/src/project-view/components/ComponentBrowser/filtering.ts @@ -244,7 +244,7 @@ export class Filtering { public currentModule: ProjectPath | undefined = undefined, ) { const { pattern, selfArg } = filter - this.pattern = pattern != null ? new FilteringWithPattern(pattern) : undefined + this.pattern = pattern ? new FilteringWithPattern(pattern) : undefined this.selfArg = selfArg }