From 1d29f62bf2129cad4e23ccdb76fc4ae8063ec366 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Fri, 23 Jan 2026 13:10:54 +0700 Subject: [PATCH] refactor(FE): Fix delivery dependency tracking and init --- .../inventory/movement/form/MovementForm.tsx | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index eda03419..4d42efec 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -56,6 +56,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { const [formErrorList, setFormErrorList] = useState([]); const [productQtyErrorShown, setProductQtyErrorShown] = useState(false); const [deliveryQtyErrorShown, setDeliveryQtyErrorShown] = useState(false); + const [isInitialized, setIsInitialized] = useState(false); // ===== FORM HANDLERS ===== const createMovementHandler = useCallback( @@ -557,7 +558,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { ], }, ]); - }, []); + }, [formik.values.deliveries]); const removeDelivery = useCallback( (i: number) => { @@ -1004,20 +1005,29 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { }); }, [ formik.values.deliveries - ?.map((d) => - d.products.reduce( + ?.map((d, idx) => ({ + idx, + productQty: d.products.reduce( (sum, p) => sum + (parseInt(p.product_qty.toString()) || 0), 0 - ) + ), + deliveryCost: parseInt((d.delivery_cost || '').toString()) || 0, + deliveryCostPerItem: + parseInt((d.delivery_cost_per_item || '').toString()) || 0, + })) + .map( + (item) => + `${item.idx}:${item.productQty}:${item.deliveryCost}:${item.deliveryCostPerItem}` ) - .join(','), + .join('|'), ]); useEffect(() => { if ( formik.values.source_warehouse_id && type !== 'edit' && - type !== 'detail' + type !== 'detail' && + !isInitialized ) { if (formik.values.products.length === 0) { formik.setFieldValue('products', [ @@ -1049,8 +1059,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { }, ]); } + setIsInitialized(true); } - }, [formik.values.source_warehouse_id]); + }, [formik.values.source_warehouse_id, isInitialized, type]); useEffect(() => { if (