fix(work-orders): close wizard before saving vendor notes on create

The create mutation's onSuccess awaited saveCompanyNotes before calling
onOpenChange(false). Because isCreating is createMutation.isPending ||
isCheckingDuplicate, and isPending drops to false the moment the work-order
create resolves, the dialog stayed open with Create re-enabled and pointer
events unlocked for the length of the roster GET plus notes PATCH. A second
Create click ran handleCreate again; with a blank provisional WO number the
duplicate lookup short-circuits without an API call, so createMutation.mutate
fired a second time and created a duplicate work order.

Close the dialog first, then fire saveCompanyNotes unawaited. The save does
not need the dialog open: fetchCurrentBaseline reads the roster when the
baseline is missing, and the failure toast is raised from the mutation's
option-level onError, so it still surfaces after the dialog unmounts.
This commit is contained in:
Codex Review Integration 2026-09-16 19:29:29 -03:00
parent cd5d4ad1d8
commit 1fa9f6ec02

View file

@ -65,9 +65,13 @@ export function useNewWoWizardController({
};
const createMutation = useCreateWorkOrderFromWizard((createdDraft) => {
// Close only after the company-notes save attempt settles; its failures are surfaced
// as note-save warnings and must never report the work-order creation as failed.
void saveCompanyNotes(createdDraft).finally(() => onOpenChange(false));
// Close the dialog first: the work-order create's isPending has already dropped, so
// holding the dialog open through the notes save would re-enable Create and unlock
// pointer events, and a second click would create a second work order. The save runs
// independently of the dialog — fetchCurrentBaseline covers a missing baseline and the
// note-save failure toast is surfaced from the mutation itself, not the dialog.
onOpenChange(false);
void saveCompanyNotes(createdDraft);
});
const { duplicateRow, setDuplicateRow, handleDuplicateFound, handleCreate, isCreating } =
useWizardDuplicateActions({