From 12a1032e1b51a3a64441e9db4c43d2516d2b2104 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Thu, 21 May 2026 14:53:13 +0800 Subject: [PATCH] fix(grid): preserve column filters on refresh --- apps/desktop/src/components/grid/DataGrid.vue | 15 ++++++++++++++- packages/app-tests/dataGridRefreshSort.test.ts | 5 +++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 6e12c56ef..102005da6 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -1147,8 +1147,21 @@ function onScrollerScroll(e: Event) { initColumnWidths(); watch(() => visibleColumns.value.length, initColumnWidths); +const localFilterScopeKey = computed(() => + [ + props.connectionId ?? "", + props.database ?? "", + props.schema ?? "", + props.context ?? "", + props.tableMeta?.schema ?? "", + props.tableMeta?.tableName ?? "", + props.tableMeta ? "" : (props.sql ?? ""), + props.result.columns.join("\0"), + (props.sourceColumns ?? []).map((column) => column ?? "").join("\0"), + ].join("\u0001"), +); watch( - () => props.result, + () => localFilterScopeKey.value, () => { localColumnFilters.value = {}; hiddenColumnIndexes.value = new Set(); diff --git a/packages/app-tests/dataGridRefreshSort.test.ts b/packages/app-tests/dataGridRefreshSort.test.ts index e4eadf6ad..ea1cd6923 100644 --- a/packages/app-tests/dataGridRefreshSort.test.ts +++ b/packages/app-tests/dataGridRefreshSort.test.ts @@ -17,3 +17,8 @@ test("rollback refresh preserves header sort order", () => { assert.match(match[1], /currentOrderBy\(\)/); assert.doesNotMatch(match[1], /orderByInput\.value\.trim\(\) \|\| undefined/); }); + +test("data result refresh preserves local column filters", () => { + assert.doesNotMatch(source, /watch\(\s*\(\)\s*=>\s*props\.result,[\s\S]*?localColumnFilters\.value\s*=\s*\{\}/); + assert.match(source, /localFilterScopeKey/); +});