diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 2e5b94fb5d..111e03bfe5 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -576,6 +576,23 @@ function localFilterActive(colIdx: number): boolean { const localFilterCount = computed(() => Object.values(localColumnFilters.value).filter((values) => values.size).length); const hasLocalColumnFilters = computed(() => localFilterCount.value > 0); +const filterButtonCount = computed(() => structuredFilterCount.value + localFilterCount.value); +const filterButtonActive = computed(() => hasStructuredFilters.value || hasLocalColumnFilters.value); +const localFilterSummaries = computed(() => + Object.entries(localColumnFilters.value) + .filter(([, selected]) => selected.size > 0) + .map(([columnIndexText, selected]) => { + const columnIndex = Number(columnIndexText); + const labelByKey = new Map(buildLocalFilterOptions(columnIndex).map((option) => [option.key, option.label])); + const values = [...selected].map((key) => labelByKey.get(key) ?? key); + return { + columnIndex, + columnName: props.result.columns[columnIndex] ?? `#${columnIndex + 1}`, + values: values.slice(0, 3), + hiddenValueCount: Math.max(0, values.length - 3), + }; + }), +); function rowMatchesLocalColumnFilters(data: CellValue[]): boolean { const activeEntries = Object.entries(localColumnFilters.value).filter(([, selected]) => selected.size > 0); @@ -996,10 +1013,10 @@ function resetStructuredFilters() { } async function clearAllFilters() { - if (!canUseWhereSearch.value) return; whereFilterInput.value = ""; resetStructuredFilters(); - await applyWhereFilter(); + clearLocalFilter(); + if (canUseWhereSearch.value) await applyWhereFilter(); } function buildGroupedWhere(conditions: string[], rules: StructuredFilterRule[]): string { @@ -5570,7 +5587,7 @@ const gridContextMenuItems = computed(() => { -