import { useState } from "react"; import { Link, useLocation, useNavigate } from "react-router-dom"; import { Box, Button, List, ListItem, Typography, useMediaQuery, useTheme, } from "@mui/material"; import { clearUserData, useUserStore } from "@root/stores/user"; import { currencyFormatter } from "@root/utils/currencyFormatter"; import { cardShadow } from "@root/utils/theme"; import { AvatarButton, clearAuthToken } from "@frontend/kitui"; import { logout } from "@root/api/auth"; import { enqueueSnackbar } from "notistack"; import { clearCustomTariffs } from "@root/stores/customTariffs"; import { clearTickets } from "@root/stores/tickets"; import {setNotEnoughMoneyAmount} from "@stores/allTypesOfPurchases" type MenuItem = { name: string; url: string; subMenu?: MenuItem[]; }; const arrayMenu: MenuItem[] = [ { name: "Тарифы", url: "/tariffs", subMenu: [ { name: "Тарифы на время", url: "/tariffs/time" }, { name: "Тарифы на объём", url: "/tariffs/volume" }, { name: "Мой тариф", url: "/tariffconstructor" }, ], }, { name: "Профиль", url: "/settings" }, { name: "FAQ", url: "/faq" }, { name: "Корзина", url: "/cart" }, { name: "Поддержка", url: "/support" }, { name: "История", url: "/history" }, { name: "Мой кошелёк", url: "/wallet" }, ]; interface DialogMenuProps { handleClose: () => void; } export default function DialogMenu({ handleClose }: DialogMenuProps) { const [activeSubMenuIndex, setActiveSubMenuIndex] = useState(-1); const theme = useTheme(); const location = useLocation(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isMobile = useMediaQuery(theme.breakpoints.down(600)); const isMobileHeader = useMediaQuery(theme.breakpoints.down(550)); const user = useUserStore((state) => state.user); const cash = useUserStore((state) => state.userAccount?.wallet.cash) ?? 0; const initials = useUserStore((state) => state.initials); const navigate = useNavigate(); const closeDialogMenu = () => { setActiveSubMenuIndex(-1); handleClose(); }; async function handleLogoutClick() { clearAuthToken(); clearUserData(); clearCustomTariffs(); clearTickets(); setNotEnoughMoneyAmount(0) navigate("/"); const [_, logoutError] = await logout(); if (logoutError) { return enqueueSnackbar(logoutError); } } const handleSubMenu = (index: number) => setActiveSubMenuIndex((activeIndex) => activeIndex !== index ? index : -1 ); return ( {arrayMenu.map(({ name, url, subMenu = [] }, index) => ( {subMenu.length ? ( {index === activeSubMenuIndex && subMenu.map(({ name, url }) => ( {name} ))} ) : ( <> )} ))} {isMobileHeader && ( )} {location.pathname === "/" ? ( ) : isMobileHeader ? ( {initials} Мой баланс {currencyFormatter.format(cash / 100)} ) : null} ); }