From ad500753e1c77be5c4de5cb2b91bd5148ab16c75 Mon Sep 17 00:00:00 2001 From: Alexandre Brandizzi Date: Fri, 25 Sep 2026 12:36:16 -0300 Subject: [PATCH] fix(workorders): lock Site dialog contacts until the site record loads --- .../list/table/cells/site-dialog.tsx | 33 +++++++++++-------- .../list/table/cells/use-site-dialog-state.ts | 1 + .../site-dialog-site-record.test.tsx | 23 +++++++++++++ 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/app/(protected)/workorders/_components/list/table/cells/site-dialog.tsx b/src/app/(protected)/workorders/_components/list/table/cells/site-dialog.tsx index 82f35a06..2187a33a 100644 --- a/src/app/(protected)/workorders/_components/list/table/cells/site-dialog.tsx +++ b/src/app/(protected)/workorders/_components/list/table/cells/site-dialog.tsx @@ -125,19 +125,26 @@ export function SiteDialog({ /> )} - + {/* Locked until the site record loads, so its values never replace typed input. */} +
+ +
{ expect(screen.getByText("dal1@acme.test")).toBeInTheDocument(); }); + it("locks the contact fields until the site loads, so typed input is never replaced", async () => { + let resolveSite: (site: Location) => void = () => {}; + getById.mockReturnValue( + new Promise((resolve) => { + resolveSite = resolve; + }), + ); + renderDialog(); + + await waitFor(() => expect(getById).toHaveBeenCalled()); + expect(primaryField("POC name")).toBeDisabled(); + expect(primaryField("POC phone")).toBeDisabled(); + expect(primaryField("Notes…")).toBeDisabled(); + expect(saveButton()).toBeDisabled(); + + resolveSite(dallas); + + expect(await screen.findByDisplayValue("Jane")).toBeEnabled(); + fireEvent.change(primaryField("POC phone"), { target: { value: "(421) 433-9999" } }); + expect(primaryField("POC phone")).toHaveValue("(421) 433-9999"); + expect(saveButton()).toBeEnabled(); + }); + it("keeps Save disabled until something changes", async () => { renderDialog(); await screen.findByDisplayValue("Jane");