mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-25 15:55:48 +00:00
refactor(FE-212): update product warehouse fetching logic and options mapping in PurchaseRequisitionsForm
This commit is contained in:
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user