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)"); + }); +});