From 2d5fc80c91204698fbf0702fd352d3d44f0282bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E4=B8=AB=E8=AE=B2=E6=A2=B5?= Date: Tue, 15 Sep 2026 23:52:37 +0800 Subject: [PATCH] fix(grid): keep pending new rows visible under column filters --- apps/desktop/src/components/grid/DataGrid.vue | 5 +++-- .../DataGridPendingRowFilterVisibility.spec.ts | 13 +++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 apps/desktop/src/components/grid/__tests__/DataGridPendingRowFilterVisibility.spec.ts diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 15e8a78f85..7717342bf4 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -1315,7 +1315,6 @@ const { applyLocalFilter, applyTypedLocalFilterValue, clearLocalFilter, - rowMatchesLocalColumnFilters, } = localColumnFilterRuntime; function guardHeaderPanelDismiss() { @@ -4405,7 +4404,9 @@ const displayRowRefs = computed(() => { } else { const newIndex = entry.newIndex; const row = newRows.value[newIndex]; - if (!row || !rowMatchesLocalColumnFilters(row)) continue; + // Pending rows must remain visible while a column filter is active so + // users can fill in and review newly inserted records before saving. + if (!row) continue; const status: RowStatus = "new"; if (!matchesRowStatusFilter(status, rowStatusFilter.value)) continue; refs.push({ diff --git a/apps/desktop/src/components/grid/__tests__/DataGridPendingRowFilterVisibility.spec.ts b/apps/desktop/src/components/grid/__tests__/DataGridPendingRowFilterVisibility.spec.ts new file mode 100644 index 0000000000..46d9ab8194 --- /dev/null +++ b/apps/desktop/src/components/grid/__tests__/DataGridPendingRowFilterVisibility.spec.ts @@ -0,0 +1,13 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const dataGridSource = readFileSync(new URL("../DataGrid.vue", import.meta.url), "utf8"); + +describe("DataGrid pending row visibility under local column filters", () => { + it("keeps pending new rows visible while a local column filter is active", () => { + // The pending-row branch of displayRowRefs must not consult the local + // column filter matchers; only the row status filter applies (#9201). + expect(dataGridSource).toMatch(/const row = newRows\.value\[newIndex\];[\s\S]{0,200}?if \(!row\) continue;/); + expect(dataGridSource).not.toContain("!rowMatchesLocalColumnFilters(row)"); + }); +});