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(() => {
const { data: productWarehouses, isLoading: isLoadingProductWarehouses } = if (!formik.values.warehouse_id || formik.values.warehouse_id === 0) {
useSWR(allProductWarehousesUrl, ProductWarehouseApi.getAllFetcher); return null;
}
const getProductWarehouseOptionsForItem = useCallback( const params = new URLSearchParams({
(warehouseId: number | string) => { 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 []; if (!isResponseSuccess(productWarehouses)) return [];
const warehouseIdNum =
typeof warehouseId === 'string'
? parseInt(warehouseId) || 0
: warehouseId;
if (warehouseIdNum === 0) return [];
return ( return (
productWarehouses?.data productWarehouses?.data.map((pw) => ({
.filter((pw) => pw.warehouse.id === warehouseIdNum) value: pw.id,
.map((pw) => ({
value: pw.product.id,
label: pw.product.name, label: pw.product.name,
product_id: pw.product.id, product_id: pw.product.id,
product_warehouse_id: pw.id,
warehouse_id: pw.warehouse.id, warehouse_id: pw.warehouse.id,
warehouse_name: pw.warehouse.name, warehouse_name: pw.warehouse.name,
quantity: pw.quantity, quantity: pw.quantity,
})) || [] })) || []
); );
}, }, [productWarehouses]);
[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')