diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index 657ca12b..e57ead1e 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -263,25 +263,6 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { }, }); - // ===== WAREHOUSE VALIDATION TOAST ===== - useEffect(() => { - const destinationWarehouseError = formik.errors - .destination_warehouse_id as string; - - if ( - destinationWarehouseError === - 'Gudang tujuan tidak boleh sama dengan gudang asal!' - ) { - const sourceWarehouseName = - (formik.values.source_warehouse as WarehouseOptionType)?.label || - 'gudang asal'; - - toast.error( - `Tidak bisa memilih gudang yang sama. Gudang tujuan tidak boleh sama dengan ${sourceWarehouseName}.` - ); - } - }, [formik.errors.destination_warehouse_id, formik.values.source_warehouse]); - // ===== PRODUCT WAREHOUSE FETCHING (after form initialization) ===== const { setInputValue: setProductWarehouseSelectInputValue, @@ -380,18 +361,47 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { (val: OptionType | OptionType[] | null) => { const newSourceWarehouseId = (val as WarehouseOptionType)?.value; + if ( + newSourceWarehouseId && + newSourceWarehouseId === formik.values.destination_warehouse_id + ) { + const destinationWarehouseName = + (formik.values.destination_warehouse as WarehouseOptionType)?.label || + 'gudang tujuan'; + toast.error( + `Tidak bisa memilih gudang yang sama. Gudang asal tidak boleh sama dengan ${destinationWarehouseName}.` + ); + return; + } + formik.setFieldTouched('source_warehouse', true); formik.setFieldValue('source_warehouse', val); formik.setFieldTouched('source_warehouse_id', true); formik.setFieldValue('source_warehouse_id', newSourceWarehouseId); }, - [] + [ + formik.values.destination_warehouse_id, + formik.values.destination_warehouse, + ] ); const handleDestinationWarehouseChange = useCallback( (val: OptionType | OptionType[] | null) => { const newDestinationWarehouseId = (val as WarehouseOptionType)?.value; + if ( + newDestinationWarehouseId && + newDestinationWarehouseId === formik.values.source_warehouse_id + ) { + const sourceWarehouseName = + (formik.values.source_warehouse as WarehouseOptionType)?.label || + 'gudang asal'; + toast.error( + `Tidak bisa memilih gudang yang sama. Gudang tujuan tidak boleh sama dengan ${sourceWarehouseName}.` + ); + return; + } + formik.setFieldTouched('destination_warehouse', true); formik.setFieldValue('destination_warehouse', val); formik.setFieldTouched('destination_warehouse_id', true); @@ -400,7 +410,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { newDestinationWarehouseId ); }, - [] + [formik.values.source_warehouse_id, formik.values.source_warehouse] ); const addProduct = useCallback(() => {