import { useLocation, useNavigate } from "react-router-dom"; import { makeRequest } from "@frontend/kitui"; import { useEffect, useState } from "react"; import type { GetTariffsResponse } from "@model/tariff"; import { Box, Button, Modal, Paper, Typography, useMediaQuery, useTheme, } from "@mui/material"; import { enqueueSnackbar } from "notistack"; import { Tariff, getMessageFromFetchError } from "@frontend/kitui"; import { withErrorBoundary } from "react-error-boundary"; import { createTariffElements } from "./tariffsUtils/createTariffElements"; function TariffPage() { const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const location = useLocation(); const navigate = useNavigate(); const [tariffs, setTariffs] = useState(); const [user, setUser] = useState(); const [discounts, setDiscounts] = useState(); const [cartTariffMap, setCartTariffMap] = useState(); const [openModal, setOpenModal] = useState({}); useEffect(() => { const get = async () => { const user = await makeRequest({ method: "GET", url: "https://squiz.pena.digital/customer/account", }); const tariffs = await makeRequest({ method: "GET", url: "https://squiz.pena.digital/strator/tariff?page=1&limit=100", }); const discounts = await makeRequest({ method: "GET", url: "https://squiz.pena.digital/price/discounts", }); setUser(user); setTariffs(tariffs); setDiscounts(discounts.Discounts); }; get(); }, []); if (!user || !tariffs || !discounts) return ; console.log("user ", user); console.log("tariffs ", tariffs); console.log("discounts ", discounts); const openModalHC = (tariffInfo: any) => setOpenModal(tariffInfo); const tryBuy = async ({ id, price }: { id: string; price: number }) => { openModalHC({}); //Если в корзине что-то было - выкладываем содержимое и запоминаем чо там лежало if (user.cart.length > 0) { outCart(user.cart); } //Добавляем желаемый тариф в корзину await makeRequest({ method: "PATCH", url: `https://hub.pena.digital/customer/cart?id=${id}`, }); //Если нам хватает денежек - покупаем тариф if (price <= user.wallet.cash) { try { await makeRequest({ method: "POST", url: "https://suiz.pena.digital/customer/cart/pay", }); } catch (e) { enqueueSnackbar("Произошла ошибка. Попробуйте позже"); } //Развращаем товары в корзину inCart(); } else { //Деняк не хватило // history.pushState({}, null, "https://hub.pena.digital/wallet?action=squizpay"); var link = document.createElement("a"); link.href = `https://hub.pena.digital/payment?action=squizpay&dif=${ (price - Number(user.wallet.cash)) * 100 }`; document.body.appendChild(link); // link.click(); } }; const purchasesAmount = user?.wallet.purchasesAmount ?? 0; const isUserNko = user?.status === "nko"; const filteredTariffs = tariffs.tariffs.filter((tariff) => { return ( tariff.privileges[0].serviceKey === "squiz" && !tariff.isDeleted && !tariff.isCustom ); }); return ( <> {createTariffElements( filteredTariffs, true, user, discounts, openModalHC, )} 0} onClose={() => setOpenModal({})} > Вы подтверждаете платёж в сумму {openModal.price} ₽ ); } export const Tariffs = withErrorBoundary(TariffPage, { fallback: ( Ошибка загрузки тарифов ), onError: () => {}, }); const LoadingPage = () => ( {"Подождите, пожалуйста, идёт загрузка :)"} ); export const inCart = () => { let saveCart = JSON.parse(localStorage.getItem("saveCart") || "[]"); saveCart.forEach(async (id: string) => { try { await makeRequest({ method: "PATCH", url: `https://hub.pena.digital/customer/cart?id=${id}`, }); let index = saveCart.indexOf("green"); if (index !== -1) { saveCart.splice(index, 1); } localStorage.setItem("saveCart", JSON.stringify(saveCart)); } catch (e) { console.log("Я не смог добавить тариф в корзину :( " + id); } }); }; const outCart = (cart: string[]) => { //Сделаем муторно и подольше, зато при прерывании сессии данные потеряются минимально cart.forEach(async (id: string) => { try { await makeRequest({ method: "DELETE", url: `https://suiz.pena.digital/customer/cart?id=${id}`, }); let saveCart = JSON.parse(localStorage.getItem("saveCart") || "[]"); saveCart = saveCart.push(id); localStorage.setItem("saveCart", JSON.stringify(saveCart)); } catch (e) { console.log("Я не смог удалить из корзины тариф :("); } }); };