From 4f168b51c756006c0f8a9a52a647396c728d2ec8 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Mon, 29 Dec 2025 14:32:17 +0700 Subject: [PATCH] refactor(FE-316): Centralize uniformity types and add typings --- .../detail/UniformityDetailsPreview.tsx | 14 +++++----- .../uniformity/form/UniformityForm.schema.ts | 8 ++++++ .../uniformity/form/UniformityPreviewForm.tsx | 17 +++++++----- .../uniformity/form/UniformityResultForm.tsx | 19 ++++++++----- .../uniformity/slices/uniformity.slice.ts | 27 +------------------ src/stores/uniformity/uniformity.store.ts | 6 ++--- src/types/stores.d.ts | 17 ++++-------- 7 files changed, 47 insertions(+), 61 deletions(-) diff --git a/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx b/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx index 51f0e3aa..35dd88ff 100644 --- a/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx +++ b/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx @@ -125,12 +125,14 @@ const UniformityDetailsPreview = ({ const tableData = useMemo(() => { if (!uniformity_details) return []; - return uniformity_details.map((detail, index) => ({ - id: `body-weight-${index + 1}`, - number: index + 1, - weight: detail.weight, - status: detail.range.toLowerCase() as 'ideal' | 'outside', - })); + return uniformity_details.map( + (detail: UniformityDetailItem, index: number) => ({ + id: `body-weight-${index + 1}`, + number: index + 1, + weight: detail.weight, + status: detail.range.toLowerCase() as 'ideal' | 'outside', + }) + ); }, [uniformity_details]); const columnsUniformity: ColumnDef[] = useMemo( diff --git a/src/components/pages/uniformity/form/UniformityForm.schema.ts b/src/components/pages/uniformity/form/UniformityForm.schema.ts index cb891965..6bcc3d95 100644 --- a/src/components/pages/uniformity/form/UniformityForm.schema.ts +++ b/src/components/pages/uniformity/form/UniformityForm.schema.ts @@ -79,6 +79,14 @@ export const UniformityFormSchema: Yup.ObjectSchema = export type UniformityFormValues = Yup.InferType; +export type UniformityFormData = { + date: string; + week: number; + project_flock_kandang_id: number; + file: File | null; + fileName: string; +}; + export const getUniformityFormInitialValues = ( initialValues?: Uniformity ): UniformityFormValues => { diff --git a/src/components/pages/uniformity/form/UniformityPreviewForm.tsx b/src/components/pages/uniformity/form/UniformityPreviewForm.tsx index 4520464f..5ee5f5f6 100644 --- a/src/components/pages/uniformity/form/UniformityPreviewForm.tsx +++ b/src/components/pages/uniformity/form/UniformityPreviewForm.tsx @@ -10,7 +10,10 @@ import { useUiStore } from '@/stores/ui/ui.store'; import { useUniformityStore } from '@/stores/uniformity/uniformity.store'; import RequirePermission from '@/components/helper/RequirePermission'; import Table from '@/components/Table'; -import { BodyWeightData } from '@/types/api/uniformity/uniformity'; +import { + BodyWeightData, + UniformityDetailItem, +} from '@/types/api/uniformity/uniformity'; const UniformityPreviewForm = () => { const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen); @@ -34,11 +37,13 @@ const UniformityPreviewForm = () => { const tableData = useMemo(() => { if (!verifyUniformityResult) return []; - return verifyUniformityResult.uniformity_details.map((detail, index) => ({ - id: `weight-${index}`, - number: index + 1, - weight: detail.weight, - })); + return verifyUniformityResult.uniformity_details.map( + (detail: UniformityDetailItem, index: number) => ({ + id: `weight-${index}`, + number: index + 1, + weight: detail.weight, + }) + ); }, [verifyUniformityResult]); const columns: ColumnDef[] = useMemo( diff --git a/src/components/pages/uniformity/form/UniformityResultForm.tsx b/src/components/pages/uniformity/form/UniformityResultForm.tsx index 6b3a520f..8c38f6be 100644 --- a/src/components/pages/uniformity/form/UniformityResultForm.tsx +++ b/src/components/pages/uniformity/form/UniformityResultForm.tsx @@ -22,7 +22,10 @@ import { getWeightStatusText, } from '@/components/pages/uniformity/uniformity-utils'; import { DetailOptionType } from '@/types/api/uniformity/uniformity'; -import { BodyWeightData } from '@/types/api/uniformity/uniformity'; +import { + BodyWeightData, + UniformityDetailItem, +} from '@/types/api/uniformity/uniformity'; const UniformityResultForm = () => { const router = useRouter(); @@ -169,12 +172,14 @@ const UniformityResultForm = () => { const tableData = useMemo(() => { if (!verifyUniformityResult) return []; - return verifyUniformityResult.uniformity_details.map((detail, index) => ({ - id: `body-weight-${index + 1}`, - number: index + 1, - weight: detail.weight, - status: detail.range.toLowerCase() as 'ideal' | 'outside', - })); + return verifyUniformityResult.uniformity_details.map( + (detail: UniformityDetailItem, index: number) => ({ + id: `body-weight-${index + 1}`, + number: index + 1, + weight: detail.weight, + status: detail.range.toLowerCase() as 'ideal' | 'outside', + }) + ); }, [verifyUniformityResult]); const columnsUniformity: ColumnDef[] = useMemo( diff --git a/src/stores/uniformity/slices/uniformity.slice.ts b/src/stores/uniformity/slices/uniformity.slice.ts index c3b0fbb6..244ca94e 100644 --- a/src/stores/uniformity/slices/uniformity.slice.ts +++ b/src/stores/uniformity/slices/uniformity.slice.ts @@ -1,30 +1,5 @@ +import { UniformitySlice } from '@/types/stores'; import { StateCreator } from 'zustand'; -import { VerifyUniformityResponse } from '@/types/api/uniformity/uniformity'; - -export type UniformityStep = 'preview' | 'result'; - -export type UniformityFormData = { - date: string; - week: number; - project_flock_kandang_id: number; - file: File | null; - fileName: string; -}; - -export type UniformitySlice = { - // State - uniformityStep: UniformityStep; - verifyUniformityResult: VerifyUniformityResponse | null; - uniformityFormData: UniformityFormData | null; - isSuccess: boolean; - - // Actions - setUniformityStep: (step: UniformityStep) => void; - setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void; - setUniformityFormData: (data: UniformityFormData | null) => void; - setIsSuccess: (success: boolean) => void; - resetUniformity: () => void; -}; export const createUniformitySlice: StateCreator< UniformitySlice, diff --git a/src/stores/uniformity/uniformity.store.ts b/src/stores/uniformity/uniformity.store.ts index da8dc4e3..c8d759d6 100644 --- a/src/stores/uniformity/uniformity.store.ts +++ b/src/stores/uniformity/uniformity.store.ts @@ -2,10 +2,8 @@ import { create } from 'zustand'; import { devtools } from 'zustand/middleware'; -import { - createUniformitySlice, - UniformitySlice, -} from '@/stores/uniformity/slices/uniformity.slice'; +import { createUniformitySlice } from '@/stores/uniformity/slices/uniformity.slice'; +import { UniformitySlice } from '@/types/stores'; export type UniformityStore = UniformitySlice; diff --git a/src/types/stores.d.ts b/src/types/stores.d.ts index c1281437..062045b9 100644 --- a/src/types/stores.d.ts +++ b/src/types/stores.d.ts @@ -47,26 +47,19 @@ type ProductionStandardFormSlice = { export type FormStore = ProductionStandardFormSlice; -type UniformityStep = 'preview' | 'result'; +export type UniformityStep = 'preview' | 'result'; -type UniformityFormData = { - date: string; - week: number; - project_flock_kandang_id: number; - file: File | null; - fileName: string; -}; - -type UniformitySlice = { +export type UniformitySlice = { + // State uniformityStep: UniformityStep; verifyUniformityResult: VerifyUniformityResponse | null; uniformityFormData: UniformityFormData | null; isSuccess: boolean; + + // Actions setUniformityStep: (step: UniformityStep) => void; setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void; setUniformityFormData: (data: UniformityFormData | null) => void; setIsSuccess: (success: boolean) => void; resetUniformity: () => void; }; - -export type UniformityStore = UniformitySlice;