import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { enqueueSnackbar } from "notistack"; import { Alert, Box, Button, Badge, Typography, useMediaQuery, useTheme } from "@mui/material"; import { Loader } from "./Loader"; import { currencyFormatter } from "@root/utils/currencyFormatter"; import { payCart } from "@root/api/cart"; import { setUserAccount } from "@root/stores/user"; import { setNotEnoughMoneyAmount, useCartStore } from "@root/stores/cart"; interface Props { priceBeforeDiscounts: number; priceAfterDiscounts: number; isConstructor?: boolean; } export default function TotalPrice({ priceAfterDiscounts, priceBeforeDiscounts, isConstructor = false }: Props) { const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); const notEnoughMoneyAmount = useCartStore(state => state.notEnoughMoneyAmount); const [loading, setLoading] = useState(false); const navigate = useNavigate(); console.log("TOTALPRICE", priceAfterDiscounts) async function handlePayClick() { setLoading(true); const [payCartResponse, payCartError] = await payCart(); if (payCartError) { if (payCartError.includes("insufficient funds: ")) { const notEnoughMoneyAmount = parseInt(payCartError.replace(/^.*insufficient\sfunds:\s(?=\d+$)/, "")); console.log(notEnoughMoneyAmount); setNotEnoughMoneyAmount(notEnoughMoneyAmount); } setLoading(false); if (!payCartError.includes("insufficient funds: ")) enqueueSnackbar(payCartError); return } if (payCartResponse) { setUserAccount(payCartResponse); } setLoading(false); } function handleReplenishWallet() { navigate("/payment", { state: { notEnoughMoneyAmount } }); } return ( Итоговая цена {!isConstructor && <> Здесь написана окончательная стоимость всех услуг сложенных в корзину с учётом всех скидок. После нажатия кнопки оплатить, вы будете перенаправлены на форму оплаты, для оплаты ВСЕЙ корзины (рекомендуем перед оплатой, убрать все лишнее) } - {`${((priceBeforeDiscounts - priceAfterDiscounts) / (priceBeforeDiscounts / 100)).toFixed(0)}%`} ) : null } color="success" sx={{ "& .MuiBadge-dot": { backgroundColor: "#ff4904", width: "10px", height: "10px", }, "& .MuiBadge-anchorOriginTopRightRectangle": { backgroundColor: "#ff4904", top: "5px", right: "5px", }, "& .MuiBadge-anchorOriginTopRightRectangular": { backgroundColor: "#ff4904", height: "31px", padding: "5px 10px", right: "0px", top: upMd ? 0 : "17px", }, }} > {currencyFormatter.format(priceBeforeDiscounts / 100)} {currencyFormatter.format(Math.trunc(priceAfterDiscounts) / 100)} {notEnoughMoneyAmount > 0 && ( Не хватает {currencyFormatter.format(Math.trunc(notEnoughMoneyAmount) / 100)} )} ); }