refactor(FE-316): Centralize uniformity types and add typings

This commit is contained in:
rstubryan
2025-12-29 14:32:17 +07:00
parent ded1cc1f62
commit 4f168b51c7
7 changed files with 47 additions and 61 deletions
@@ -125,12 +125,14 @@ const UniformityDetailsPreview = ({
const tableData = useMemo(() => { const tableData = useMemo(() => {
if (!uniformity_details) return []; if (!uniformity_details) return [];
return uniformity_details.map((detail, index) => ({ return uniformity_details.map(
(detail: UniformityDetailItem, index: number) => ({
id: `body-weight-${index + 1}`, id: `body-weight-${index + 1}`,
number: index + 1, number: index + 1,
weight: detail.weight, weight: detail.weight,
status: detail.range.toLowerCase() as 'ideal' | 'outside', status: detail.range.toLowerCase() as 'ideal' | 'outside',
})); })
);
}, [uniformity_details]); }, [uniformity_details]);
const columnsUniformity: ColumnDef<BodyWeightData>[] = useMemo( const columnsUniformity: ColumnDef<BodyWeightData>[] = useMemo(
@@ -79,6 +79,14 @@ export const UniformityFormSchema: Yup.ObjectSchema<UniformityFormSchemaType> =
export type UniformityFormValues = Yup.InferType<typeof UniformityFormSchema>; export type UniformityFormValues = Yup.InferType<typeof UniformityFormSchema>;
export type UniformityFormData = {
date: string;
week: number;
project_flock_kandang_id: number;
file: File | null;
fileName: string;
};
export const getUniformityFormInitialValues = ( export const getUniformityFormInitialValues = (
initialValues?: Uniformity initialValues?: Uniformity
): UniformityFormValues => { ): UniformityFormValues => {
@@ -10,7 +10,10 @@ import { useUiStore } from '@/stores/ui/ui.store';
import { useUniformityStore } from '@/stores/uniformity/uniformity.store'; import { useUniformityStore } from '@/stores/uniformity/uniformity.store';
import RequirePermission from '@/components/helper/RequirePermission'; import RequirePermission from '@/components/helper/RequirePermission';
import Table from '@/components/Table'; import Table from '@/components/Table';
import { BodyWeightData } from '@/types/api/uniformity/uniformity'; import {
BodyWeightData,
UniformityDetailItem,
} from '@/types/api/uniformity/uniformity';
const UniformityPreviewForm = () => { const UniformityPreviewForm = () => {
const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen); const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen);
@@ -34,11 +37,13 @@ const UniformityPreviewForm = () => {
const tableData = useMemo(() => { const tableData = useMemo(() => {
if (!verifyUniformityResult) return []; if (!verifyUniformityResult) return [];
return verifyUniformityResult.uniformity_details.map((detail, index) => ({ return verifyUniformityResult.uniformity_details.map(
(detail: UniformityDetailItem, index: number) => ({
id: `weight-${index}`, id: `weight-${index}`,
number: index + 1, number: index + 1,
weight: detail.weight, weight: detail.weight,
})); })
);
}, [verifyUniformityResult]); }, [verifyUniformityResult]);
const columns: ColumnDef<BodyWeightData>[] = useMemo( const columns: ColumnDef<BodyWeightData>[] = useMemo(
@@ -22,7 +22,10 @@ import {
getWeightStatusText, getWeightStatusText,
} from '@/components/pages/uniformity/uniformity-utils'; } from '@/components/pages/uniformity/uniformity-utils';
import { DetailOptionType } from '@/types/api/uniformity/uniformity'; 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 UniformityResultForm = () => {
const router = useRouter(); const router = useRouter();
@@ -169,12 +172,14 @@ const UniformityResultForm = () => {
const tableData = useMemo(() => { const tableData = useMemo(() => {
if (!verifyUniformityResult) return []; if (!verifyUniformityResult) return [];
return verifyUniformityResult.uniformity_details.map((detail, index) => ({ return verifyUniformityResult.uniformity_details.map(
(detail: UniformityDetailItem, index: number) => ({
id: `body-weight-${index + 1}`, id: `body-weight-${index + 1}`,
number: index + 1, number: index + 1,
weight: detail.weight, weight: detail.weight,
status: detail.range.toLowerCase() as 'ideal' | 'outside', status: detail.range.toLowerCase() as 'ideal' | 'outside',
})); })
);
}, [verifyUniformityResult]); }, [verifyUniformityResult]);
const columnsUniformity: ColumnDef<BodyWeightData>[] = useMemo( const columnsUniformity: ColumnDef<BodyWeightData>[] = useMemo(
@@ -1,30 +1,5 @@
import { UniformitySlice } from '@/types/stores';
import { StateCreator } from 'zustand'; 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< export const createUniformitySlice: StateCreator<
UniformitySlice, UniformitySlice,
+2 -4
View File
@@ -2,10 +2,8 @@
import { create } from 'zustand'; import { create } from 'zustand';
import { devtools } from 'zustand/middleware'; import { devtools } from 'zustand/middleware';
import { import { createUniformitySlice } from '@/stores/uniformity/slices/uniformity.slice';
createUniformitySlice, import { UniformitySlice } from '@/types/stores';
UniformitySlice,
} from '@/stores/uniformity/slices/uniformity.slice';
export type UniformityStore = UniformitySlice; export type UniformityStore = UniformitySlice;
+5 -12
View File
@@ -47,26 +47,19 @@ type ProductionStandardFormSlice = {
export type FormStore = ProductionStandardFormSlice; export type FormStore = ProductionStandardFormSlice;
type UniformityStep = 'preview' | 'result'; export type UniformityStep = 'preview' | 'result';
type UniformityFormData = { export type UniformitySlice = {
date: string; // State
week: number;
project_flock_kandang_id: number;
file: File | null;
fileName: string;
};
type UniformitySlice = {
uniformityStep: UniformityStep; uniformityStep: UniformityStep;
verifyUniformityResult: VerifyUniformityResponse | null; verifyUniformityResult: VerifyUniformityResponse | null;
uniformityFormData: UniformityFormData | null; uniformityFormData: UniformityFormData | null;
isSuccess: boolean; isSuccess: boolean;
// Actions
setUniformityStep: (step: UniformityStep) => void; setUniformityStep: (step: UniformityStep) => void;
setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void; setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void;
setUniformityFormData: (data: UniformityFormData | null) => void; setUniformityFormData: (data: UniformityFormData | null) => void;
setIsSuccess: (success: boolean) => void; setIsSuccess: (success: boolean) => void;
resetUniformity: () => void; resetUniformity: () => void;
}; };
export type UniformityStore = UniformitySlice;