From a15fa68c3bf339a4a302d7836594a6a12a8db31b Mon Sep 17 00:00:00 2001 From: BOHA Date: Tue, 9 Jun 2026 18:50:18 +0200 Subject: [PATCH] =?UTF-8?q?fix(drafts):=20resync=20invoice=20number=20fiel?= =?UTF-8?q?d=20after=20in-place=20draft=E2=86=92issued=20finalize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors the issued-order po_number resync so all three detail pages surface the freshly-assigned number after finalize without a reload. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/admin/pages/InvoiceDetail.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/admin/pages/InvoiceDetail.tsx b/src/admin/pages/InvoiceDetail.tsx index ac62cc7..ecbf356 100644 --- a/src/admin/pages/InvoiceDetail.tsx +++ b/src/admin/pages/InvoiceDetail.tsx @@ -634,6 +634,20 @@ export default function InvoiceDetail() { }; }, []); + // After an in-place draft→issued finalize, the one-shot hydration effect below + // (gated by dataReady) won't re-run, so the freshly-assigned number from the + // refetched query is mirrored into the local field here (matches the + // issued-order page's po_number resync). + useEffect(() => { + if ( + isEdit && + invoice?.invoice_number && + invoice.invoice_number !== invoiceNumber + ) { + setInvoiceNumber(invoice.invoice_number); + } + }, [isEdit, invoice?.invoice_number, invoiceNumber]); + // ─── Sync query data to form state ─── // Edit mode: populate form from invoice data