From ebdee0292ce7d18ee0628a1eb0e495e7343a1c93 Mon Sep 17 00:00:00 2001 From: Adam Moussa Date: Fri, 25 Sep 2026 16:45:14 -0400 Subject: [PATCH 1/2] fix(web): address review feedback --- e2e/invoice-filters.spec.ts | 2 ++ src/dashboard/DashboardGrids.tsx | 6 +++--- src/dashboard/InvoiceFilterToolbar.tsx | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/e2e/invoice-filters.spec.ts b/e2e/invoice-filters.spec.ts index 49f1db1..2b5588f 100644 --- a/e2e/invoice-filters.spec.ts +++ b/e2e/invoice-filters.spec.ts @@ -8,6 +8,7 @@ test.describe("Invoice Processing filters (AP-43)", () => { const before = await grid.locator(".MuiDataGrid-row").count(); expect(before).toBeGreaterThan(0); + await expect(page.getByTestId("action-filter").getByPlaceholder("Search")).toBeVisible(); await page.getByTestId("action-filter").click(); await page.getByRole("option", { name: "Approve invoice" }).click(); await expect(page.getByTestId("filter-toggle").locator(".MuiBadge-badge")).toHaveText("1"); @@ -15,5 +16,6 @@ test.describe("Invoice Processing filters (AP-43)", () => { await page.getByTestId("vendor-filter").fill("Harbor"); await expect(page.getByTestId("filter-toggle").locator(".MuiBadge-badge")).toHaveText("2"); await expect(grid.locator(".MuiDataGrid-row")).toHaveCount(1); + await expect(page.getByTestId("attention-banner")).toContainText("1 invoices require approval"); }); }); diff --git a/src/dashboard/DashboardGrids.tsx b/src/dashboard/DashboardGrids.tsx index e7d8a55..a51520b 100644 --- a/src/dashboard/DashboardGrids.tsx +++ b/src/dashboard/DashboardGrids.tsx @@ -118,7 +118,7 @@ export function DashboardGrids() { const selectedCount = countSelectedRows( selection, - filteredApproved.map((invoice) => invoice.id), + approvedRows.map((invoice) => invoice.id), ); const processRowUpdate = async (newRow: MockInvoice, oldRow: MockInvoice) => { @@ -218,7 +218,7 @@ export function DashboardGrids() { - {attentionRows.length > 0 && tab === "attention" ? ( + {filteredAttention.length > 0 && tab === "attention" ? ( - {attentionRows.length} invoices require approval. Show invoices ready to approve. + {filteredAttention.length} invoices require approval. Show invoices ready to approve. ) : null} diff --git a/src/dashboard/InvoiceFilterToolbar.tsx b/src/dashboard/InvoiceFilterToolbar.tsx index ee1f548..5e6a0c2 100644 --- a/src/dashboard/InvoiceFilterToolbar.tsx +++ b/src/dashboard/InvoiceFilterToolbar.tsx @@ -52,7 +52,7 @@ export function InvoiceFilterToolbar({ renderInput={(params) => ( From a9e6239c3fad053dea76140cd554e640c539cf68 Mon Sep 17 00:00:00 2001 From: Adam Moussa Date: Fri, 25 Sep 2026 16:46:36 -0400 Subject: [PATCH 2/2] fix(web): address review feedback --- e2e/invoice-columns.spec.ts | 24 ++++++++++++++++++++++++ src/dashboard/ColumnsDrawer.tsx | 10 +++++++++- src/dashboard/DashboardGrids.tsx | 4 ++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/e2e/invoice-columns.spec.ts b/e2e/invoice-columns.spec.ts index 6a7ff2f..27e6914 100644 --- a/e2e/invoice-columns.spec.ts +++ b/e2e/invoice-columns.spec.ts @@ -27,4 +27,28 @@ test.describe("Invoice Processing columns drawer (AP-45)", () => { page.getByTestId("grid-pending").locator('.MuiDataGrid-columnHeader[data-field="tagging"]'), ).toBeVisible(); }); + + test("locked Vendor column stays visible and Reset clears the hidden search", async ({ + page, + }) => { + await page.goto("/"); + await page.getByTestId("columns-toggle").click(); + const drawer = page.getByTestId("columns-drawer"); + const vendorBox = drawer.getByTestId("columns-visible-vendor").locator('input[type="checkbox"]'); + await expect(vendorBox).toBeDisabled(); + await vendorBox.evaluate((el: HTMLInputElement) => { + el.disabled = false; + el.click(); + }); + await expect( + page.getByTestId("grid-pending").locator('.MuiDataGrid-columnHeader[data-field="vendor"]'), + ).toBeVisible(); + + const search = drawer.getByTestId("columns-hidden-search"); + await search.fill("no-such-column"); + await drawer.getByTestId("columns-selector-reset-button").evaluate((el: HTMLElement) => { + el.click(); + }); + await expect(search).toHaveValue(""); + }); }); diff --git a/src/dashboard/ColumnsDrawer.tsx b/src/dashboard/ColumnsDrawer.tsx index 415d3b6..2ccaa95 100644 --- a/src/dashboard/ColumnsDrawer.tsx +++ b/src/dashboard/ColumnsDrawer.tsx @@ -143,7 +143,15 @@ export function ColumnsDrawer({ Columns - diff --git a/src/dashboard/DashboardGrids.tsx b/src/dashboard/DashboardGrids.tsx index 7a99859..5eee4cb 100644 --- a/src/dashboard/DashboardGrids.tsx +++ b/src/dashboard/DashboardGrids.tsx @@ -5,7 +5,7 @@ import { ColumnsDrawer } from "@/dashboard/ColumnsDrawer"; import { InvoiceFilterToolbar } from "@/dashboard/InvoiceFilterToolbar"; import { CreatePayRunButton } from "@/dashboard/CreatePayRunButton"; import { InvoiceDataGrid } from "@/dashboard/InvoiceDataGrid"; -import { columnsFromCatalogKeys, readyToPayColumns } from "@/dashboard/columns"; +import { columnsFromCatalogKeys } from "@/dashboard/columns"; import { loadColumnPrefs, resetColumnPrefs, @@ -287,7 +287,7 @@ export function DashboardGrids() { setSelection(model)}