import { useEffect } from "react"; import Backdrop from "@mui/material/Backdrop"; import Stack from "@mui/material/Stack"; import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import List from "@mui/material/List"; import Divider from "@mui/material/Divider"; import { LAYOUT } from "@/Utils/Theme/constants"; import { typographyLevels } from "@/Utils/Theme/Palette"; import { useSidebar } from "@/Hooks/useSidebar.js"; import { Logo } from "@/Components/sidebar/Logo"; import { getMenu, getAccountMenu } from "@/Components/sidebar/Menu"; import { NavItem } from "@/Components/sidebar/NavItem"; import { StarPrompt } from "@/Components/sidebar/StarPrompt"; import { AuthFooter } from "@/Components/sidebar/Authfooter"; import { useNavigate, useLocation } from "react-router"; import { useTranslation } from "react-i18next"; import { useTheme, useMediaQuery } from "@mui/material"; import { useDispatch } from "react-redux"; import { setCollapsed } from "@/Features/UI/uiSlice"; const URL_MAP: Record = { support: "https://discord.com/invite/NAb6H3UTjK", discussions: "https://github.com/bluewave-labs/checkmate/discussions", docs: "https://checkmate.so/docs", changelog: "https://github.com/bluewave-labs/checkmate/releases", }; export const Sidebar = () => { const dispatch = useDispatch(); const navigate = useNavigate(); const location = useLocation(); const { t } = useTranslation(); const { width, transition, transitionTiming, collapsed } = useSidebar(); const theme = useTheme(); const isSmall = useMediaQuery(theme.breakpoints.down("md")); const menu = getMenu(t); const accountMenu = getAccountMenu(t); useEffect(() => { dispatch(setCollapsed({ collapsed: isSmall })); }, [isSmall, dispatch]); const handleNavClick = (path: string) => { const url = URL_MAP[path]; if (url) { window.open(url, "_blank", "noreferrer"); } else { navigate(`/${path}`); } if (isSmall) { dispatch(setCollapsed({ collapsed: true })); } }; return ( <> dispatch(setCollapsed({ collapsed: true }))} sx={{ zIndex: 999 }} /> {menu.map((group) => ( {group.group} {group.items.map((item) => { const selected = location.pathname.startsWith(`/${item.path}`); return ( handleNavClick(item.path)} /> ); })} ))} ); };