From 6ee5bc3f1b27af872b72ce494dab1585eaa78e64 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Mon, 8 Dec 2025 23:37:20 +0700 Subject: [PATCH] refactor(FE-318,319): Remove egg grading schema and UI logic --- .../recording/form/RecordingForm.schema.ts | 53 ---- .../recording/form/RecordingForm.tsx | 226 +++--------------- 2 files changed, 38 insertions(+), 241 deletions(-) diff --git a/src/components/pages/production/recording/form/RecordingForm.schema.ts b/src/components/pages/production/recording/form/RecordingForm.schema.ts index 99496843..30013001 100644 --- a/src/components/pages/production/recording/form/RecordingForm.schema.ts +++ b/src/components/pages/production/recording/form/RecordingForm.schema.ts @@ -4,7 +4,6 @@ import { CreateGrowingRecordingPayload, CreateLayingRecordingPayload, CreateEggPayload, - CreateGradingPayload, } from '@/types/api/production/recording'; type RecordingGrowingFormSchemaType = { @@ -36,14 +35,6 @@ type RecordingLayingFormSchemaType = RecordingGrowingFormSchemaType & { }[]; }; -type RecordingGradingFormSchemaType = { - eggs_grading: { - recording_egg_id: number; - grade: string; - qty: number | string; - }[]; -}; - export type BodyWeightSchema = { weight: number | string; avg_weight: number | string; @@ -196,30 +187,6 @@ export const UpdateRecordingLayingFormSchema = RecordingLayingFormSchema.shape({ .required('Project Flock Kandang wajib diisi!'), }); -export const RecordingGradingFormSchema: Yup.ObjectSchema = - Yup.object({ - eggs_grading: Yup.array() - .of( - Yup.object({ - recording_egg_id: Yup.number() - .required('Recording Egg ID wajib diisi!') - .min(1, 'Recording Egg ID minimal 1!') - .typeError('Recording Egg ID harus berupa angka!'), - grade: Yup.string() - .required('Grade telur wajib diisi!') - .typeError('Grade telur harus berupa string!'), - qty: Yup.number() - .required('Jumlah telur wajib diisi!') - .min(1, 'Jumlah telur minimal 1!') - .typeError('Jumlah telur harus berupa angka!'), - }) - ) - .min(1, 'Minimal harus ada 1 data grading telur!') - .required('Data grading telur wajib diisi!'), - }); - -export const UpdateRecordingGradingFormSchema = RecordingGradingFormSchema; - export type RecordingGrowingFormValues = Yup.InferType< typeof RecordingGrowingFormSchema >; @@ -228,10 +195,6 @@ export type RecordingLayingFormValues = Yup.InferType< typeof RecordingLayingFormSchema >; -export type RecordingGradingFormValues = Yup.InferType< - typeof RecordingGradingFormSchema ->; - type RecordingFormData = Partial & { body_weights?: CreateGrowingRecordingPayload['body_weights']; stocks?: CreateGrowingRecordingPayload['stocks'] | Recording['stocks']; @@ -310,19 +273,3 @@ export const getRecordingLayingFormInitialValues = ( }, ], }); - -export const getRecordingGradingFormInitialValues = ( - initialValues?: Partial & { recording_egg_id?: number } -): RecordingGradingFormValues => ({ - eggs_grading: initialValues?.eggs_grading?.map((grading) => ({ - recording_egg_id: grading.recording_egg_id, - grade: grading.grade, - qty: grading.qty, - })) ?? [ - { - recording_egg_id: initialValues?.recording_egg_id ?? 0, - grade: '', - qty: '', - }, - ], -}); diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index f6058d70..ca2ae8ba 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -16,7 +16,6 @@ import CheckboxInput from '@/components/input/CheckboxInput'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; import ConfirmationModalWithNotes from '@/components/modal/ConfirmationModalWithNotes'; import { useModal } from '@/components/Modal'; -import Tooltip from '@/components/Tooltip'; import { ProjectFlockKandangApi, @@ -98,9 +97,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const [recordingFormErrorMessage, setRecordingFormErrorMessage] = useState(''); const [isDeleteLoading, setIsDeleteLoading] = useState(false); - const [newRecordingData, setNewRecordingData] = useState( - null - ); + const [, setNewRecordingData] = useState(null); const [nextDayRecording, setNextDayRecording] = useState(null); @@ -111,18 +108,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const isRecordingApproved = useCallback((recording?: Recording) => { return ( recording?.approval?.action === 'APPROVED' && - recording?.approval?.step_name === 'Disetujui' && - recording?.approval?.step_number === 2 - ); - }, []); - - const hasGradingData = useCallback((recording?: Recording) => { - if (!recording || !recording.eggs) return false; - return recording.eggs.some( - (egg) => - egg.gradings && - egg.gradings.length > 0 && - egg.gradings.some((grading) => grading.qty > 0) + recording?.approval?.step_name === 'Disetujui' ); }, []); @@ -207,35 +193,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { [router] ); - const createRecordingHandlerWithRedirect = useCallback( - async ( - payload: CreateGrowingRecordingPayload | CreateLayingRecordingPayload, - redirectToGrading: boolean = false - ) => { - const res = await RecordingApi.create(payload); - if (isResponseError(res)) { - setRecordingFormErrorMessage(res.message); - return null; - } - - toast.success(res?.message as string); - - if (res?.status === 'success' && res.data) { - setNewRecordingData(res.data); - return res.data; - } - - if (redirectToGrading) { - toast.error( - 'Gagal mendapatkan ID recording. Silakan coba dari halaman list.' - ); - router.push('/production/recording'); - } - return null; - }, - [router] - ); - const updateRecordingHandler = useCallback( async ( recordingId: number, @@ -654,7 +611,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const hasPakanFlag = product.product.flags?.includes('PAKAN'); const hasOvkFlag = product.product.flags?.includes('OVK'); - // Only include products that are in the same location as the selected kandang if (hasPakanFlag || hasOvkFlag) { options.push({ value: product.id, @@ -694,7 +650,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { depletionProductsData.data.forEach((product) => { const productName = product.product.name; - // Filter for depletion-related products (culling, mati, afkir) if ( productName.toLowerCase().includes('culling') || productName.toLowerCase().includes('mati') || @@ -736,7 +691,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { eggProductsData.data.forEach((product) => { const productName = product.product.name; - // Filter for egg-related products if ( productName.toLowerCase().includes('telur') || productName.toLowerCase().includes('egg') || @@ -1023,54 +977,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { ); }, [formik.values.stocks, getStockUsageError, type]); - const hasConsumableEggs = useMemo(() => { - if (!isLayingCategory) return false; - const layingValues = formik.values as RecordingLayingFormValues; - if (!layingValues.eggs || layingValues.eggs.length === 0) return false; - - return layingValues.eggs.some((egg) => { - if (!egg.product_warehouse_id || Number(egg.qty) <= 0) return false; - - const product = eggProducts.find( - (opt) => opt.value === egg.product_warehouse_id - ); - - if (!product) return false; - - const productName = product.label.toLowerCase(); - return ( - productName.includes('konsumsi') && - productName.includes('baik') && - Number(egg.qty) > 0 - ); - }); - }, [isLayingCategory, formik.values, eggProducts]); - - const hasConsumableEggsInRecording = useCallback((recording?: Recording) => { - if (!recording || !recording.eggs || recording.eggs.length === 0) - return false; - - return recording.eggs.some((egg) => { - if (!egg.product_warehouse || !egg.product_warehouse.product) - return false; - if (Number(egg.qty) <= 0) return false; - - const productName = egg.product_warehouse.product.name.toLowerCase(); - return ( - productName.includes('konsumsi') && - productName.includes('baik') && - Number(egg.qty) > 0 - ); - }); - }, []); - - const hasConsumableEggsInCurrentRecording = useMemo(() => { - return ( - hasConsumableEggsInRecording(initialValues) || - hasConsumableEggsInRecording(newRecordingData || undefined) - ); - }, [initialValues, newRecordingData, hasConsumableEggsInRecording]); - const isRepeaterInputError = ( arrayName: 'body_weights' | 'stocks' | 'depletions' | 'eggs', column: string, @@ -1282,7 +1188,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { setIsRejectLoading(false); }; - // Body Weights Handlers const addBodyWeight = () => { const newBodyWeights = [ ...(formik.values.body_weights || []), @@ -1401,7 +1306,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { setSelectedBodyWeights([]); }; - // Stocks Handlers const addStock = () => { const newStocks = [ ...(formik.values.stocks || []), @@ -1434,7 +1338,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { setSelectedStocks([]); }; - // Depletions Handlers const addDepletion = () => { const newDepletions = [ ...(formik.values.depletions || []), @@ -1469,7 +1372,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { setSelectedDepletions([]); }; - // Eggs Handlers const addEgg = () => { const newEggs = [ ...((formik.values as RecordingLayingFormValues).eggs || []), @@ -1581,47 +1483,37 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { Kembali - {type === 'detail' && - !isRecordingApproved(initialValues) && - (!isLayingCategory || hasGradingData(initialValues)) && ( -
- + {type === 'detail' && !isRecordingApproved(initialValues) && ( +
+ - -
- )} + +
+ )}

@@ -1928,7 +1820,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { {formik.values.body_weights?.map((bw, idx) => ( {(type as 'add' | 'edit' | 'detail') !== 'detail' && ( - + { {formik.values.stocks?.map((stock, idx) => ( {(type as 'add' | 'edit' | 'detail') !== 'detail' && ( - + { {formik.values.depletions?.map((depletion, idx) => ( {(type as 'add' | 'edit' | 'detail') !== 'detail' && ( - + { (egg, idx) => ( {(type as 'add' | 'edit' | 'detail') !== 'detail' && ( - + { {/* Right side actions */}
- {type === 'detail' && isLayingCategory && ( - - - - )} - {type === 'edit' && (