refactor(FE-212): update product warehouse fetching logic and options mapping in PurchaseRequisitionsForm

This commit is contained in:
rstubryan
2025-11-08 10:53:29 +07:00
parent 10dca5c692
commit 8db9d1a52c
@@ -64,6 +64,7 @@ const PurchaseRequisitionsForm = ({
// ===== TYPE DEFINITIONS ===== // ===== TYPE DEFINITIONS =====
interface ProductWarehouseOptionType extends OptionType { interface ProductWarehouseOptionType extends OptionType {
product_id: number; product_id: number;
product_warehouse_id: number;
warehouse_id: number; warehouse_id: number;
warehouse_name: string; warehouse_name: string;
quantity: number; quantity: number;
@@ -233,35 +234,36 @@ const PurchaseRequisitionsForm = ({
}); });
// ===== API DATA FETCHING ===== // ===== API DATA FETCHING =====
const allProductWarehousesUrl = `${ProductWarehouseApi.basePath}`; const productWarehousesUrl = useMemo(() => {
if (!formik.values.warehouse_id || formik.values.warehouse_id === 0) {
return null;
}
const params = new URLSearchParams({
warehouse_id: formik.values.warehouse_id.toString(),
});
return `${ProductWarehouseApi.basePath}?${params.toString()}`;
}, [formik.values.warehouse_id]);
const { data: productWarehouses, isLoading: isLoadingProductWarehouses } = const { data: productWarehouses, isLoading: isLoadingProductWarehouses } =
useSWR(allProductWarehousesUrl, ProductWarehouseApi.getAllFetcher); useSWR(productWarehousesUrl, ProductWarehouseApi.getAllFetcher);
const getProductWarehouseOptionsForItem = useCallback( const getProductWarehouseOptionsForItem = useCallback(() => {
(warehouseId: number | string) => { if (!isResponseSuccess(productWarehouses)) return [];
if (!isResponseSuccess(productWarehouses)) return [];
const warehouseIdNum = return (
typeof warehouseId === 'string' productWarehouses?.data.map((pw) => ({
? parseInt(warehouseId) || 0 value: pw.id,
: warehouseId; label: pw.product.name,
if (warehouseIdNum === 0) return []; product_id: pw.product.id,
product_warehouse_id: pw.id,
return ( warehouse_id: pw.warehouse.id,
productWarehouses?.data warehouse_name: pw.warehouse.name,
.filter((pw) => pw.warehouse.id === warehouseIdNum) quantity: pw.quantity,
.map((pw) => ({ })) || []
value: pw.product.id, );
label: pw.product.name, }, [productWarehouses]);
product_id: pw.product.id,
warehouse_id: pw.warehouse.id,
warehouse_name: pw.warehouse.name,
quantity: pw.quantity,
})) || []
);
},
[productWarehouses]
);
const productUrl = useMemo(() => { const productUrl = useMemo(() => {
const productIds = const productIds =
@@ -577,9 +579,11 @@ const PurchaseRequisitionsForm = ({
<SelectInput <SelectInput
label='Gudang' label='Gudang'
placeholder={ placeholder={
!formik.values.area_id || !formik.values.location_id !formik.values.area_id
? 'Pilih Area dan Lokasi terlebih dahulu' ? 'Pilih Area terlebih dahulu'
: 'Pilih Gudang...' : formik.values.location_id
? 'Pilih Gudang...'
: 'Pilih Area dan Lokasi terlebih dahulu'
} }
value={formik.values.warehouse} value={formik.values.warehouse}
onChange={(val) => { onChange={(val) => {
@@ -848,9 +852,7 @@ const PurchaseRequisitionsForm = ({
productId productId
); );
}} }}
options={getProductWarehouseOptionsForItem( options={getProductWarehouseOptionsForItem()}
formik.values.warehouse_id
)}
isLoading={isLoadingProductWarehouses} isLoading={isLoadingProductWarehouses}
isError={ isError={
getPurchaseItemError(idx, 'product_warehouse_id') getPurchaseItemError(idx, 'product_warehouse_id')