front-hub/src/components/Menu.tsx

132 lines
3.1 KiB
TypeScript
Raw Normal View History

2023-11-05 23:33:40 +00:00
import { useState } from "react"
import { Box, Typography, useTheme } from "@mui/material"
import { Link, useLocation } from "react-router-dom"
2023-03-27 12:45:44 +00:00
2023-07-25 22:31:04 +00:00
type MenuItem = {
name: string;
url: string;
subMenu?: MenuItem[];
};
2023-03-27 12:45:44 +00:00
export default function Menu() {
2023-11-05 23:33:40 +00:00
const [activeSubMenu, setActiveSubMenu] = useState<MenuItem[]>([])
const theme = useTheme()
const location = useLocation()
2023-03-27 12:45:44 +00:00
2023-11-05 23:33:40 +00:00
const color = location.pathname === "/" ? "white" : "black"
2023-03-27 12:45:44 +00:00
2023-11-05 23:33:40 +00:00
const arrayMenu: MenuItem[] = location.pathname === "/" ? [
{ name: "Наши продукты", url: "/faq" },
{ name: "Наши услуги", url: "/cart" }
] : [
{
name: "Тарифы",
url: "/tariffs",
subMenu: [
{ name: "Тарифы на время", url: "/tariffs/time" },
{ name: "Тарифы на объём", url: "/tariffs/volume" },
{ name: "Кастомный тариф", url: "/tariffconstructor" },
],
},
{ name: "Вопросы и ответы", url: "/faq" },
{ name: "Корзина", url: "/cart" },
{ name: "Поддержка", url: "/support" },
{ name: "История", url: "/history" },
]
2023-03-27 12:45:44 +00:00
2023-10-27 23:13:54 +00:00
2023-11-05 23:33:40 +00:00
return (
<Box
sx={{
display: "flex",
alignItems: "center",
height: "100%",
gap: "30px",
overflow: "hidden",
overflowX: "auto",
}}
>
{location.pathname !== "/"
? arrayMenu.map(({ name, url, subMenu = [] }) => (
<Link
key={name}
style={{
textDecoration: "none",
height: "100%",
display: "flex",
alignItems: "center",
}}
to={url}
onMouseEnter={() => setActiveSubMenu(subMenu)}
state={{ previousUrl: location.pathname }}
>
<Typography
color={
location.pathname === url
? theme.palette.purple.main
: color
}
variant="body2"
sx={{
whiteSpace: "nowrap",
}}
>
{name}
</Typography>
</Link>
))
: arrayMenu.map(({ name, url, subMenu = [] }, index) => (
<Typography
color={
location.pathname === url
? theme.palette.purple.main
: color
}
variant="body2"
sx={{
whiteSpace: "nowrap",
}}
>
{name}
</Typography>
))}
<Box
sx={{
zIndex: "10",
position: "absolute",
top: "80px",
left: 0,
backgroundColor: theme.palette.background.paper,
width: "100%",
}}
onMouseLeave={() => setActiveSubMenu([])}
>
{location.pathname !== "/" &&
2023-08-08 15:47:02 +00:00
activeSubMenu.map(({ name, url }) => (
2023-11-05 23:33:40 +00:00
<Link key={name} style={{ textDecoration: "none" }} to={url}>
<Typography
color={
location.pathname === url
? theme.palette.purple.main
: color
}
variant="body2"
sx={{
padding: "15px",
whiteSpace: "nowrap",
paddingLeft: "185px",
"&:hover": {
color: theme.palette.purple.main,
background: theme.palette.background.default,
},
}}
>
{name}
</Typography>
</Link>
2023-08-08 15:47:02 +00:00
))}
2023-11-05 23:33:40 +00:00
</Box>
</Box>
)
2023-03-27 12:45:44 +00:00
}