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(() => {
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<BodyWeightData>[] = useMemo(
@@ -79,6 +79,14 @@ export const UniformityFormSchema: Yup.ObjectSchema<UniformityFormSchemaType> =
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 = (
initialValues?: Uniformity
): UniformityFormValues => {
@@ -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<BodyWeightData>[] = useMemo(
@@ -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<BodyWeightData>[] = useMemo(
@@ -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,
+2 -4
View File
@@ -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;
+5 -12
View File
@@ -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;