From 24ff7a080f1d6aeb40a182c2585f84a2a47d6607 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Mon, 19 Jan 2026 13:03:07 +0700 Subject: [PATCH] refactor(FE): Reset products when source warehouse changes --- .../inventory/movement/form/MovementForm.tsx | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index e57ead1e..d36fb067 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useFormik } from 'formik'; import useSWR from 'swr'; @@ -263,6 +263,47 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { }, }); + const prevSourceWarehouseIdRef = useRef( + formik.values.source_warehouse_id + ); + + // ===== RESET PRODUCTS WHEN SOURCE WAREHOUSE CHANGES ===== + useEffect(() => { + const prevSourceWarehouseId = prevSourceWarehouseIdRef.current; + const currentSourceWarehouseId = formik.values.source_warehouse_id; + + if ( + prevSourceWarehouseId !== currentSourceWarehouseId && + prevSourceWarehouseId !== null + ) { + formik.setFieldValue('products', [ + { + product: null, + product_id: 0, + product_qty: '', + }, + ]); + formik.setFieldTouched('products', false); + + const updatedDeliveries = formik.values.deliveries.map( + (delivery: DeliverySchema) => ({ + ...delivery, + products: [ + { + product: null, + product_id: 0, + product_qty: '', + }, + ], + }) + ); + formik.setFieldValue('deliveries', updatedDeliveries); + formik.setFieldTouched('deliveries', false); + } + + prevSourceWarehouseIdRef.current = currentSourceWarehouseId; + }, [formik.values.source_warehouse_id, formik.values.deliveries]); + // ===== PRODUCT WAREHOUSE FETCHING (after form initialization) ===== const { setInputValue: setProductWarehouseSelectInputValue,