import { useCallback, useState } from "react"; import { useLocation } from "react-router-dom"; import { Box, Tabs, Typography, useMediaQuery, useTheme } from "@mui/material"; import SectionWrapper from "@components/SectionWrapper"; import ComplexNavText from "@root/components/ComplexNavText"; import { useTariffs } from "@root/utils/hooks/useTariffs"; import { setTariffs, useTariffStore } from "@root/stores/tariffs"; import { enqueueSnackbar } from "notistack"; import { getMessageFromFetchError } from "@root/utils/backendMessageHandler"; import { CustomTab } from "@root/components/CustomTab"; import TariffCard from "./TariffCard"; import NumberIcon from "@root/components/NumberIcon"; import { currencyFormatter } from "@root/utils/currencyFormatter"; import { calcTariffPrices } from "@root/utils/calcTariffPrices"; export default function TariffPage() { const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); const location = useLocation(); const tariffs = useTariffStore(state => state.tariffs); const [tabIndex, setTabIndex] = useState(0); const unit: string = String(location.pathname).slice(9); const StepperText: Record = { volume: "Тарифы на объём", time: "Тарифы на время" }; useTariffs({ url: "https://admin.pena.digital/strator/tariff", apiPage: 0, tariffsPerPage: 100, onNewTariffs: setTariffs, onError: useCallback(error => { const errorMessage = getMessageFromFetchError(error); if (errorMessage) enqueueSnackbar(errorMessage); }, []) }); const filteredTariffs = tariffs.filter(tariff => { return tariff.privilegies.map(p => p.type).includes("day") === (unit === "time"); }); return ( {upMd && } {StepperText[unit]} setTabIndex(newValue)} variant="scrollable" scrollButtons={false} > {filteredTariffs.map((tariff, index) => { const { price, priceWithDiscounts } = calcTariffPrices(tariff); return ( } buttonText="Выбрать" headerText={tariff.name} text={tariff.privilegies.map(p => `${p.name} - ${p.amount}`)} onButtonClick={undefined} price={<> {price !== undefined && price !== priceWithDiscounts && {currencyFormatter.format(price)} } {priceWithDiscounts !== undefined && {currencyFormatter.format(priceWithDiscounts)} } } /> ); })} } buttonText="Выбрать" headerText="бесплатно" text="Текст-заполнитель — это текст, который имеет " onButtonClick={undefined} price={0 руб.} sx={{ backgroundColor: "#7E2AEA", color: "white", }} buttonSx={{ color: "white", borderColor: "white", }} /> ); }