import { Outlet, useNavigate, useLocation } from "react-router-dom"; import { AppShell, Burger, Group, Text, NavLink, Button, Avatar, Stack, Image, ActionIcon, Tooltip, useMantineColorScheme, } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import { IconDashboard, IconUsers, IconWebhook, IconBrandWhatsapp, IconSend, IconBuildingStore, IconTemplate, IconCategory, IconArrowsShuffle, IconFileText, IconDatabase, IconLogout, IconSun, IconMoon, } from "@tabler/icons-react"; import { useAuthStore } from "../stores/authStore"; export default function DashboardLayout() { const { user, logout } = useAuthStore(); const { colorScheme, setColorScheme } = useMantineColorScheme(); const navigate = useNavigate(); const location = useLocation(); const [opened, { toggle }] = useDisclosure(); const handleLogout = () => { logout(); navigate("/login"); }; const isActive = (path: string) => location.pathname === path; const isAnyActive = (paths: string[]) => paths.some((path) => location.pathname === path); const displayName = user?.username?.trim() || user?.full_name?.trim() || user?.email?.trim() || "User"; const displayInitial = displayName[0]?.toUpperCase() || "U"; const logoSrc = `${import.meta.env.BASE_URL}logo.png`; const swaggerIconSrc = `${import.meta.env.BASE_URL}swagger-icon.svg`; const isDark = colorScheme === "dark"; const toggleTheme = () => { if (colorScheme === "auto") { const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; setColorScheme(prefersDark ? "light" : "dark"); return; } setColorScheme(isDark ? "light" : "dark"); }; return ( WhatsHooked logo WhatsHooked {displayName} {displayInitial} } active={isActive("/dashboard")} onClick={(e) => { e.preventDefault(); navigate("/dashboard"); if (opened) toggle(); }} /> } active={isActive("/users")} onClick={(e) => { e.preventDefault(); navigate("/users"); if (opened) toggle(); }} /> } active={isActive("/hooks")} onClick={(e) => { e.preventDefault(); navigate("/hooks"); if (opened) toggle(); }} /> } defaultOpened active={isAnyActive([ "/accounts", "/whatsapp-business", "/business-templates", "/catalogs", "/flows", ])} > } onClick={(e) => { e.preventDefault(); navigate("/accounts"); if (opened) toggle(); }} /> } defaultOpened active={isAnyActive([ "/whatsapp-business", "/business-templates", "/catalogs", "/flows", ])} > } onClick={(e) => { e.preventDefault(); navigate("/whatsapp-business"); if (opened) toggle(); }} /> } active={isActive("/business-templates")} onClick={(e) => { e.preventDefault(); navigate("/business-templates"); if (opened) toggle(); }} /> } active={isActive("/catalogs")} onClick={(e) => { e.preventDefault(); navigate("/catalogs"); if (opened) toggle(); }} /> } active={isActive("/flows")} onClick={(e) => { e.preventDefault(); navigate("/flows"); if (opened) toggle(); }} /> } active={isActive("/send-message")} onClick={(e) => { e.preventDefault(); navigate("/send-message"); if (opened) toggle(); }} /> } active={isActive("/event-logs")} onClick={(e) => { e.preventDefault(); navigate("/event-logs"); if (opened) toggle(); }} /> } active={isActive("/message-cache")} onClick={(e) => { e.preventDefault(); navigate("/message-cache"); if (opened) toggle(); }} /> } active={isActive("/sw")} onClick={(e) => { e.preventDefault(); navigate("/sw"); if (opened) toggle(); }} /> {isDark ? : }
{displayName} {user?.role || "user"}
); }