mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +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 =====
|
||||
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')
|
||||
|
||||
Reference in New Issue
Block a user