Android_Retail/src/Pages/BookingScreen/Components/BSBillingTables/BSBillingTable3/RemoveCartWithOffer.jsx

87 lines
2.9 KiB
JavaScript

import { useDispatch, useSelector, shallowEqual } from 'react-redux';
import {
ChangeFullFreeProductList,
changeFullOfferAppliedProducts,
ChangeOfferAppliedProducts,
GlobalFreeProdList, GlobalOfferAppliedProducts
} from '../../../../../Features/Offer/Offernew/BookingOffernew.js';
export const useRemoveProducts = () => {
const dispatch = useDispatch();
const OfferFreeProduct = useSelector(GlobalFreeProdList, shallowEqual);
const OfferAppliedProducts = useSelector(GlobalOfferAppliedProducts, shallowEqual);
const removeProducts = (item) => {
let offers = updateOfferOnRemove(OfferFreeProduct, {
type: item?.Offer > 0 ? "FREE" : "BUY",
prodId: item?.ProdId,
inwardDtlId: item?.InwardDtlId,
qtyToRemove: item?.OrderQty
});
dispatch(ChangeFullFreeProductList(offers));
if (item?.Offer > 0) {
const RemoveOffer = removeOffer(OfferAppliedProducts, item?.ProdId, item?.InwardDtlId)
dispatch(changeFullOfferAppliedProducts(RemoveOffer));
}
};
return removeProducts;
};
// pure helper function (kept outside hook)
function updateOfferOnRemove(offers, { type, prodId, inwardDtlId, qtyToRemove = 1 }) {
if (type === "BUY") {
return offers.filter(offer => offer.BuyInwardDtlId !== inwardDtlId);
}
if (type === "FREE") {
return offers.map(offer => {
if (offer.FreeProdId === prodId) {
return {
...offer,
ProdVariantDetails: offer.ProdVariantDetails?.map(variant => ({
...variant,
StockDetails: variant.StockDetails?.map(stock => {
if (stock.InwardDtlId === inwardDtlId) {
return {
...stock,
UsedFree: Math.max(0, stock.UsedFree - qtyToRemove),
RemainingFree: (stock.RemainingFree || 0) + qtyToRemove
};
}
return stock;
})
})),
UsedFreeQty: Math.max(0, (offer.UsedFreeQty || 0) - qtyToRemove),
RemainingQty: (offer.RemainingQty || 0) + qtyToRemove
};
}
return offer;
});
}
return offers;
}
function removeOffer(OfferAppliedProducts, freeProdId, inwardDtlId) {
return OfferAppliedProducts.filter((offer) => {
const hasMatch = offer?.FreeProductsList?.FreeProdId === freeProdId && offer?.FreeProductsList.ProdVariantDetails?.some((variant) =>
variant.StockDetails?.some(
(stock) => stock.FreeInwardDtlId === inwardDtlId
)
)
return !hasMatch;
});
}