import { useLocation } from "react-router-dom"; import { User, Shield, Link2, Activity, Building2, Users, Settings, FileText, Key, } from "lucide-react"; import { GatehouseLogo } from "@/components/branding/GatehouseLogo"; import { NavLink } from "@/components/NavLink"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarHeader, SidebarFooter, useSidebar, } from "@/components/ui/sidebar"; import { cn } from "@/lib/utils"; const userNavItems = [ { title: "Profile", url: "/profile", icon: User }, { title: "Security", url: "/security", icon: Shield }, { title: "Linked Accounts", url: "/linked-accounts", icon: Link2 }, { title: "Activity", url: "/activity", icon: Activity }, ]; const orgNavItems = [ { title: "Overview", url: "/org", icon: Building2 }, { title: "Members", url: "/org/members", icon: Users }, { title: "Policies", url: "/org/policies", icon: Settings }, { title: "Audit Log", url: "/org/audit", icon: FileText }, ]; const adminNavItems = [ { title: "OIDC Clients", url: "/org/clients", icon: Key }, ]; export function AppSidebar() { const { state } = useSidebar(); const collapsed = state === "collapsed"; const location = useLocation(); const isActive = (path: string) => location.pathname === path; const isOrgActive = orgNavItems.some((item) => isActive(item.url)) || adminNavItems.some((item) => isActive(item.url)); const isUserActive = userNavItems.some((item) => isActive(item.url)); return ( {/* Logo */}
{!collapsed && ( Gatehouse )}
{/* User Section */} {!collapsed && "Account"} {userNavItems.map((item) => ( {!collapsed && {item.title}} ))} {/* Organization Section */} {!collapsed && "Organization"} {orgNavItems.map((item) => ( {!collapsed && {item.title}} ))} {/* Admin Section */} {!collapsed && "Admin"} {adminNavItems.map((item) => ( {!collapsed && {item.title}} ))} {!collapsed && (
v1.0.0 • Self-hosted
)}
); }