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 =====
interface ProductWarehouseOptionType extends OptionType {
product_id: number;
product_warehouse_id: number;
warehouse_id: number;
warehouse_name: string;
quantity: number;
@@ -233,35 +234,36 @@ const PurchaseRequisitionsForm = ({
});
// ===== API DATA FETCHING =====
const allProductWarehousesUrl = `${ProductWarehouseApi.basePath}`;
const { data: productWarehouses, isLoading: isLoadingProductWarehouses } =
useSWR(allProductWarehousesUrl, ProductWarehouseApi.getAllFetcher);
const productWarehousesUrl = useMemo(() => {
if (!formik.values.warehouse_id || formik.values.warehouse_id === 0) {
return null;
}
const getProductWarehouseOptionsForItem = useCallback(
(warehouseId: number | string) => {
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 } =
useSWR(productWarehousesUrl, ProductWarehouseApi.getAllFetcher);
const getProductWarehouseOptionsForItem = useCallback(() => {
if (!isResponseSuccess(productWarehouses)) return [];
const warehouseIdNum =
typeof warehouseId === 'string'
? parseInt(warehouseId) || 0
: warehouseId;
if (warehouseIdNum === 0) return [];
return (
productWarehouses?.data
.filter((pw) => pw.warehouse.id === warehouseIdNum)
.map((pw) => ({
value: pw.product.id,
productWarehouses?.data.map((pw) => ({
value: pw.id,
label: pw.product.name,
product_id: pw.product.id,
product_warehouse_id: pw.id,
warehouse_id: pw.warehouse.id,
warehouse_name: pw.warehouse.name,
quantity: pw.quantity,
})) || []
);
},
[productWarehouses]
);
}, [productWarehouses]);
const productUrl = useMemo(() => {
const productIds =
@@ -577,9 +579,11 @@ const PurchaseRequisitionsForm = ({
<SelectInput
label='Gudang'
placeholder={
!formik.values.area_id || !formik.values.location_id
? 'Pilih Area dan Lokasi terlebih dahulu'
: 'Pilih Gudang...'
!formik.values.area_id
? 'Pilih Area terlebih dahulu'
: formik.values.location_id
? 'Pilih Gudang...'
: 'Pilih Area dan Lokasi terlebih dahulu'
}
value={formik.values.warehouse}
onChange={(val) => {
@@ -848,9 +852,7 @@ const PurchaseRequisitionsForm = ({
productId
);
}}
options={getProductWarehouseOptionsForItem(
formik.values.warehouse_id
)}
options={getProductWarehouseOptionsForItem()}
isLoading={isLoadingProductWarehouses}
isError={
getPurchaseItemError(idx, 'product_warehouse_id')