mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-24 07:15:44 +00:00
refactor(FE): Refactor InventoryAdjustmentForm to use useSelect for
Kandang
This commit is contained in:
@@ -14,7 +14,11 @@ import {
|
|||||||
InventoryAdjustmentFormSchema,
|
InventoryAdjustmentFormSchema,
|
||||||
InventoryAdjustmentFormValues,
|
InventoryAdjustmentFormValues,
|
||||||
} from '@/components/pages/inventory/adjustment/form/InventoryAdjustmentForm.schema';
|
} from '@/components/pages/inventory/adjustment/form/InventoryAdjustmentForm.schema';
|
||||||
import { LocationApi, ProductApi } from '@/services/api/master-data';
|
import {
|
||||||
|
KandangApi,
|
||||||
|
LocationApi,
|
||||||
|
ProductApi,
|
||||||
|
} from '@/services/api/master-data';
|
||||||
import {
|
import {
|
||||||
ProjectFlockApi,
|
ProjectFlockApi,
|
||||||
ProjectFlockKandangApi,
|
ProjectFlockKandangApi,
|
||||||
@@ -104,7 +108,6 @@ const InventoryAdjustmentForm = ({
|
|||||||
const {
|
const {
|
||||||
setInputValue: setProjectFlockInputValue,
|
setInputValue: setProjectFlockInputValue,
|
||||||
options: projectFlockOptions,
|
options: projectFlockOptions,
|
||||||
rawData: projectFlocksRawData,
|
|
||||||
isLoadingOptions: isLoadingProjectFlockOptions,
|
isLoadingOptions: isLoadingProjectFlockOptions,
|
||||||
loadMore: loadMoreProjectFlocks,
|
loadMore: loadMoreProjectFlocks,
|
||||||
} = useSelect<ProjectFlock>(
|
} = useSelect<ProjectFlock>(
|
||||||
@@ -117,6 +120,43 @@ const InventoryAdjustmentForm = ({
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { rawData: approvedProjectFlockKandangsRawData } =
|
||||||
|
useSelect<ProjectFlockKandang>(
|
||||||
|
ProjectFlockKandangApi.basePath,
|
||||||
|
'id',
|
||||||
|
'id',
|
||||||
|
'search',
|
||||||
|
{
|
||||||
|
step_name: 'Disetujui',
|
||||||
|
limit: '100',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const approvedProjectFlockKandangs = useMemo(() => {
|
||||||
|
if (
|
||||||
|
approvedProjectFlockKandangsRawData &&
|
||||||
|
'data' in approvedProjectFlockKandangsRawData
|
||||||
|
) {
|
||||||
|
return approvedProjectFlockKandangsRawData.data as ProjectFlockKandang[];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}, [approvedProjectFlockKandangsRawData]);
|
||||||
|
|
||||||
|
const {
|
||||||
|
setInputValue: setKandangInputValue,
|
||||||
|
options: kandangOptionsFromApi,
|
||||||
|
isLoadingOptions: isLoadingKandangOptions,
|
||||||
|
loadMore: loadMoreKandangs,
|
||||||
|
} = useSelect<Kandang>(
|
||||||
|
selectedProjectFlock ? KandangApi.basePath : '',
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'search',
|
||||||
|
{
|
||||||
|
location_id: selectedProjectFlockLocationId,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const projectFlockKandangLookupUrl = useMemo(() => {
|
const projectFlockKandangLookupUrl = useMemo(() => {
|
||||||
if (!selectedProjectFlock || !selectedKandang) return null;
|
if (!selectedProjectFlock || !selectedKandang) return null;
|
||||||
const params = new URLSearchParams({
|
const params = new URLSearchParams({
|
||||||
@@ -162,83 +202,38 @@ const InventoryAdjustmentForm = ({
|
|||||||
? projectFlockKandangDetailData.data
|
? projectFlockKandangDetailData.data
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
const approvedProjectFlockKandangsUrl = useMemo(() => {
|
const {
|
||||||
const params = new URLSearchParams({
|
setInputValue: setProductInputValue,
|
||||||
step_name: 'Disetujui',
|
options: productOptions,
|
||||||
limit: '100',
|
isLoadingOptions: isLoadingProductOptions,
|
||||||
});
|
loadMore: loadMoreProducts,
|
||||||
return `${ProjectFlockKandangApi.basePath}?${params.toString()}`;
|
} = useSelect<Product>(
|
||||||
}, []);
|
projectFlockKandangLookup?.project_flock_kandang_id
|
||||||
|
? ProductApi.basePath
|
||||||
const { data: approvedProjectFlockKandangsData } = useSWR(
|
: '',
|
||||||
approvedProjectFlockKandangsUrl,
|
'id',
|
||||||
ProjectFlockKandangApi.getAllFetcher
|
'name',
|
||||||
);
|
'search',
|
||||||
|
{
|
||||||
const approvedProjectFlockKandangs = useMemo(() => {
|
|
||||||
if (!isResponseSuccess(approvedProjectFlockKandangsData)) return [];
|
|
||||||
return approvedProjectFlockKandangsData.data;
|
|
||||||
}, [approvedProjectFlockKandangsData]);
|
|
||||||
|
|
||||||
const productUrl = useMemo(() => {
|
|
||||||
if (!projectFlockKandangLookup?.project_flock_kandang_id) return null;
|
|
||||||
const params = new URLSearchParams({
|
|
||||||
project_flock_kandang_id:
|
project_flock_kandang_id:
|
||||||
projectFlockKandangLookup.project_flock_kandang_id.toString(),
|
projectFlockKandangLookup?.project_flock_kandang_id?.toString() || '',
|
||||||
page: '1',
|
}
|
||||||
limit: '10',
|
|
||||||
});
|
|
||||||
return `${ProductApi.basePath}?${params.toString()}`;
|
|
||||||
}, [projectFlockKandangLookup?.project_flock_kandang_id]);
|
|
||||||
|
|
||||||
const { data: productData, isLoading: isLoadingProductOptions } = useSWR(
|
|
||||||
productUrl,
|
|
||||||
productUrl ? ProductApi.getAllFetcher : null
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const productOptions = useMemo(() => {
|
|
||||||
if (!isResponseSuccess(productData)) return [];
|
|
||||||
return productData.data.map((p: Product) => ({
|
|
||||||
value: p.id,
|
|
||||||
label: p.name,
|
|
||||||
}));
|
|
||||||
}, [productData]);
|
|
||||||
|
|
||||||
const setProductInputValue = useCallback((value: string) => {
|
|
||||||
// Implementasi search jika diperlukan
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const loadMoreProducts = useCallback(() => {
|
|
||||||
// Implementasi load more jika diperlukan
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const kandangOptions = useMemo(() => {
|
const kandangOptions = useMemo(() => {
|
||||||
let options: OptionType[] = [];
|
let options: OptionType[] = [];
|
||||||
|
|
||||||
if (selectedProjectFlock && isResponseSuccess(projectFlocksRawData)) {
|
if (selectedProjectFlock) {
|
||||||
const data = projectFlocksRawData.data as ProjectFlock[];
|
const approvedKandangIds = approvedProjectFlockKandangs
|
||||||
const selectedProjectFlockData = data.find(
|
.filter((pfk) => pfk.project_flock_id === selectedProjectFlock.value)
|
||||||
(pf) => pf.id === selectedProjectFlock.value
|
.map((pfk) => pfk.kandang_id);
|
||||||
);
|
|
||||||
|
|
||||||
if (selectedProjectFlockData?.kandangs) {
|
options = kandangOptionsFromApi.filter((kandang) => {
|
||||||
const approvedKandangIds = approvedProjectFlockKandangs
|
if (type === 'add') {
|
||||||
.filter((pfk) => pfk.project_flock_id === selectedProjectFlock.value)
|
return approvedKandangIds.includes(kandang.value as number);
|
||||||
.map((pfk) => pfk.kandang_id);
|
}
|
||||||
|
return true;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (projectFlockKandangDetail && type === 'edit') {
|
if (projectFlockKandangDetail && type === 'edit') {
|
||||||
@@ -257,7 +252,7 @@ const InventoryAdjustmentForm = ({
|
|||||||
return options;
|
return options;
|
||||||
}, [
|
}, [
|
||||||
selectedProjectFlock,
|
selectedProjectFlock,
|
||||||
projectFlocksRawData,
|
kandangOptionsFromApi,
|
||||||
projectFlockKandangDetail,
|
projectFlockKandangDetail,
|
||||||
type,
|
type,
|
||||||
approvedProjectFlockKandangs,
|
approvedProjectFlockKandangs,
|
||||||
@@ -806,7 +801,10 @@ const InventoryAdjustmentForm = ({
|
|||||||
label='Kandang'
|
label='Kandang'
|
||||||
value={selectedKandang}
|
value={selectedKandang}
|
||||||
onChange={kandangChangeHandler}
|
onChange={kandangChangeHandler}
|
||||||
|
onInputChange={setKandangInputValue}
|
||||||
options={kandangOptions}
|
options={kandangOptions}
|
||||||
|
onMenuScrollToBottom={loadMoreKandangs}
|
||||||
|
isLoading={isLoadingKandangOptions}
|
||||||
isError={
|
isError={
|
||||||
formik.touched.kandang_id && Boolean(formik.errors.kandang_id)
|
formik.touched.kandang_id && Boolean(formik.errors.kandang_id)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user