import theme from "@theme"; import { Button, Paper, Box, Typography, TableHead, TableRow, TableCell, TableBody, Table, Tooltip, Alert } from "@mui/material"; import Input from "@kitUI/input"; import { useCartStore } from "@root/stores/cart"; import { useState } from "react"; import { GridSelectionModel } from "@mui/x-data-grid"; import { testUser } from "@root/stores/mocks/user"; import { useDiscountStore } from "@root/stores/discounts"; import { calcCartData, createCartItem, findDiscountFactor, formatDiscountFactor } from "./calc"; import { useTariffStore } from "@root/stores/tariffs"; import { AnyDiscount, CartItemTotal } from "@root/model/cart"; interface Props { selectedTariffs: GridSelectionModel; } export default function Cart({ selectedTariffs }: Props) { const tariffs = useTariffStore(store => store.tariffs); const discounts = useDiscountStore(store => store.discounts); const cartTotal = useCartStore(state => state.cartTotal); const setCartTotal = useCartStore(store => store.setCartTotal); const [couponField, setCouponField] = useState(""); const [errorMessage, setErrorMessage] = useState(null); // const [coupon, setCoupon] = useState(); const cartRows = cartTotal?.items.map(cartItemTotal => { const service = cartItemTotal.tariff.privilege.serviceKey; const serviceDiscount = cartTotal.discountsByService[service]; const envolvedDiscountsElement = ( {cartItemTotal.envolvedDiscounts.map((discount, index, arr) => ( {index < arr.length - (serviceDiscount ? 0 : 1) && } ))} {serviceDiscount && } ); const totalIncludingServiceDiscount = cartItemTotal.totalPrice * (serviceDiscount?.target.factor || 1); return { id: cartItemTotal.tariff.id, tariffName: cartItemTotal.tariff.name, privilegeDesc: cartItemTotal.tariff.privilege.description, envolvedDiscounts: envolvedDiscountsElement, price: totalIncludingServiceDiscount, }; }); const cartDiscounts = cartTotal?.envolvedCartDiscounts const cartDiscountsResultFactor = cartDiscounts && cartDiscounts.reduce((acc, discount) => acc * findDiscountFactor(discount), 1); const envolvedCartDiscountsElement = cartDiscounts && ( {cartDiscounts?.map((discount, index, arr) => ( {index < arr.length - 1 && } ))}   {cartDiscountsResultFactor && `= ${formatDiscountFactor(cartDiscountsResultFactor)}`} ); function handleCalcCartClick() { const cartTariffs = tariffs.filter(tariff => selectedTariffs.includes(tariff.id)); const cartItems = cartTariffs.map(tariff => createCartItem(tariff)); const cartData = calcCartData(testUser, cartItems, discounts, couponField); if (cartData instanceof Error) { setErrorMessage(cartData.message); return setCartTotal(null); } setErrorMessage(null); setCartTotal(cartData); } return ( корзина setCouponField(e.target.value)} InputProps={{ style: { backgroundColor: theme.palette.content.main, color: theme.palette.secondary.main, } }} InputLabelProps={{ style: { color: theme.palette.secondary.main } }} /> {/* */} {cartTotal?.items && cartTotal.items.length > 0 && <> Имя Описание Скидки стоимость {cartRows?.map(row => ( {row.tariffName} {row.privilegeDesc} {row.envolvedDiscounts} {row.price.toFixed(2)} ₽ ))}
Скидки корзины: {envolvedCartDiscountsElement} ИТОГО: {cartTotal?.totalPrice.toFixed(2)} ₽ } {errorMessage !== null && {errorMessage} }
); } function DiscountTooltip({ discount, cartItemTotal }: { discount: AnyDiscount; cartItemTotal?: CartItemTotal; }) { const discountText = formatDiscountFactor(findDiscountFactor(discount, cartItemTotal?.tariff.privilege.privilegeId)); return ( Скидка: {discount?.name} {discount?.description} ------- layer: {discount?.layer} id: {discount?._id} }> {discountText} ); }