"use client"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { Inbox, ListTodo, Bot, BookOpen, ChevronDown, Settings, LogOut, Plus, Check, Sparkles, SquarePen, } from "lucide-react"; import { WorkspaceAvatar } from "@/features/workspace"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarRail, } from "@/components/ui/sidebar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipTrigger, TooltipContent } from "@/components/ui/tooltip"; import { useAuthStore } from "@/features/auth"; import { useWorkspaceStore } from "@/features/workspace"; import { useInboxStore } from "@/features/inbox"; import { useModalStore } from "@/features/modals"; const primaryNav = [ { href: "/inbox", label: "Inbox", icon: Inbox }, { href: "/issues", label: "Issues", icon: ListTodo }, ]; const workspaceNav = [ { href: "/agents", label: "Agents", icon: Bot }, { href: "/skills", label: "Skills", icon: Sparkles }, { href: "/knowledge-base", label: "Knowledge Base", icon: BookOpen }, ]; export function AppSidebar() { const pathname = usePathname(); const router = useRouter(); const user = useAuthStore((s) => s.user); const authLogout = useAuthStore((s) => s.logout); const workspace = useWorkspaceStore((s) => s.workspace); const workspaces = useWorkspaceStore((s) => s.workspaces); const switchWorkspace = useWorkspaceStore((s) => s.switchWorkspace); const unreadCount = useInboxStore((s) => s.items.filter((i) => !i.read && !i.archived).length ); const logout = () => { authLogout(); useWorkspaceStore.getState().clearWorkspace(); router.push("/login"); }; return ( {/* Workspace Switcher */}
{workspace?.name ?? "Multica"} } /> {user?.email} } > Settings Workspaces useModalStore.getState().open("create-workspace")} > Create workspace {workspaces.map((ws) => ( { if (ws.id !== workspace?.id) { switchWorkspace(ws.id); } }} > {ws.name} {ws.id === workspace?.id && ( )} ))} Log out useModalStore.getState().open("create-issue")} > New issue
{/* Navigation */} {primaryNav.map((item) => { const isActive = pathname === item.href; return ( } className="text-muted-foreground hover:not-data-active:bg-sidebar-accent/70 data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground" > {item.label} {item.label === "Inbox" && unreadCount > 0 && ( {unreadCount > 99 ? "99+" : unreadCount} )} ); })} {workspaceNav.map((item) => { const isActive = pathname === item.href; return ( } className="text-muted-foreground hover:not-data-active:bg-sidebar-accent/70 data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground" > {item.label} ); })}
); }