refactor(FE): Exclude selected products from product options

This commit is contained in:
rstubryan
2026-01-23 16:05:59 +07:00
parent 31d9c5e38d
commit df875eda1d
@@ -467,7 +467,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
},
];
formik.setFieldValue('products', newProducts);
}, []);
}, [formik.values.products]);
const removeProduct = useCallback(
(i: number) => {
@@ -476,12 +476,14 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
);
formik.setFieldValue('products', updatedProducts);
setSelectedProducts([]);
if (productQtyErrorShown) {
toast.dismiss();
setProductQtyErrorShown(false);
}
},
[formik.values.products, productQtyErrorShown]
[formik.values.products, productQtyErrorShown, setSelectedProducts]
);
const bulkRemoveProduct = useCallback(() => {
@@ -725,7 +727,20 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
[handleDeliveryCostPerItemChange]
);
// UTILITY FUNCTIONS
const getAvailableProductOptions = useCallback(
(currentIdx: number) => {
const selectedProductIds =
formik.values.products
?.filter((p, idx) => idx !== currentIdx && p.product_id !== 0)
.map((p) => p.product_id) || [];
return productWarehouseOptions.filter(
(pw) => !selectedProductIds.includes(pw.product_id)
);
},
[formik.values.products, productWarehouseOptions]
);
const getFilteredProductWarehouseOptions = useCallback(() => {
return (
formik.values.products
@@ -1468,7 +1483,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
required
value={product.product ?? undefined}
onChange={(val) => handleProductChange(idx, val)}
options={productWarehouseOptions}
options={getAvailableProductOptions(idx)}
onInputChange={setProductWarehouseSelectInputValue}
onMenuScrollToBottom={loadMoreProductWarehouses}
isLoading={isLoadingProductWarehouses}