'use client' import { useState } from 'react' import Link from 'next/link' import type { Route } from 'next' import { usePathname } from 'next/navigation' import { signOut } from 'next-auth/react' import { cn } from '@/lib/utils' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { Separator } from '@/components/ui/separator' import { LayoutDashboard, FolderKanban, Users, ClipboardList, Settings, FileSpreadsheet, Menu, X, LogOut, ChevronRight, BookOpen, Handshake, CircleDot, History, Trophy, User, } from 'lucide-react' import { getInitials } from '@/lib/utils' import { Logo } from '@/components/shared/logo' import { EditionSelector } from '@/components/shared/edition-selector' import { UserAvatar } from '@/components/shared/user-avatar' import { NotificationBell } from '@/components/shared/notification-bell' import { trpc } from '@/lib/trpc/client' interface AdminSidebarProps { user: { name?: string | null email?: string | null role?: string } } // Main navigation - scoped to selected edition const navigation = [ { name: 'Dashboard', href: '/admin' as const, icon: LayoutDashboard, }, { name: 'Rounds', href: '/admin/rounds' as const, icon: CircleDot, }, { name: 'Awards', href: '/admin/awards' as const, icon: Trophy, }, { name: 'Projects', href: '/admin/projects' as const, icon: ClipboardList, }, { name: 'Members', href: '/admin/members' as const, icon: Users, }, { name: 'Reports', href: '/admin/reports' as const, icon: FileSpreadsheet, }, { name: 'Learning Hub', href: '/admin/learning' as const, icon: BookOpen, }, { name: 'Partners', href: '/admin/partners' as const, icon: Handshake, }, ] // Admin-only navigation const adminNavigation = [ { name: 'Manage Editions', href: '/admin/programs' as const, icon: FolderKanban, }, { name: 'Audit Log', href: '/admin/audit' as const, icon: History, }, { name: 'Settings', href: '/admin/settings' as const, icon: Settings, }, ] // Role display labels const roleLabels: Record = { SUPER_ADMIN: 'Super Admin', PROGRAM_ADMIN: 'Program Admin', JURY_MEMBER: 'Jury Member', OBSERVER: 'Observer', } export function AdminSidebar({ user }: AdminSidebarProps) { const pathname = usePathname() const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) const { data: avatarUrl } = trpc.avatar.getUrl.useQuery() const isSuperAdmin = user.role === 'SUPER_ADMIN' const roleLabel = roleLabels[user.role || ''] || 'User' return ( <> {/* Mobile menu button */}
{/* Mobile menu overlay */} {isMobileMenuOpen && (
setIsMobileMenuOpen(false)} /> )} {/* Sidebar */} ) }