From f01a79d0b597ce70bac10c3e1ee9f98617cae67e Mon Sep 17 00:00:00 2001 From: Arthur Bassi Date: Mon, 10 Aug 2026 13:50:20 -0300 Subject: [PATCH] fix(work-orders): preserve draft technician staging on save [SH-193] --- .../_components/list/table/cells/use-vendor-dialog-save.ts | 7 +++++-- .../_components/list/table/cells/vendor-dialog.tsx | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/app/(protected)/workorders/_components/list/table/cells/use-vendor-dialog-save.ts b/src/app/(protected)/workorders/_components/list/table/cells/use-vendor-dialog-save.ts index d29e02b0..4af98e27 100644 --- a/src/app/(protected)/workorders/_components/list/table/cells/use-vendor-dialog-save.ts +++ b/src/app/(protected)/workorders/_components/list/table/cells/use-vendor-dialog-save.ts @@ -35,12 +35,12 @@ export function useVendorDialogSave({ setSaveError, }: UseVendorDialogSaveArgs) { const resolveSaveVendor = () => + allVendors.find((vendor) => String(vendor.id) === selectedKey) ?? allVendors.find( (vendor) => vendor.contactName === tech && vendor.companyName === (resolvedCompany || anchorCompanyName), ) ?? - allVendors.find((vendor) => String(vendor.id) === selectedKey) ?? selectedVendor; const handleSave = async () => { @@ -50,7 +50,10 @@ export function useVendorDialogSave({ if (saveVendor != null && isDraftVendorId(saveVendor.id) && pendingPayload) { try { - const created = await createVendor.mutateAsync(pendingPayload); + const created = await createVendor.mutateAsync({ + ...pendingPayload, + phone: phone.trim() || pendingPayload.phone, + }); saveVendor = vendorToDropdownItem(created); } catch (error) { const message = error instanceof Error ? error.message : "Failed to create technician"; diff --git a/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog.tsx b/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog.tsx index 5504e5bf..ad077503 100644 --- a/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog.tsx +++ b/src/app/(protected)/workorders/_components/list/table/cells/vendor-dialog.tsx @@ -60,13 +60,14 @@ export function VendorDialog({ useEffect(() => { if (open) { setT(tech); - setPhone(techPhone || phoneForOption(tech, technicianOptions)); + setPhone(techPhone || phoneForOption(tech, buildTechnicianOptions(vendors, tech, company))); setNotes(""); setAddedVendors([]); setPendingCreates({}); setSaveError(null); } - }, [open, tech, techPhone, technicianOptions]); + // Intentionally omit technicianOptions: rebuilding options after Add must not clear staged drafts. + }, [open, tech, techPhone, vendors, company]); const selected = technicianOptions.find((o) => o.name === t && (!company || o.company === company)) ??