diff --git a/src/app/(protected)/workorders/_components/list/table/wo-table-inline-row-cells.tsx b/src/app/(protected)/workorders/_components/list/table/wo-table-inline-row-cells.tsx index 0d76d00d..ffc1afeb 100644 --- a/src/app/(protected)/workorders/_components/list/table/wo-table-inline-row-cells.tsx +++ b/src/app/(protected)/workorders/_components/list/table/wo-table-inline-row-cells.tsx @@ -28,6 +28,44 @@ type WoTableInlineRowCellsProps = { onPatch: (patch: Partial) => void; }; +function InlineScheduleOnCell({ + draft, + weekDefault, + onPatch, +}: { + draft: WorkOrderTableDraft; + weekDefault: boolean; + onPatch: (patch: Partial) => void; +}) { + return ( + + + onPatch({ + scheduledOn: date, + scheduleWeekOnly: false, + targetWeek: "", + isAddOnOverride: false, + }) + } + onSaveWeek={(week) => + onPatch({ + scheduledOn: "", + targetWeek: week, + scheduleWeekOnly: true, + isAddOnOverride: false, + }) + } + /> + + ); +} + export function WoTableInlineRowCells({ draft, weekDefault, @@ -84,31 +122,7 @@ export function WoTableInlineRowCells({ /> - - - onPatch({ - scheduledOn: date, - scheduleWeekOnly: false, - targetWeek: "", - isAddOnOverride: false, - }) - } - onSaveWeek={(week) => - onPatch({ - scheduledOn: "", - targetWeek: week, - scheduleWeekOnly: true, - isAddOnOverride: false, - }) - } - /> - + { expect(payload.isAddOn).toBe(true); }); - it("derives isAddOn from range start via cutoff (range persists scheduledDate)", () => { + it("derives isAddOn from range start via cutoff (range omits scheduledDate on create)", () => { const payload = mapWizardDraftToBoardCreatePayload({ ...EMPTY_WIZARD_DRAFT, type: "PM", @@ -96,7 +96,8 @@ describe("mapWizardDraftToBoardCreatePayload", () => { isAddOnOverride: false, }); - expect(payload.scheduledDate).toBe("2026-07-08"); + // On create, range mode does not persist scheduledDate (notes carry the range). + expect(payload.scheduledDate).toBeUndefined(); // createdAt defaults to now; after prior-Saturday 2026-07-04 for that week → true expect(payload.isAddOn).toBe(true); }); diff --git a/src/test/domain/work-orders/use-cases/use-work-order-table-mutations.test.tsx b/src/test/domain/work-orders/use-cases/use-work-order-table-mutations.test.tsx index 6ce07630..275f7b79 100644 --- a/src/test/domain/work-orders/use-cases/use-work-order-table-mutations.test.tsx +++ b/src/test/domain/work-orders/use-cases/use-work-order-table-mutations.test.tsx @@ -42,14 +42,12 @@ function makeWrapper() { type ServerState = { status: string; scheduledDate: string; - completedDate: string; docStatus: CompletionDocStatus; }; const BASE_SERVER: ServerState = { status: "Open", scheduledDate: "2026-06-01", - completedDate: "", docStatus: "No", }; @@ -61,7 +59,6 @@ const BASE_ROW = { dispatcherId: "d1", dispatcherName: "Dispatcher", scheduledOn: "2026-06-01", - completedDate: "", targetWeek: "", dayGroup: "", dayLabel: "", @@ -129,14 +126,6 @@ describe("useWorkOrderTableMutations completion-doc persistence", () => { rowVersion: `${payload.workOrderVersion}-next`, }; } - if (payload.field === "completedDate" && typeof payload.value === "string") { - serverState = { ...serverState, completedDate: payload.value }; - rowState = { - ...rowState, - completedDate: payload.value, - rowVersion: `${payload.workOrderVersion}-date`, - }; - } events.push(`boardPatch:${payload.field}:end`); return { ...rowState }; }, @@ -170,46 +159,6 @@ describe("useWorkOrderTableMutations completion-doc persistence", () => { expect(getById).not.toHaveBeenCalled(); expect(serverState.docStatus).toBe("NN"); }); - - it("serializes board docStatus and completedDate via PATCH without racing or EditWorkorder", async () => { - const onPatch = vi.fn(); - const { result } = renderHook( - () => - useWorkOrderTableMutations({ - onPatch, - clearPatch: () => undefined, - getRow: () => rowState, - }), - { wrapper: makeWrapper() }, - ); - - act(() => { - result.current.patchField(42, { docStatus: "Yes" }); - result.current.patchField(42, { completedDate: "2026-07-20" }); - }); - - await waitFor(() => expect(events).toContain("boardPatch:completedDate:end")); - await waitFor(() => expect(events).toContain("boardPatch:docStatus:end")); - - expect(events).toEqual([ - "boardPatch:docStatus:start", - "boardPatch:docStatus:end", - "boardPatch:completedDate:start", - "boardPatch:completedDate:end", - ]); - - expect(getById).not.toHaveBeenCalled(); - expect(update).not.toHaveBeenCalled(); - expect(patchBoardField).toHaveBeenCalledWith( - 42, - expect.objectContaining({ field: "completedDate", value: "2026-07-20" }), - ); - - expect(serverState.docStatus).toBe("Yes"); - expect(serverState.completedDate).toBe("2026-07-20"); - expect(serverState.scheduledDate).toBe(BASE_SERVER.scheduledDate); - expect(serverState.status).toBe(BASE_SERVER.status); - }); }); describe("applySchedulePatch isAddOn optimistic clear", () => {