2023-06-16 20:09:56 +00:00
|
|
|
|
import { useCallback, useState } from "react";
|
2023-03-23 12:03:08 +00:00
|
|
|
|
import { useLocation } from "react-router-dom";
|
2023-06-16 20:09:56 +00:00
|
|
|
|
import { Box, Tabs, Typography, useMediaQuery, useTheme } from "@mui/material";
|
2023-03-23 12:03:08 +00:00
|
|
|
|
import SectionWrapper from "@components/SectionWrapper";
|
2023-06-16 20:09:56 +00:00
|
|
|
|
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";
|
|
|
|
|
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
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<number>(0);
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
const unit: string = String(location.pathname).slice(9);
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
const StepperText: Record<string, string> = { volume: "Тарифы на объём", time: "Тарифы на время" };
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
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);
|
|
|
|
|
}, [])
|
|
|
|
|
});
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
const filteredTariffs = tariffs.filter(tariff => {
|
|
|
|
|
return tariff.privilegies.map(p => p.type).includes("day") === (unit === "time");
|
|
|
|
|
});
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
return (
|
|
|
|
|
<SectionWrapper
|
|
|
|
|
maxWidth="lg"
|
|
|
|
|
sx={{
|
|
|
|
|
mt: "20px",
|
|
|
|
|
mb: upMd ? "90px" : "63px",
|
|
|
|
|
display: "flex",
|
|
|
|
|
flexDirection: "column",
|
2023-03-23 12:03:08 +00:00
|
|
|
|
}}
|
2023-06-16 20:09:56 +00:00
|
|
|
|
>
|
|
|
|
|
{upMd && <ComplexNavText text1="Все тарифы — " text2={StepperText[unit]} />}
|
|
|
|
|
<Typography variant="h4" sx={{ marginBottom: "23px", mt: "20px" }}>
|
|
|
|
|
{StepperText[unit]}
|
|
|
|
|
</Typography>
|
|
|
|
|
<Tabs
|
|
|
|
|
TabIndicatorProps={{ sx: { display: "none" } }}
|
|
|
|
|
value={tabIndex}
|
|
|
|
|
onChange={(event, newValue) => setTabIndex(newValue)}
|
|
|
|
|
variant="scrollable"
|
|
|
|
|
scrollButtons={false}
|
|
|
|
|
>
|
|
|
|
|
<CustomTab value={0} label="Шаблонизатор" />
|
|
|
|
|
<CustomTab value={1} label="Опросник" />
|
|
|
|
|
<CustomTab value={2} label="Сокращатель ссылок" />
|
|
|
|
|
</Tabs>
|
|
|
|
|
<Box sx={{
|
|
|
|
|
width: upMd ? "100%" : undefined,
|
|
|
|
|
mt: "40px",
|
|
|
|
|
mb: "30px",
|
|
|
|
|
display: "flex",
|
|
|
|
|
gap: "40px",
|
|
|
|
|
alignSelf: "center",
|
|
|
|
|
flexWrap: "wrap",
|
|
|
|
|
}}>
|
|
|
|
|
{filteredTariffs.map((tariff, index) => {
|
|
|
|
|
const { price, priceWithDiscounts } = calcTariffPrices(tariff);
|
2023-03-23 12:03:08 +00:00
|
|
|
|
|
2023-06-16 20:09:56 +00:00
|
|
|
|
return (
|
|
|
|
|
<TariffCard
|
|
|
|
|
key={tariff._id}
|
|
|
|
|
icon={<NumberIcon
|
|
|
|
|
number={(index + 1) % 10}
|
|
|
|
|
color={unit === "time" ? "#7E2AEA" : "#FB5607"}
|
|
|
|
|
backgroundColor={unit === "time" ? "#EEE4FC" : "#FEDFD0"}
|
|
|
|
|
/>}
|
|
|
|
|
buttonText="Выбрать"
|
|
|
|
|
headerText={tariff.name}
|
|
|
|
|
text={tariff.privilegies.map(p => `${p.name} - ${p.amount}`)}
|
|
|
|
|
onButtonClick={undefined}
|
|
|
|
|
price={<>
|
|
|
|
|
{price !== undefined && price !== priceWithDiscounts &&
|
|
|
|
|
<Typography variant="oldPrice">{currencyFormatter.format(price)}</Typography>
|
|
|
|
|
}
|
|
|
|
|
{priceWithDiscounts !== undefined &&
|
|
|
|
|
<Typography variant="price">{currencyFormatter.format(priceWithDiscounts)}</Typography>
|
|
|
|
|
}
|
|
|
|
|
</>}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
})}
|
|
|
|
|
<TariffCard
|
|
|
|
|
icon={<NumberIcon
|
|
|
|
|
number={0}
|
|
|
|
|
color="#7E2AEA"
|
|
|
|
|
backgroundColor="white"
|
|
|
|
|
/>}
|
|
|
|
|
buttonText="Выбрать"
|
|
|
|
|
headerText="бесплатно"
|
|
|
|
|
text="Текст-заполнитель — это текст, который имеет "
|
|
|
|
|
onButtonClick={undefined}
|
|
|
|
|
price={<Typography variant="price" color="white">0 руб.</Typography>}
|
|
|
|
|
sx={{
|
|
|
|
|
backgroundColor: "#7E2AEA",
|
|
|
|
|
color: "white",
|
|
|
|
|
}}
|
|
|
|
|
buttonSx={{
|
|
|
|
|
color: "white",
|
|
|
|
|
borderColor: "white",
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</Box>
|
|
|
|
|
</SectionWrapper>
|
|
|
|
|
);
|
2023-06-01 13:42:38 +00:00
|
|
|
|
}
|