feat(FE-174): add grading functionality to daily recording form with validation

This commit is contained in:
rstubryan
2025-10-31 14:01:51 +07:00
parent c486d6cf81
commit 3a52d800e0
2 changed files with 52 additions and 3 deletions
@@ -4,6 +4,7 @@ import {
CreateGrowingRecordingPayload, CreateGrowingRecordingPayload,
CreateLayingRecordingPayload, CreateLayingRecordingPayload,
CreateEggPayload, CreateEggPayload,
CreateGradingPayload,
} from '@/types/api/production/recording'; } from '@/types/api/production/recording';
export const RecordingGrowingFormSchema = Yup.object({ export const RecordingGrowingFormSchema = Yup.object({
@@ -132,6 +133,35 @@ export const UpdateRecordingLayingFormSchema = RecordingLayingFormSchema.shape({
.required('Project Flock Kandang wajib diisi!'), .required('Project Flock Kandang wajib diisi!'),
}); });
export const RecordingGradingFormSchema = 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!'),
eggs_grading: Yup.array()
.of(
Yup.object({
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.shape({
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!'),
});
export type RecordingGrowingFormValues = Yup.InferType< export type RecordingGrowingFormValues = Yup.InferType<
typeof RecordingGrowingFormSchema typeof RecordingGrowingFormSchema
>; >;
@@ -140,6 +170,10 @@ export type RecordingLayingFormValues = Yup.InferType<
typeof RecordingLayingFormSchema typeof RecordingLayingFormSchema
>; >;
export type RecordingGradingFormValues = Yup.InferType<
typeof RecordingGradingFormSchema
>;
type RecordingFormData = Partial<Recording> & { type RecordingFormData = Partial<Recording> & {
body_weights?: CreateGrowingRecordingPayload['body_weights']; body_weights?: CreateGrowingRecordingPayload['body_weights'];
stocks?: CreateGrowingRecordingPayload['stocks']; stocks?: CreateGrowingRecordingPayload['stocks'];
@@ -211,3 +245,18 @@ export const getRecordingLayingFormInitialValues = (
}, },
], ],
}); });
export const getRecordingGradingFormInitialValues = (
initialValues?: Partial<CreateGradingPayload>
): RecordingGradingFormValues => ({
recording_egg_id: initialValues?.recording_egg_id ?? 0,
eggs_grading: initialValues?.eggs_grading?.map((grading) => ({
grade: grading.grade,
qty: grading.qty,
})) ?? [
{
grade: '',
qty: 0,
},
],
});
+3 -3
View File
@@ -86,9 +86,8 @@ export type CreateGrowingRecordingPayload = {
}; };
export type CreateGradingPayload = { export type CreateGradingPayload = {
recording_id: number; recording_egg_id: number;
grading: { eggs_grading: {
product_warehouse_id: number;
grade: string; grade: string;
qty: number; qty: number;
}[]; }[];
@@ -110,5 +109,6 @@ export type CreateRecordingPayload =
export type UpdateGrowingRecordingPayload = CreateGrowingRecordingPayload; export type UpdateGrowingRecordingPayload = CreateGrowingRecordingPayload;
export type UpdateLayingRecordingPayload = CreateLayingRecordingPayload; export type UpdateLayingRecordingPayload = CreateLayingRecordingPayload;
export type UpdateGradingRecordingPayload = CreateGradingRecordingPayload;
export type UpdateRecordingPayload = CreateRecordingPayload; export type UpdateRecordingPayload = CreateRecordingPayload;