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(), label: Yup.string().required(),
}).nullable(), }).nullable(),
flock_id: Yup.number().required('Flock wajib diisi!'), 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() data_pakan: Yup.array()
.of( .of(
Yup.object({ Yup.object({
@@ -84,6 +87,9 @@ export const getRecordingFormInitialValues = (
} }
: null, : null,
flock_id: initialValues?.flock?.id ?? 0, flock_id: initialValues?.flock?.id ?? 0,
tanggal_recording: initialValues?.tanggal_recording
? new Date(initialValues.tanggal_recording)
: new Date(),
data_pakan: initialValues?.data_pakan ?? [ data_pakan: initialValues?.data_pakan ?? [
{ {
nama_pakan: '', nama_pakan: '',
@@ -67,6 +67,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
setRecordingFormErrorMessage(''); setRecordingFormErrorMessage('');
const payload: CreateRecordingPayload = { const payload: CreateRecordingPayload = {
flock_id: values.flock_id, flock_id: values.flock_id,
tanggal_recording: values.tanggal_recording.toISOString(),
data_pakan: (values.data_pakan ?? []).map((p) => ({ data_pakan: (values.data_pakan ?? []).map((p) => ({
nama_pakan: p.nama_pakan, nama_pakan: p.nama_pakan,
qty_pakan: p.qty_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 bg-base-100 shadow mb-4'>
<div className='card-body'> <div className='card-body'>
<div className='flex gap-4'> <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 <SelectInput
required required
label='Flock' label='Flock'
@@ -243,10 +271,9 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
}} }}
options={flockOptions} options={flockOptions}
onInputChange={(val) => { onInputChange={(val) => {
// Filter options locally instead of API call
return val; return val;
}} }}
isLoading={false} // Remove isLoadingFlocks isLoading={false}
isError={ isError={
formik.touched.flock_id && Boolean(formik.errors.flock_id) formik.touched.flock_id && Boolean(formik.errors.flock_id)
} }
@@ -254,6 +281,26 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
isDisabled={type === 'detail'} isDisabled={type === 'detail'}
isClearable 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> </div>
</div> </div>
+3 -1
View File
@@ -4,10 +4,11 @@ import { Flock } from '@/types/api/flock/flock';
export type BaseRecording = { export type BaseRecording = {
id: number; id: number;
flock: Flock; flock: Flock;
tanggal_recording: string;
data_pakan: { data_pakan: {
nama_pakan: string; nama_pakan: string;
qty_pakan: number; qty_pakan: number;
stock_pakan; stock_pakan: number;
}[]; }[];
bobot_badan: { bobot_badan: {
berat_ayam: number; berat_ayam: number;
@@ -29,6 +30,7 @@ export type Recording = BaseMetadata & BaseRecording;
export type CreateRecordingPayload = { export type CreateRecordingPayload = {
flock_id: number; flock_id: number;
tanggal_recording: string;
data_pakan: { data_pakan: {
nama_pakan: string; nama_pakan: string;
qty_pakan: number; qty_pakan: number;