From 7051256e606e71e9f99d8944f7ad37b86d207831 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Fri, 27 Feb 2026 04:39:24 +0200 Subject: [PATCH 1/2] fix(webapp): branch and warehouse select not showing saved values in edit mode Fixed an issue where branch and warehouse select fields were not displaying saved values when editing existing transactions. The useSetPrimaryBranchToForm and useSetPrimaryWarehouseToForm hooks were overwriting saved values with primary defaults on every form load. Changes: - Added isNewMode check to useSetPrimaryBranchToForm hook - Added isNewMode check to useSetPrimaryWarehouseToForm hook - Updated InvoiceFormProvider to expose isNewMode in context Affected forms: - Sales: Invoice, Estimate, Receipt, CreditNote, PaymentReceived - Purchases: Bill, VendorCredit, PaymentMade - Expense - MakeJournal (Manual Journal) Co-Authored-By: Claude Sonnet 4.6 --- .../src/containers/Accounting/MakeJournal/utils.tsx | 6 +++--- .../src/containers/Expenses/ExpenseForm/utils.tsx | 6 +++--- .../containers/Purchases/Bills/BillForm/utils.tsx | 12 ++++++------ .../Purchases/CreditNotes/CreditNoteForm/utils.tsx | 12 ++++++------ .../Purchases/PaymentsMade/PaymentForm/utils.tsx | 6 +++--- .../Sales/CreditNotes/CreditNoteForm/utils.tsx | 12 ++++++------ .../Sales/Estimates/EstimateForm/utils.tsx | 12 ++++++------ .../Invoices/InvoiceForm/InvoiceFormProvider.tsx | 1 + .../containers/Sales/Invoices/InvoiceForm/utils.tsx | 12 ++++++------ .../PaymentsReceived/PaymentReceiveForm/utils.tsx | 6 +++--- .../containers/Sales/Receipts/ReceiptForm/utils.tsx | 12 ++++++------ 11 files changed, 49 insertions(+), 48 deletions(-) diff --git a/packages/webapp/src/containers/Accounting/MakeJournal/utils.tsx b/packages/webapp/src/containers/Accounting/MakeJournal/utils.tsx index bd17c58af..4188fd15c 100644 --- a/packages/webapp/src/containers/Accounting/MakeJournal/utils.tsx +++ b/packages/webapp/src/containers/Accounting/MakeJournal/utils.tsx @@ -213,17 +213,17 @@ export const currenciesFieldShouldUpdate = (newProps, oldProps) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useMakeJournalFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useMakeJournalFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; export const useManualJournalCreditTotal = () => { diff --git a/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx b/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx index 19cb5ab0a..2e5ac09cf 100644 --- a/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx +++ b/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx @@ -152,17 +152,17 @@ export const transformFormValuesToRequest = (values) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useExpenseFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useExpenseFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx index b570b132c..2641172f6 100644 --- a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx +++ b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx @@ -231,25 +231,25 @@ export const handleErrors = (errors, { setErrors }) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useBillFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useBillFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; export const useSetPrimaryWarehouseToForm = () => { const { setFieldValue } = useFormikContext(); - const { warehouses, isWarehousesSuccess } = useBillFormContext(); + const { warehouses, isWarehousesSuccess, isNewMode } = useBillFormContext(); React.useEffect(() => { - if (isWarehousesSuccess) { + if (isWarehousesSuccess && isNewMode) { const primaryWarehouse = warehouses.find((b) => b.primary) || first(warehouses); @@ -257,7 +257,7 @@ export const useSetPrimaryWarehouseToForm = () => { setFieldValue('warehouse_id', primaryWarehouse.id); } } - }, [isWarehousesSuccess, setFieldValue, warehouses]); + }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx index 7724629be..720fd5f36 100644 --- a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx +++ b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx @@ -156,25 +156,25 @@ export const useObserveVendorCreditNoSettings = (prefix, nextNumber) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useVendorCreditNoteFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useVendorCreditNoteFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; export const useSetPrimaryWarehouseToForm = () => { const { setFieldValue } = useFormikContext(); - const { warehouses, isWarehousesSuccess } = useVendorCreditNoteFormContext(); + const { warehouses, isWarehousesSuccess, isNewMode } = useVendorCreditNoteFormContext(); React.useEffect(() => { - if (isWarehousesSuccess) { + if (isWarehousesSuccess && isNewMode) { const primaryWarehouse = warehouses.find((b) => b.primary) || first(warehouses); @@ -182,7 +182,7 @@ export const useSetPrimaryWarehouseToForm = () => { setFieldValue('warehouse_id', primaryWarehouse.id); } } - }, [isWarehousesSuccess, setFieldValue, warehouses]); + }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx b/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx index 1bd2f3c01..6bdf0c609 100644 --- a/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx +++ b/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx @@ -115,17 +115,17 @@ export const transformFormToRequest = (form) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = usePaymentMadeFormContext(); + const { branches, isBranchesSuccess, isNewMode } = usePaymentMadeFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx index 470cc3f5c..b02903d4f 100644 --- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx @@ -148,25 +148,25 @@ export const entriesFieldShouldUpdate = (newProps, oldProps) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useCreditNoteFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useCreditNoteFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; export const useSetPrimaryWarehouseToForm = () => { const { setFieldValue } = useFormikContext(); - const { warehouses, isWarehousesSuccess } = useCreditNoteFormContext(); + const { warehouses, isWarehousesSuccess, isNewMode } = useCreditNoteFormContext(); React.useEffect(() => { - if (isWarehousesSuccess) { + if (isWarehousesSuccess && isNewMode) { const primaryWarehouse = warehouses.find((b) => b.primary) || first(warehouses); @@ -174,7 +174,7 @@ export const useSetPrimaryWarehouseToForm = () => { setFieldValue('warehouse_id', primaryWarehouse.id); } } - }, [isWarehousesSuccess, setFieldValue, warehouses]); + }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx index 1bca08342..49b268747 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx @@ -182,10 +182,10 @@ export const transfromsFormValuesToRequest = (values) => { export const useSetPrimaryWarehouseToForm = () => { const { setFieldValue } = useFormikContext(); - const { warehouses, isWarehousesSuccess } = useEstimateFormContext(); + const { warehouses, isWarehousesSuccess, isNewMode } = useEstimateFormContext(); React.useEffect(() => { - if (isWarehousesSuccess) { + if (isWarehousesSuccess && isNewMode) { const primaryWarehouse = warehouses.find((b) => b.primary) || first(warehouses); @@ -193,22 +193,22 @@ export const useSetPrimaryWarehouseToForm = () => { setFieldValue('warehouse_id', primaryWarehouse.id); } } - }, [isWarehousesSuccess, setFieldValue, warehouses]); + }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]); }; export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useEstimateFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useEstimateFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx index 6dc297efd..cc0d16446 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx @@ -180,6 +180,7 @@ function InvoiceFormProvider({ invoiceId, baseCurrency, ...props }) { isInvoiceStateLoading, isBootLoading, + isNewMode, }; return ; diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx index 1e9fb0537..59e776d8c 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx @@ -264,10 +264,10 @@ const transformPaymentMethodsToForm = ( export const useSetPrimaryWarehouseToForm = () => { const { setFieldValue } = useFormikContext(); - const { warehouses, isWarehousesSuccess } = useInvoiceFormContext(); + const { warehouses, isWarehousesSuccess, isNewMode } = useInvoiceFormContext(); React.useEffect(() => { - if (isWarehousesSuccess) { + if (isWarehousesSuccess && isNewMode) { const primaryWarehouse = warehouses.find((b) => b.primary) || first(warehouses); @@ -275,22 +275,22 @@ export const useSetPrimaryWarehouseToForm = () => { setFieldValue('warehouse_id', primaryWarehouse.id); } } - }, [isWarehousesSuccess, setFieldValue, warehouses]); + }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]); }; export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useInvoiceFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useInvoiceFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx index 4464b8ea9..f398ece32 100644 --- a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx @@ -177,17 +177,17 @@ export const transformFormToRequest = (form) => { export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = usePaymentReceiveFormContext(); + const { branches, isBranchesSuccess, isNewMode } = usePaymentReceiveFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; /** diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx index bca99c9f6..0eca60ca3 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx @@ -173,10 +173,10 @@ export const transformFormValuesToRequest = (values) => { export const useSetPrimaryWarehouseToForm = () => { const { setFieldValue } = useFormikContext(); - const { warehouses, isWarehousesSuccess } = useReceiptFormContext(); + const { warehouses, isWarehousesSuccess, isNewMode } = useReceiptFormContext(); React.useEffect(() => { - if (isWarehousesSuccess) { + if (isWarehousesSuccess && isNewMode) { const primaryWarehouse = warehouses.find((b) => b.primary) || first(warehouses); @@ -184,22 +184,22 @@ export const useSetPrimaryWarehouseToForm = () => { setFieldValue('warehouse_id', primaryWarehouse.id); } } - }, [isWarehousesSuccess, setFieldValue, warehouses]); + }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]); }; export const useSetPrimaryBranchToForm = () => { const { setFieldValue } = useFormikContext(); - const { branches, isBranchesSuccess } = useReceiptFormContext(); + const { branches, isBranchesSuccess, isNewMode } = useReceiptFormContext(); React.useEffect(() => { - if (isBranchesSuccess) { + if (isBranchesSuccess && isNewMode) { const primaryBranch = branches.find((b) => b.primary) || first(branches); if (primaryBranch) { setFieldValue('branch_id', primaryBranch.id); } } - }, [isBranchesSuccess, setFieldValue, branches]); + }, [isBranchesSuccess, setFieldValue, branches, isNewMode]); }; /** From 2065afe108adbe237697274ef91cbcb2627793bd Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Fri, 27 Feb 2026 04:46:59 +0200 Subject: [PATCH 2/2] fix(webapp): remove duplicated isNewMode from context --- .../Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx index cc0d16446..6dc297efd 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormProvider.tsx @@ -180,7 +180,6 @@ function InvoiceFormProvider({ invoiceId, baseCurrency, ...props }) { isInvoiceStateLoading, isBootLoading, - isNewMode, }; return ;