From 074e6fad050097103d2a90f9a99fb7fc35703120 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 20 Nov 2025 15:33:43 +0700 Subject: [PATCH] refactor(FE-208,212): improve credit term handling and validation in PurchaseRequestForm --- .../form/request/PurchaseRequestForm.tsx | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/components/pages/purchase/form/request/PurchaseRequestForm.tsx b/src/components/pages/purchase/form/request/PurchaseRequestForm.tsx index 698fdcfe..00b504b3 100644 --- a/src/components/pages/purchase/form/request/PurchaseRequestForm.tsx +++ b/src/components/pages/purchase/form/request/PurchaseRequestForm.tsx @@ -338,7 +338,7 @@ const PurchaseRequestForm = ({ (s: Supplier) => s.id === supplierId ); if (supplierData?.due_date) { - formik.setFieldTouched('credit_term', true); + formik.setFieldTouched('credit_term', false); formik.setFieldValue('credit_term', supplierData.due_date.toString()); } else { formik.setFieldTouched('credit_term', false); @@ -364,9 +364,13 @@ const PurchaseRequestForm = ({ // ===== SIDE EFFECTS ===== useEffect(() => { - if (formik.values.supplier_id) { + if (formik.values.supplier_id && Number(formik.values.supplier_id) > 0) { updateCreditTermBasedOnSupplier(Number(formik.values.supplier_id)); resetPurchaseItems(); + } else { + formik.setFieldTouched('credit_term', false); + formik.setFieldValue('credit_term', ''); + resetPurchaseItems(); } }, [formik.values.supplier_id]); @@ -384,6 +388,23 @@ const PurchaseRequestForm = ({ [] ); + const handleCreditTermChange = useCallback( + (e: React.ChangeEvent) => { + const value = e.target.value; + + formik.setFieldTouched('credit_term', true); + formik.setFieldValue('credit_term', value); + }, + [] + ); + + const handleCreditTermBlur = useCallback( + (e: React.FocusEvent) => { + formik.handleBlur(e); + }, + [formik] + ); + const handleAreaChange = useCallback( (val: OptionType | OptionType[] | null) => { const area = val as OptionType | null; @@ -488,8 +509,8 @@ const PurchaseRequestForm = ({ label='Jatuh tempo (hari)' name='credit_term' value={formik.values.credit_term || ''} - onChange={formik.handleChange} - onBlur={formik.handleBlur} + onChange={handleCreditTermChange} + onBlur={handleCreditTermBlur} isError={ formik.touched.credit_term && Boolean(formik.errors.credit_term)