feat(FE-114): add tanggal_recording field to RecordingForm and update schema validation

This commit is contained in:
rstubryan
2025-10-15 09:50:21 +07:00
parent 53ee4cdc1b
commit 6f0467918b
3 changed files with 58 additions and 3 deletions
@@ -8,6 +8,9 @@ export const RecordingFormSchema = Yup.object({
label: Yup.string().required(),
}).nullable(),
flock_id: Yup.number().required('Flock wajib diisi!'),
tanggal_recording: Yup.date()
.required('Tanggal recording wajib diisi')
.typeError('Format tanggal tidak valid'),
data_pakan: Yup.array()
.of(
Yup.object({
@@ -84,6 +87,9 @@ export const getRecordingFormInitialValues = (
}
: null,
flock_id: initialValues?.flock?.id ?? 0,
tanggal_recording: initialValues?.tanggal_recording
? new Date(initialValues.tanggal_recording)
: new Date(),
data_pakan: initialValues?.data_pakan ?? [
{
nama_pakan: '',
@@ -67,6 +67,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
setRecordingFormErrorMessage('');
const payload: CreateRecordingPayload = {
flock_id: values.flock_id,
tanggal_recording: values.tanggal_recording.toISOString(),
data_pakan: (values.data_pakan ?? []).map((p) => ({
nama_pakan: p.nama_pakan,
qty_pakan: p.qty_pakan,
@@ -230,6 +231,33 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
<div className='card bg-base-100 shadow mb-4'>
<div className='card-body'>
<div className='flex gap-4'>
{/*<SelectInput*/}
{/* required*/}
{/* label='Flock'*/}
{/* value={*/}
{/* formik.values.flock_id*/}
{/* ? {*/}
{/* value: formik.values.flock_id,*/}
{/* label: initialValues?.flock?.name,*/}
{/* }*/}
{/* : null*/}
{/* }*/}
{/* onChange={(val) => {*/}
{/* formik.setFieldValue(*/}
{/* 'flock_id',*/}
{/* (val as OptionType)?.value*/}
{/* );*/}
{/* }}*/}
{/* options={flockOptions}*/}
{/* onInputChange={setFlockSelectInputValue}*/}
{/* isLoading={isLoadingFlocks}*/}
{/* isError={*/}
{/* formik.touched.flock_id && Boolean(formik.errors.flock_id)*/}
{/* }*/}
{/* errorMessage={formik.errors.flock_id as string}*/}
{/* isDisabled={type === 'detail'}*/}
{/* isClearable*/}
{/*/>*/}
<SelectInput
required
label='Flock'
@@ -243,10 +271,9 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
}}
options={flockOptions}
onInputChange={(val) => {
// Filter options locally instead of API call
return val;
}}
isLoading={false} // Remove isLoadingFlocks
isLoading={false}
isError={
formik.touched.flock_id && Boolean(formik.errors.flock_id)
}
@@ -254,6 +281,26 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
isDisabled={type === 'detail'}
isClearable
/>
<TextInput
required
label='Tanggal Recording'
type='date'
name='tanggal_recording'
value={formik.values.tanggal_recording
.toISOString()
.substring(0, 10)}
onChange={(e) => {
const date = new Date(e.target.value);
formik.setFieldValue('tanggal_recording', date);
}}
onBlur={formik.handleBlur}
isError={
formik.touched.tanggal_recording &&
Boolean(formik.errors.tanggal_recording)
}
errorMessage={formik.errors.tanggal_recording as string}
readOnly={type === 'detail'}
/>
</div>
</div>
</div>
+3 -1
View File
@@ -4,10 +4,11 @@ import { Flock } from '@/types/api/flock/flock';
export type BaseRecording = {
id: number;
flock: Flock;
tanggal_recording: string;
data_pakan: {
nama_pakan: string;
qty_pakan: number;
stock_pakan;
stock_pakan: number;
}[];
bobot_badan: {
berat_ayam: number;
@@ -29,6 +30,7 @@ export type Recording = BaseMetadata & BaseRecording;
export type CreateRecordingPayload = {
flock_id: number;
tanggal_recording: string;
data_pakan: {
nama_pakan: string;
qty_pakan: number;