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.setFieldValue('products', newProducts);
}, []); }, [formik.values.products]);
const removeProduct = useCallback( const removeProduct = useCallback(
(i: number) => { (i: number) => {
@@ -476,12 +476,14 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
); );
formik.setFieldValue('products', updatedProducts); formik.setFieldValue('products', updatedProducts);
setSelectedProducts([]);
if (productQtyErrorShown) { if (productQtyErrorShown) {
toast.dismiss(); toast.dismiss();
setProductQtyErrorShown(false); setProductQtyErrorShown(false);
} }
}, },
[formik.values.products, productQtyErrorShown] [formik.values.products, productQtyErrorShown, setSelectedProducts]
); );
const bulkRemoveProduct = useCallback(() => { const bulkRemoveProduct = useCallback(() => {
@@ -725,7 +727,20 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
[handleDeliveryCostPerItemChange] [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(() => { const getFilteredProductWarehouseOptions = useCallback(() => {
return ( return (
formik.values.products formik.values.products
@@ -1468,7 +1483,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
required required
value={product.product ?? undefined} value={product.product ?? undefined}
onChange={(val) => handleProductChange(idx, val)} onChange={(val) => handleProductChange(idx, val)}
options={productWarehouseOptions} options={getAvailableProductOptions(idx)}
onInputChange={setProductWarehouseSelectInputValue} onInputChange={setProductWarehouseSelectInputValue}
onMenuScrollToBottom={loadMoreProductWarehouses} onMenuScrollToBottom={loadMoreProductWarehouses}
isLoading={isLoadingProductWarehouses} isLoading={isLoadingProductWarehouses}