From 1acbc91cfe880270af2697fea54c9dff14d4c10e Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 5 Mar 2026 10:19:30 +0700 Subject: [PATCH] refactor(FE): Reset dependent fields when location or project flock changes --- .../uniformity/form/UniformityForm.tsx | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/components/pages/production/uniformity/form/UniformityForm.tsx b/src/components/pages/production/uniformity/form/UniformityForm.tsx index 811764d8..feb7ca08 100644 --- a/src/components/pages/production/uniformity/form/UniformityForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityForm.tsx @@ -393,6 +393,77 @@ const UniformityForm = ({ } }, [setFieldValue]); + // ===== RESET PROJECT FLOCK & KANDANG WHEN LOCATION CHANGES ===== + const prevLocationIdRef = useRef(''); + + useEffect(() => { + const currentLocationId = formik.values.location_id || ''; + + if (currentLocationId === prevLocationIdRef.current) { + return; + } + + prevLocationIdRef.current = currentLocationId; + + if (formik.values.project_flock !== null) { + setFieldTouched('project_flock', false); + setFieldValue('project_flock', null); + } + if (formik.values.project_flock_id !== 0) { + setFieldTouched('project_flock_id', false); + setFieldValue('project_flock_id', 0); + } + + if (formik.values.kandang !== null) { + setFieldTouched('kandang', false); + setFieldValue('kandang', null); + } + if (formik.values.kandang_id !== 0) { + setFieldTouched('kandang_id', false); + setFieldValue('kandang_id', 0); + } + + setSelectedProjectFlock(null); + setSelectedKandang(null); + }, [ + formik.values.location_id, + formik.values.project_flock, + formik.values.project_flock_id, + formik.values.kandang, + formik.values.kandang_id, + setFieldTouched, + setFieldValue, + ]); + + const prevProjectFlockIdRef = useRef(''); + + useEffect(() => { + const currentProjectFlockId = formik.values.project_flock_id || ''; + + if (currentProjectFlockId === prevProjectFlockIdRef.current) { + return; + } + + prevProjectFlockIdRef.current = currentProjectFlockId; + + if (formik.values.kandang !== null) { + setFieldTouched('kandang', false); + setFieldValue('kandang', null); + } + if (formik.values.kandang_id !== 0) { + setFieldTouched('kandang_id', false); + setFieldValue('kandang_id', 0); + } + + setSelectedKandang(null); + }, [ + formik.values.project_flock_id, + formik.values.kandang, + formik.values.kandang_id, + setFieldTouched, + setFieldValue, + ]); + const handleDownloadTemplate = useCallback(() => { const population = projectFlockKandangLookup?.population;