mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-24 15:25:46 +00:00
feat(FE-114): add tanggal_recording field to RecordingForm and update schema validation
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Vendored
+3
-1
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user