import { useState, useEffect } from 'react'; import { Box, Tabs, Tab, Typography } from '@mui/material'; import { Navigate, useNavigate, useSearchParams } from 'react-router-dom'; import DashboardLayout from '../components/dashboard/DashboardLayout'; import ServiceManagerTab from '../components/admin/ServiceManagerTab'; import SystemHealthTab from '../components/admin/SystemHealthTab'; import UserOverviewTab from '../components/admin/UserOverviewTab'; import NotificationBroadcastTab from '../components/admin/NotificationBroadcastTab'; import BannerManagementTab from '../components/admin/BannerManagementTab'; import ServiceModeTab from '../components/admin/ServiceModeTab'; import PermissionMatrixTab from '../components/admin/PermissionMatrixTab'; import DataManagementTab from '../components/admin/DataManagementTab'; import FdiskSyncTab from '../components/admin/FdiskSyncTab'; import SystemLogsTab from '../components/admin/SystemLogsTab'; import { usePermissionContext } from '../contexts/PermissionContext'; interface TabPanelProps { children: React.ReactNode; index: number; value: number; } function TabPanel({ children, value, index }: TabPanelProps) { if (value !== index) return null; return {children}; } function SubTabs({ labels, children }: { labels: string[]; children: React.ReactNode[] }) { const [subTab, setSubTab] = useState(0); return ( setSubTab(v)} sx={{ mb: 2, borderBottom: 1, borderColor: 'divider' }}> {labels.map((l) => )} {children.map((child, i) => subTab === i ? {child} : null)} ); } const ADMIN_TAB_COUNT = 5; function AdminDashboard() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const [tab, setTab] = useState(() => { const t = Number(searchParams.get('tab')); return t >= 0 && t < ADMIN_TAB_COUNT ? t : 0; }); useEffect(() => { const t = Number(searchParams.get('tab')); if (t >= 0 && t < ADMIN_TAB_COUNT) setTab(t); }, [searchParams]); const { hasPermission } = usePermissionContext(); if (!hasPermission('admin:view')) { return ; } return ( Administration { setTab(v); navigate(`/admin?tab=${v}`, { replace: true }); }} variant="scrollable" scrollButtons="auto"> {[, , ]} {[, ]} {[, ]} {[, ]} ); } export default AdminDashboard;