diff --git a/src/components/pages/flock/recording/form/RecordingForm.tsx b/src/components/pages/flock/recording/form/RecordingForm.tsx index 228683fa..d6e80a76 100644 --- a/src/components/pages/flock/recording/form/RecordingForm.tsx +++ b/src/components/pages/flock/recording/form/RecordingForm.tsx @@ -18,7 +18,7 @@ import { UpdateRecordingFormSchema, } from './RecordingForm.schema'; import { useRecordingFormHandlers } from './useRecordingFormHandlers'; -import { FlockApi } from '@/services/api/flock'; +import { ProjectFlockApi } from '@/services/api/production'; import { isResponseSuccess } from '@/lib/api-helper'; import { RECORDING_FLAG_OPTIONS } from '@/config/constant'; import useSWR from 'swr'; @@ -29,15 +29,10 @@ interface RecordingFormProps { initialValues?: Recording; } -const DUMMY_FLOCKS = [ - { value: 1, label: 'Flock A' }, - { value: 2, label: 'Flock B' }, - { value: 3, label: 'Flock C' }, - { value: 4, label: 'Flock D' }, -]; - const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const [flockSelectInputValue, setFlockSelectInputValue] = useState(''); + const [locationSelectInputValue, setLocationSelectInputValue] = useState(''); + const [coopSelectInputValue, setCoopSelectInputValue] = useState(''); const [selectedFeed, setSelectedFeed] = useState([]); const [selectedWeight, setSelectedWeight] = useState([]); const [selectedVaccine, setSelectedVaccine] = useState([]); @@ -107,20 +102,20 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { }, }); - // // Flock selection - // const flocksUrl = `${FlockApi.basePath}?${new URLSearchParams({ search: flockSelectInputValue }).toString()}`; - // const { data: flocks, isLoading: isLoadingFlocks } = useSWR( - // flocksUrl, - // FlockApi.getAllFetcher - // ); - // const flockOptions = isResponseSuccess(flocks) - // ? flocks?.data.map((f) => ({ value: f.id, label: f.name })) - // : []; + // Flock selection + const projectFlocksUrl = `${ProjectFlockApi.basePath}?${new URLSearchParams({ search: flockSelectInputValue }).toString()}`; + const { data: projectFlocks, isLoading: isLoadingFlocks } = useSWR( + projectFlocksUrl, + ProjectFlockApi.getAllFetcher + ); + const flockOptions = isResponseSuccess(projectFlocks) + ? projectFlocks?.data.map((flock) => ({ + value: flock.id, + label: flock.flock.name, + })) + : []; - const flockOptions = DUMMY_FLOCKS; - - const [locationSelectInputValue, setLocationSelectInputValue] = useState(''); - const [coopSelectInputValue, setCoopSelectInputValue] = useState(''); + // Pakan selection const locationsUrl = `${LocationApi.basePath}?${new URLSearchParams({ search: locationSelectInputValue ?? '' }).toString()}`; const { data: locations, isLoading: isLoadingLocations } = useSWR( @@ -366,7 +361,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { onChange={flockChangeHandler} options={flockOptions} onInputChange={setFlockSelectInputValue} - isLoading={false} + isLoading={isLoadingFlocks} isError={ formik.touched.flock_id && Boolean(formik.errors.flock_id) } diff --git a/src/services/api/flock.ts b/src/services/api/flock.ts index 83fbb0d8..ff8c641a 100644 --- a/src/services/api/flock.ts +++ b/src/services/api/flock.ts @@ -2,7 +2,7 @@ import { CreateFlockPayload, Flock, UpdateFlockPayload, -} from '@/types/api/flock/flock'; +} from '@/types/api/master-data/flock'; import { CreateRecordingPayload, Recording, diff --git a/src/services/api/production.ts b/src/services/api/production.ts new file mode 100644 index 00000000..49f0b133 --- /dev/null +++ b/src/services/api/production.ts @@ -0,0 +1,12 @@ +import { BaseApiService } from './base'; +import { + CreateProjectFlockPayload, + ProjectFlock, + UpdateProjectFlockPayload, +} from '@/types/api/production/project-flock'; + +export const ProjectFlockApi = new BaseApiService< + ProjectFlock, + CreateProjectFlockPayload, + UpdateProjectFlockPayload +>('/production/project_flocks'); diff --git a/src/types/api/flock/recording.d.ts b/src/types/api/flock/recording.d.ts index a39588b5..58fed128 100644 --- a/src/types/api/flock/recording.d.ts +++ b/src/types/api/flock/recording.d.ts @@ -1,11 +1,11 @@ import { BaseMetadata } from '@/types/api/api-general'; -import { Flock } from '@/types/api/flock/flock'; +import { ProjectFlock } from '@/types/api/production/project-flock'; import { Location } from '@/types/api/master-data/location'; import { Kandang } from '@/types/api/master-data/kandang'; export type BaseRecording = { id: number; - flock: Flock; + flock: ProjectFlock; recording_date: string; location: Location; coop: Kandang; diff --git a/src/types/api/flock/flock.d.ts b/src/types/api/master-data/flock.d.ts similarity index 100% rename from src/types/api/flock/flock.d.ts rename to src/types/api/master-data/flock.d.ts diff --git a/src/types/api/production/project-flock.d.ts b/src/types/api/production/project-flock.d.ts new file mode 100644 index 00000000..cd68df40 --- /dev/null +++ b/src/types/api/production/project-flock.d.ts @@ -0,0 +1,39 @@ +import { Flock } from '@/types/api/master-data/flock'; +import { Area } from '@/types/api/master-data/area'; +import { ProductCategory } from '@/types/api/master-data/product-category'; +import { Fcr } from '@/types/api/master-data/fcr'; +import { Kandang } from '@/types/api/master-data/kandang'; +import { BaseMetadata } from '@/types/api/api-general'; + +export type BaseProjectFlock = { + id: number; + name: string; + flock: Flock; + flock_id: number; + area: Area; + area_id: number; + product_category: ProductCategory; + product_category_id: number; + fcr: Fcr; + fcr_id: number; + location: Location; + location_id: number; + period: number; + kandang_ids: number[]; + kandangs: Kandang[]; +}; + +export type ProjectFlock = BaseMetadata & BaseProjectFlock; + +export type CreateProjectFlockPayload = { + name: string; + flock_id: number; + area_id: number; + product_category_id: number; + fcr_id: number; + location_id: number; + period: number; + kandang_ids: number[]; +}; + +export type UpdateProjectFlockPayload = CreateProjectFlockPayload;