import React, { useState, useContext } from "react"; import { Link, useLocation } from "wouter"; import { Button } from "@/components/ui/button"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Separator } from "@/components/ui/separator"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { ChevronDown, LogOut, Menu, Bell, HelpCircle, User, Settings, Home, Users, UserPlus, FolderClosed, Monitor, Globe, Key, Server, ShieldAlert, Filter, ClipboardList, Building2, BarChart3, LineChart, } from "lucide-react"; import { useMobile } from "@/hooks/use-mobile"; import { useToast } from "@/hooks/use-toast"; import { AuthContext } from "@/hooks/use-auth"; import { ThemeToggle } from "@/components/theme-toggle"; type MenuItem = { title: string; path: string; icon: React.ReactNode; }; type MenuSection = { title: string; items: MenuItem[]; }; const menuSections: MenuSection[] = [ { title: "Active Directory", items: [ { title: "Users", path: "/users", icon: }, { title: "Groups", path: "/groups", icon: }, { title: "Dynamic Groups", path: "/dynamic-groups", icon: }, { title: "Organizational Units", path: "/organizational-units", icon: }, { title: "Computers", path: "/computers", icon: }, { title: "Domains", path: "/domains", icon: }, { title: "Sites & Subnets", path: "/sites", icon: }, ], }, { title: "Reporting", items: [ { title: "Custom Dashboards", path: "/reporting/dashboards", icon: }, ], }, { title: "Administration", items: [ { title: "API Tokens", path: "/api-tokens", icon: }, { title: "LDAP Connections", path: "/ldap-connections", icon: }, { title: "LDAP Query Builder", path: "/ldap-query-builder", icon: }, { title: "Audit Logs", path: "/audit-logs", icon: }, { title: "Settings", path: "/settings", icon: }, { title: "User Management", path: "/user-management", icon: }, ], }, ]; interface DashboardLayoutProps { children: React.ReactNode; title: string; description?: string; } export function DashboardLayout({ children, title, description }: DashboardLayoutProps) { const [location, navigate] = useLocation(); const isMobile = useMobile(); const [sidebarOpen, setSidebarOpen] = useState(!isMobile); const auth = useContext(AuthContext); if (!auth) { console.error("Auth context not available"); return
Authentication error. Please refresh the page.
; } const { user, logoutMutation } = auth; const { toast } = useToast(); const handleLogout = async () => { logoutMutation.mutate(undefined, { onSuccess: () => { navigate('/auth'); } }); }; // Get user initials for avatar const getInitials = () => { if (!user) return "U"; if (user.fullName) { const nameParts = user.fullName.split(" "); if (nameParts.length > 1) { return `${nameParts[0][0]}${nameParts[nameParts.length - 1][0]}`.toUpperCase(); } return nameParts[0][0].toUpperCase(); } return user.username[0].toUpperCase(); }; return (
{/* Sidebar */}
AD Management API
Dashboard {menuSections.map((section, idx) => (
{section.title}
{section.items.map((item, itemIdx) => ( {item.icon} {item.title} ))}
))}
{/* Main Content */}
{/* Top App Bar */}
My Account Profile Settings Log out
{/* Main Content Area */}

{title}

{description &&

{description}

}
{children}
); } export default DashboardLayout;