mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-24 15:25:46 +00:00
refactor(FE): Use useSelect for ProjectFlock with pagination
This commit is contained in:
@@ -36,7 +36,10 @@ import {
|
|||||||
VerifyUniformityPayload,
|
VerifyUniformityPayload,
|
||||||
} from '@/types/api/production/uniformity';
|
} from '@/types/api/production/uniformity';
|
||||||
import { type BaseApiResponse } from '@/types/api/api-general';
|
import { type BaseApiResponse } from '@/types/api/api-general';
|
||||||
import { ProjectFlockKandangLookup } from '@/types/api/production/project-flock';
|
import {
|
||||||
|
ProjectFlockKandangLookup,
|
||||||
|
ProjectFlock,
|
||||||
|
} from '@/types/api/production/project-flock';
|
||||||
import { Kandang } from '@/types/api/master-data/kandang';
|
import { Kandang } from '@/types/api/master-data/kandang';
|
||||||
import UniformityPreviewForm from '@/components/pages/production/uniformity/form/UniformityPreviewForm';
|
import UniformityPreviewForm from '@/components/pages/production/uniformity/form/UniformityPreviewForm';
|
||||||
import UniformityResultForm from '@/components/pages/production/uniformity/form/UniformityResultForm';
|
import UniformityResultForm from '@/components/pages/production/uniformity/form/UniformityResultForm';
|
||||||
@@ -88,7 +91,9 @@ const UniformityForm = ({
|
|||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
|
||||||
const [projectFlockSearchValue, setProjectFlockSearchValue] = useState('');
|
const [selectedProjectFlockLocationId, setSelectedProjectFlockLocationId] =
|
||||||
|
useState<string>('');
|
||||||
|
|
||||||
const [selectedProjectFlock, setSelectedProjectFlock] =
|
const [selectedProjectFlock, setSelectedProjectFlock] =
|
||||||
useState<OptionType | null>(null);
|
useState<OptionType | null>(null);
|
||||||
|
|
||||||
@@ -100,50 +105,21 @@ const UniformityForm = ({
|
|||||||
setInputValue: setLocationSelectInputValue,
|
setInputValue: setLocationSelectInputValue,
|
||||||
options: locationOptions,
|
options: locationOptions,
|
||||||
isLoadingOptions: isLoadingLocations,
|
isLoadingOptions: isLoadingLocations,
|
||||||
} = useSelect(LocationApi.basePath, 'id', 'name', 'search', {
|
loadMore: loadMoreLocations,
|
||||||
page: '1',
|
hasMore: hasMoreLocations,
|
||||||
limit: '100',
|
} = useSelect(LocationApi.basePath, 'id', 'name', 'search');
|
||||||
|
|
||||||
|
const {
|
||||||
|
setInputValue: setProjectFlockSearchValue,
|
||||||
|
options: projectFlockOptions,
|
||||||
|
rawData: projectFlocksRawData,
|
||||||
|
isLoadingOptions: isLoadingProjectFlocks,
|
||||||
|
loadMore: loadMoreProjectFlocks,
|
||||||
|
hasMore: hasMoreProjectFlocks,
|
||||||
|
} = useSelect(ProjectFlockApi.basePath, 'id', 'flock_name', 'search', {
|
||||||
|
location_id: selectedProjectFlockLocationId,
|
||||||
});
|
});
|
||||||
|
|
||||||
// ===== FETCH PROJECT FLOCKS DATA =====
|
|
||||||
const projectFlocksUrl = useMemo(() => {
|
|
||||||
const params = new URLSearchParams({
|
|
||||||
search: projectFlockSearchValue || '',
|
|
||||||
page: '1',
|
|
||||||
limit: '100',
|
|
||||||
});
|
|
||||||
if (selectedLocation) {
|
|
||||||
params.append('location_id', selectedLocation.value.toString());
|
|
||||||
}
|
|
||||||
return `${ProjectFlockApi.basePath}?${params.toString()}`;
|
|
||||||
}, [projectFlockSearchValue, selectedLocation]);
|
|
||||||
|
|
||||||
const { data: projectFlocksData, isLoading: isLoadingProjectFlocks } = useSWR(
|
|
||||||
projectFlocksUrl,
|
|
||||||
ProjectFlockApi.getAllFetcher
|
|
||||||
);
|
|
||||||
|
|
||||||
const projectFlocksDataList =
|
|
||||||
projectFlocksData?.status === 'success'
|
|
||||||
? projectFlocksData.data
|
|
||||||
: undefined;
|
|
||||||
|
|
||||||
// ===== PROJECT FLOCK OPTIONS =====
|
|
||||||
const projectFlockOptions = useMemo(() => {
|
|
||||||
let options: OptionType[] = [];
|
|
||||||
|
|
||||||
if (isResponseSuccess(projectFlocksData)) {
|
|
||||||
const flockOptions =
|
|
||||||
projectFlocksData?.data.map((projectFlock) => ({
|
|
||||||
value: projectFlock.id,
|
|
||||||
label: projectFlock.flock_name || '',
|
|
||||||
})) || [];
|
|
||||||
options = options.concat(flockOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
return options;
|
|
||||||
}, [projectFlocksData]);
|
|
||||||
|
|
||||||
// ===== APPROVED PROJECT FLOCK KANDANGS =====
|
// ===== APPROVED PROJECT FLOCK KANDANGS =====
|
||||||
const approvedProjectFlockKandangsUrl = useMemo(() => {
|
const approvedProjectFlockKandangsUrl = useMemo(() => {
|
||||||
const params = new URLSearchParams({
|
const params = new URLSearchParams({
|
||||||
@@ -168,8 +144,9 @@ const UniformityForm = ({
|
|||||||
const kandangOptions = useMemo(() => {
|
const kandangOptions = useMemo(() => {
|
||||||
let options: OptionType[] = [];
|
let options: OptionType[] = [];
|
||||||
|
|
||||||
if (selectedProjectFlock && projectFlocksDataList) {
|
if (selectedProjectFlock && isResponseSuccess(projectFlocksRawData)) {
|
||||||
const selectedProjectFlockData = projectFlocksDataList.find(
|
const data = projectFlocksRawData.data as unknown as ProjectFlock[];
|
||||||
|
const selectedProjectFlockData = data.find(
|
||||||
(pf) => pf.id === selectedProjectFlock.value
|
(pf) => pf.id === selectedProjectFlock.value
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -196,7 +173,7 @@ const UniformityForm = ({
|
|||||||
return options;
|
return options;
|
||||||
}, [
|
}, [
|
||||||
selectedProjectFlock,
|
selectedProjectFlock,
|
||||||
projectFlocksDataList,
|
projectFlocksRawData,
|
||||||
approvedProjectFlockKandangs,
|
approvedProjectFlockKandangs,
|
||||||
formType,
|
formType,
|
||||||
]);
|
]);
|
||||||
@@ -313,6 +290,10 @@ const UniformityForm = ({
|
|||||||
formik.setFieldValue('location_id', locationId);
|
formik.setFieldValue('location_id', locationId);
|
||||||
|
|
||||||
setSelectedLocation(location);
|
setSelectedLocation(location);
|
||||||
|
setSelectedProjectFlock(null);
|
||||||
|
setSelectedProjectFlockLocationId(
|
||||||
|
location ? location.value.toString() : ''
|
||||||
|
);
|
||||||
},
|
},
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
@@ -513,6 +494,7 @@ const UniformityForm = ({
|
|||||||
options={locationOptions}
|
options={locationOptions}
|
||||||
onInputChange={setLocationSelectInputValue}
|
onInputChange={setLocationSelectInputValue}
|
||||||
isLoading={isLoadingLocations}
|
isLoading={isLoadingLocations}
|
||||||
|
onMenuScrollToBottom={loadMoreLocations}
|
||||||
isError={
|
isError={
|
||||||
formik.touched.location_id && Boolean(formik.errors.location_id)
|
formik.touched.location_id && Boolean(formik.errors.location_id)
|
||||||
}
|
}
|
||||||
@@ -530,6 +512,7 @@ const UniformityForm = ({
|
|||||||
options={projectFlockOptions}
|
options={projectFlockOptions}
|
||||||
onInputChange={setProjectFlockSearchValue}
|
onInputChange={setProjectFlockSearchValue}
|
||||||
isLoading={isLoadingProjectFlocks}
|
isLoading={isLoadingProjectFlocks}
|
||||||
|
onMenuScrollToBottom={loadMoreProjectFlocks}
|
||||||
isDisabled={!formik.values.location_id}
|
isDisabled={!formik.values.location_id}
|
||||||
isError={
|
isError={
|
||||||
formik.touched.project_flock_id &&
|
formik.touched.project_flock_id &&
|
||||||
|
|||||||
Reference in New Issue
Block a user