import { Box, IconButton, Typography, useMediaQuery, useTheme } from "@mui/material"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import CustomButton from "@components/CustomButton"; import SectionWrapper from "@components/SectionWrapper"; import PaymentMethodCard from "./PaymentMethodCard"; import mastercardLogo from "../../assets/bank-logo/logo-mastercard.png"; import visaLogo from "../../assets/bank-logo/logo-visa.png"; import qiwiLogo from "../../assets/bank-logo/logo-qiwi.png"; import mirLogo from "../../assets/bank-logo/logo-mir.png"; import tinkoffLogo from "../../assets/bank-logo/logo-tinkoff.png"; import { cardShadow } from "@root/utils/themes/shadow"; import { useEffect, useState } from "react"; import InputTextfield from "@root/components/InputTextfield"; import { sendPayment } from "@root/api/wallet"; import { getMessageFromFetchError } from "@frontend/kitui"; import { enqueueSnackbar } from "notistack"; import { currencyFormatter } from "@root/utils/currencyFormatter"; import { useLocation } from "react-router-dom"; import { useHistoryTracker } from "@root/utils/hooks/useHistoryTracker"; const paymentMethods = [ { name: "Mastercard", image: mastercardLogo }, { name: "Visa", image: visaLogo }, { name: "QIWI Кошелек", image: qiwiLogo }, { name: "Мир", image: mirLogo }, { name: "Тинькофф", image: tinkoffLogo }, ] as const; type PaymentMethod = (typeof paymentMethods)[number]["name"]; export default function Payment() { const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); const upSm = useMediaQuery(theme.breakpoints.up("sm")); const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null); const [paymentValueField, setPaymentValueField] = useState("0"); const [paymentLink, setPaymentLink] = useState(""); const location = useLocation(); const notEnoughMoneyAmount = (location.state?.notEnoughMoneyAmount as number) ?? 0; useEffect(() => { setPaymentValueField((notEnoughMoneyAmount / 100).toString()); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { setPaymentLink(""); }, [selectedPaymentMethod]); const paymentValue = parseFloat(paymentValueField) * 100; function handleChoosePaymentClick() { if (Number(paymentValueField) !== 0) { sendPayment() .then((result) => { setPaymentLink(result.link); }) .catch((error) => { const message = getMessageFromFetchError(error); if (message) enqueueSnackbar(message); }); } } const handleCustomBackNavigation = useHistoryTracker(); return ( {!upMd && ( )} Способ оплаты {!upMd && ( Выберите способ оплаты )} {paymentMethods.map((method) => ( setSelectedPaymentMethod(method.name)} /> ))} {upMd && Выберите способ оплаты} К оплате {paymentLink ? ( {currencyFormatter.format(paymentValue / 100)} ) : ( setPaymentValueField(e.target.value)} id="payment-amount" gap={upMd ? "16px" : "10px"} color={"#F2F3F7"} FormInputSx={{ mb: "28px" }} /> )} {paymentLink ? ( Оплатить ) : ( Выбрать )} ); }