Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 12x 12x 12x | import { ICartItem, useCart } from "@sections/PayBuilder/provider/CartContext";
import { getClosestRenewalDate } from "@sections/PayBuilder/components/InvoicePreview/utils";
import { parseAmount } from "@utils/index";
import { usePayBuilderForm } from "@sections/PayBuilder/provider/PayBuilderFormProvider";
import { checkPortals } from "@utils/routing";
import useCheckFormType from "../hooks/useCheckFormType";
const parseStringAmount = (value?: any) =>
parseFloat((value || "").replace(/,/g, "")) || 0;
const useMockedCart = ({ onlyFirst = false }: { onlyFirst?: boolean } = {}) => {
const { methods } = usePayBuilderForm();
const values = methods.getValues();
const { cartItems, subTotal, feesTotal } = values.Items.reduce<{
cartItems: ICartItem[];
subTotal: number;
feesTotal: number;
}>(
(acc, item, index) => {
if (!item.display) return acc;
const unitPrice = parseStringAmount(item.amount);
const signupFee = parseStringAmount(item.signupFee);
const cartItem: ICartItem = {
...item,
quantity: index === 0 ? 1 : onlyFirst ? 0 : 1,
productVariantName: item.title,
productVariantID: item.variantID || 0,
productVariantPrice: unitPrice,
unitPrice: unitPrice.toFixed(2),
productVariantImageURL: item.thumbnail || "",
recurringIntervalName: item.paymentType,
};
acc.cartItems.push(cartItem);
if (cartItem.quantity > 0) {
acc.subTotal += unitPrice;
acc.feesTotal += signupFee;
}
return acc;
},
{ cartItems: [], subTotal: 0, feesTotal: 0 },
);
const parsedSubTotal = parseAmount(subTotal);
const parsedFeesTotal = parseAmount(feesTotal);
return {
cartItems,
subTotal: parsedSubTotal,
feesTotal: parsedFeesTotal,
};
};
const usePreviewCart = (mockProps: { onlyFirst?: boolean } = {}) => {
const { data } = usePayBuilderForm();
const { isPayBuilder } = checkPortals();
const { isMembership } = useCheckFormType();
const mockedCart = useMockedCart(mockProps);
const realCart = useCart();
const cart = isPayBuilder && !isMembership ? realCart : mockedCart;
const cartItems = cart.cartItems;
const invoiceDate = data?.createdAt * 1000 || new Date();
const renewalDate = getClosestRenewalDate(cartItems, invoiceDate);
const feesTotal = (cart as any).feesTotal ?? "0.00";
return {
...cart,
feesTotal,
renewalDate,
};
};
export default usePreviewCart;
|