From 8db9d1a52c45c87d595ef5f9b11de34cdd74125b Mon Sep 17 00:00:00 2001 From: rstubryan Date: Sat, 8 Nov 2025 10:53:29 +0700 Subject: [PATCH] refactor(FE-212): update product warehouse fetching logic and options mapping in PurchaseRequisitionsForm --- .../form/request/PurchaseRequisitionsForm.tsx | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/components/pages/purchase/form/request/PurchaseRequisitionsForm.tsx b/src/components/pages/purchase/form/request/PurchaseRequisitionsForm.tsx index 6943f8b6..9a67e631 100644 --- a/src/components/pages/purchase/form/request/PurchaseRequisitionsForm.tsx +++ b/src/components/pages/purchase/form/request/PurchaseRequisitionsForm.tsx @@ -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 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 } = - useSWR(allProductWarehousesUrl, ProductWarehouseApi.getAllFetcher); + useSWR(productWarehousesUrl, ProductWarehouseApi.getAllFetcher); - const getProductWarehouseOptionsForItem = useCallback( - (warehouseId: number | string) => { - if (!isResponseSuccess(productWarehouses)) return []; + 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, - label: pw.product.name, - product_id: pw.product.id, - warehouse_id: pw.warehouse.id, - warehouse_name: pw.warehouse.name, - quantity: pw.quantity, - })) || [] - ); - }, - [productWarehouses] - ); + return ( + 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]); const productUrl = useMemo(() => { const productIds = @@ -577,9 +579,11 @@ const PurchaseRequisitionsForm = ({ { @@ -848,9 +852,7 @@ const PurchaseRequisitionsForm = ({ productId ); }} - options={getProductWarehouseOptionsForItem( - formik.values.warehouse_id - )} + options={getProductWarehouseOptionsForItem()} isLoading={isLoadingProductWarehouses} isError={ getPurchaseItemError(idx, 'product_warehouse_id')