From 4127075b132a1e514e67d88fcb12b16aac8830c7 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Tue, 21 Oct 2025 15:09:33 +0700 Subject: [PATCH] feat(FE-113): create Transfer to Laying Create Form Schema --- .../form/TransferToLayingForm.schema.ts | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/components/pages/production/transfer-to-laying/form/TransferToLayingForm.schema.ts diff --git a/src/components/pages/production/transfer-to-laying/form/TransferToLayingForm.schema.ts b/src/components/pages/production/transfer-to-laying/form/TransferToLayingForm.schema.ts new file mode 100644 index 00000000..e0273a9a --- /dev/null +++ b/src/components/pages/production/transfer-to-laying/form/TransferToLayingForm.schema.ts @@ -0,0 +1,83 @@ +import * as Yup from 'yup'; + +type TransferToLayingFormSchemaType = { + transfer_date?: string; + flockSource?: { + value: number; + label: string; + }; + flockDestination?: { + value: number; + label: string; + }; + + totalQuantity?: number; + maxTotalQuantity?: number; // original cap (hidden), helper + + kandangs: { + kandang: { + value: number; + label: string; + }; + quantity: number | string; // editable + maxQuantity?: number; // original cap (hidden), helper + }[]; + reason?: string; +}; + +export const TransferToLayingFormSchema: Yup.ObjectSchema = + Yup.object({ + transfer_date: Yup.string().required('Tanggal transfer wajib diisi!'), + + flockSource: Yup.object({ + value: Yup.number().min(1).required(), + label: Yup.string().required(), + }).required('Flock asal wajib diisi!'), + + flockDestination: Yup.object({ + value: Yup.number().min(1).required(), + label: Yup.string().required(), + }).required('Flock tujuan wajib diisi!'), + + totalQuantity: Yup.number() + .min(1, 'Jumlah transfer minimal 1') + .max( + Yup.ref('maxTotalQuantity'), + ({ max }) => `Kuantitas maksimal ${max}!` + ) + .required('Jumlah transfer wajib diisi!'), + + maxTotalQuantity: Yup.number() + .min(1, 'Jumlah transfer minimal 1') + .required('Jumlah transfer wajib diisi!'), + + kandangs: Yup.array() + .of( + Yup.object({ + kandang: Yup.object({ + value: Yup.number().min(1).required(), + label: Yup.string().required(), + }).required('Kandang wajib diisi!'), + + quantity: Yup.number() + .min(0, 'Kuantitas minimal 0!') + .max( + Yup.ref('maxQuantity'), + ({ max }) => `Kuantitas maksimal ${max}!` + ) + .required('Kuantitas wajib diisi!'), + + maxQuantity: Yup.number().min(1).required(), // internal helper field + }) + ) + .min(1, 'Minimal 1 kandang terisi!') + .required('Kandang wajib diisi!'), + + reason: Yup.string().required('Alasan transfer wajib diisi!'), + }); + +export const UpdateTransferToLayingFormSchema = TransferToLayingFormSchema; + +export type TransferToLayingFormValues = Yup.InferType< + typeof TransferToLayingFormSchema +>;