import { LayoutDashboard, FileText, Flag, Users, Settings, ArrowLeft, ScrollText, BookOpen, Inbox, Mail, AlertTriangle, Shield, Activity } from 'lucide-react'; import { NavLink } from 'react-router-dom'; import { useUserRole } from '@/hooks/useUserRole'; import { useSidebar } from '@/hooks/useSidebar'; import { useCombinedAlerts } from '@/hooks/admin/useCombinedAlerts'; import { Badge } from '@/components/ui/badge'; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from '@/components/ui/sidebar'; export function AdminSidebar() { const { state } = useSidebar(); const { permissions } = useUserRole(); const isSuperuser = permissions?.role_level === 'superuser'; const isAdmin = permissions?.role_level === 'admin' || isSuperuser; const collapsed = state === 'collapsed'; const { data: combinedAlerts } = useCombinedAlerts(); const alertCount = combinedAlerts?.length || 0; const navItems = [ { title: 'Dashboard', url: '/admin', icon: LayoutDashboard, }, { title: 'Monitoring Overview', url: '/admin/monitoring-overview', icon: Activity, badge: alertCount > 0 ? alertCount : undefined, }, { title: 'Moderation', url: '/admin/moderation', icon: FileText, }, { title: 'Reports', url: '/admin/reports', icon: Flag, }, { title: 'Inbox', url: '/admin/contact', icon: Inbox, }, { title: 'System Log', url: '/admin/system-log', icon: ScrollText, }, { title: 'Monitoring & Logs', url: '/admin/error-monitoring', icon: AlertTriangle, }, { title: 'Rate Limit Metrics', url: '/admin/rate-limit-metrics', icon: Shield, }, { title: 'Users', url: '/admin/users', icon: Users, }, ...(isAdmin ? [{ title: 'Blog', url: '/admin/blog', icon: BookOpen, }] : []), ...(isSuperuser ? [{ title: 'Settings', url: '/admin/settings', icon: Settings, }, { title: 'Email Settings', url: '/admin/email-settings', icon: Mail, }] : []), ]; return (
ThrillWiki { const img = e.target as HTMLImageElement; if (!img.src.includes('favicon128')) { img.src = 'https://cdn.thrillwiki.com/images/5d06b122-a3a3-47bc-6176-f93ad8f0ce00/favicon128'; } }} />
{!collapsed && (
ThrillWiki Admin Panel
)}
Navigation {navItems.map((item) => ( isActive ? 'bg-sidebar-accent text-sidebar-accent-foreground font-medium' : 'hover:bg-sidebar-accent/50 hover:text-sidebar-accent-foreground' } > {!collapsed && ( {item.title} {item.badge !== undefined && ( {item.badge} )} )} {collapsed && item.badge !== undefined && item.badge > 0 && ( {item.badge} )} ))} {!collapsed && Back to ThrillWiki}
); }