diff --git a/src/app/production/recording/add/layout.tsx b/src/app/production/recording/add/layout.tsx new file mode 100644 index 00000000..7220dfa1 --- /dev/null +++ b/src/app/production/recording/add/layout.tsx @@ -0,0 +1,11 @@ +import SuspenseHelper from '@/components/helper/SuspenseHelper'; + +const Layout = ({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) => { + return {children}; +}; + +export default Layout; diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index 7fccb992..77b322bb 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -265,6 +265,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { // ===== API DATA FETCHING ===== const locationsUrl = `${LocationApi.basePath}?${new URLSearchParams({ search: locationSearchValue || '', + limit: '100', }).toString()}`; const { data: locations, isLoading: isLoadingLocations } = useSWR( locationsUrl, @@ -273,6 +274,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const projectFlocksUrl = `${ProjectFlockApi.basePath}?${new URLSearchParams({ search: projectFlockSearchValue || '', + limit: '100', ...(selectedLocation ? { location_id: selectedLocation.value.toString() } : {}), @@ -371,6 +373,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const existingRecordingsUrl = useMemo(() => { const params = new URLSearchParams({ record_date: today, + limit: '100', }); return `${RecordingApi.basePath}?${params.toString()}`; }, [today]); @@ -413,6 +416,24 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { ProductWarehouseApi.getAllFetcher ); + const approvedProjectFlockKandangsUrl = useMemo(() => { + const params = new URLSearchParams({ + step_name: 'Disetujui', + limit: '100', + }); + return `${ProjectFlockKandangApi.basePath}?${params.toString()}`; + }, []); + + const { data: approvedProjectFlockKandangsData } = useSWR( + approvedProjectFlockKandangsUrl, + ProjectFlockKandangApi.getAllFetcher + ); + + const approvedProjectFlockKandangs = useMemo(() => { + if (!isResponseSuccess(approvedProjectFlockKandangsData)) return []; + return approvedProjectFlockKandangsData.data; + }, [approvedProjectFlockKandangsData]); + // ===== APPROVAL DATA FETCHING ===== const approvalHistoryUrl = useMemo(() => { if (!initialValues?.id || type !== 'detail') return null; @@ -420,6 +441,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { module_name: 'RECORDINGS', module_id: initialValues.id.toString(), group_step_number: 'true', + limit: '100', }); return `${ApprovalApi.basePath}?${params.toString()}`; }, [initialValues?.id, type]); @@ -686,12 +708,21 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { ); if (selectedProjectFlockData?.kandangs) { - const kandangOptions = selectedProjectFlockData.kandangs.map( - (kandang: Kandang) => ({ + const approvedKandangIds = approvedProjectFlockKandangs + .filter((pfk) => pfk.project_flock_id === selectedProjectFlock.value) + .map((pfk) => pfk.kandang_id); + + const kandangOptions = selectedProjectFlockData.kandangs + .filter((kandang: Kandang) => { + if (type === 'add') { + return approvedKandangIds.includes(kandang.id); + } + return true; + }) + .map((kandang: Kandang) => ({ value: kandang.id, label: kandang.name || '', - }) - ); + })); options = options.concat(kandangOptions); } } @@ -710,7 +741,13 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { } return options; - }, [selectedProjectFlock, projectFlocks, projectFlockKandangDetail, type]); + }, [ + selectedProjectFlock, + projectFlocks, + projectFlockKandangDetail, + type, + approvedProjectFlockKandangs, + ]); const recordedProjectFlockKandangIds = useMemo(() => { if (!isResponseSuccess(existingRecordings)) return new Set(); diff --git a/src/services/api/production/project-flock-kandang.ts b/src/services/api/production/project-flock-kandang.ts new file mode 100644 index 00000000..b7729325 --- /dev/null +++ b/src/services/api/production/project-flock-kandang.ts @@ -0,0 +1,11 @@ +import { BaseApiService } from '@/services/api/base'; +import { + BaseProjectFlockKandang, + ProjectFlockKandang, +} from '@/types/api/production/project-flock-kandang'; + +export const ProjectFlockKandangApi = new BaseApiService< + BaseProjectFlockKandang, + ProjectFlockKandang, + unknown +>('project-flock-kandang');