front-hub/src/components/Menu.tsx

132 lines
3.7 KiB
TypeScript
Raw Normal View History

2023-07-25 22:31:04 +00:00
import { useState } from "react";
2023-03-27 12:45:44 +00:00
import { Box, Typography, useTheme } from "@mui/material";
import { Link, useLocation } from "react-router-dom";
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-07-25 22:31:04 +00:00
const [activeSubMenu, setActiveSubMenu] = useState<MenuItem[]>([]);
2023-03-27 12:45:44 +00:00
const theme = useTheme();
const location = useLocation();
const color = location.pathname === "/" ? "white" : "black";
2023-10-27 23:13:54 +00:00
const arrayMenu: MenuItem[] = location.pathname === "/" ? [
{ name: "Наши продукты", url: "/faq" },
{ name: "Наши услуги", url: "/cart" }
2023-10-27 23:13:54 +00:00
] : [
{
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-03-27 12:45:44 +00:00
return (
<Box
sx={{
display: "flex",
2023-07-25 22:31:04 +00:00
alignItems: "center",
height: "100%",
2023-03-27 12:45:44 +00:00
gap: "30px",
overflow: "hidden",
2023-08-23 09:27:57 +00:00
overflowX: "auto",
2023-03-27 12:45:44 +00:00
}}
>
2023-08-08 15:47:02 +00:00
{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
2023-08-08 15:47:02 +00:00
: color
}
variant="body2"
sx={{
whiteSpace: "nowrap",
}}
>
{name}
</Typography>
</Link>
))
2023-08-27 13:04:26 +00:00
: arrayMenu.map(({ name, url, subMenu = [] }, index) => (
2023-07-25 22:31:04 +00:00
<Typography
color={
location.pathname === url
? theme.palette.purple.main
2023-07-25 22:31:04 +00:00
: color
}
variant="body2"
sx={{
whiteSpace: "nowrap",
}}
>
{name}
</Typography>
2023-08-08 15:47:02 +00:00
))}
<Box
sx={{
zIndex: "10",
position: "absolute",
top: "80px",
left: 0,
backgroundColor: theme.palette.background.paper,
width: "100%",
}}
onMouseLeave={() => setActiveSubMenu([])}
>
{location.pathname !== "/" &&
activeSubMenu.map(({ name, url }) => (
<Link key={name} style={{ textDecoration: "none" }} to={url}>
<Typography
color={
location.pathname === url
? theme.palette.purple.main
2023-08-08 15:47:02 +00:00
: color
}
variant="body2"
sx={{
padding: "15px",
whiteSpace: "nowrap",
paddingLeft: "185px",
"&:hover": {
color: theme.palette.purple.main,
2023-08-08 15:47:02 +00:00
background: theme.palette.background.default,
},
}}
>
{name}
</Typography>
</Link>
))}
2023-07-25 22:31:04 +00:00
</Box>
2023-03-27 12:45:44 +00:00
</Box>
);
}