import React, { useState } from 'react'; import { Outlet, useNavigate, useLocation } from 'react-router-dom'; import { Box, Drawer, AppBar, Toolbar, List, Typography, Divider, IconButton, ListItem, ListItemButton, ListItemIcon, ListItemText, Avatar, Menu, MenuItem, Tooltip, Select, FormControl, } from '@mui/material'; import { Menu as MenuIcon, ChevronLeft as ChevronLeftIcon, Dashboard as DashboardIcon, Storage as StorageIcon, FolderOpen as FolderOpenIcon, People as PeopleIcon, Policy as PolicyIcon, Assessment as AssessmentIcon, Logout as LogoutIcon, AccountCircle as AccountCircleIcon, Language as LanguageIcon, } from '@mui/icons-material'; import { useTranslation } from 'react-i18next'; import useAuthStore from '../../store/authStore'; const drawerWidth = 240; interface NavItem { text: string; icon: React.ReactElement; path: string; translationKey: string; } const Layout: React.FC = () => { const { t, i18n } = useTranslation(['common']); const navigate = useNavigate(); const location = useLocation(); const { user, logout } = useAuthStore(); const [open, setOpen] = useState(true); const [anchorEl, setAnchorEl] = useState(null); const navItems: NavItem[] = [ { text: 'Dashboard', icon: , path: '/', translationKey: 'navigation.dashboard' }, { text: 'Buckets', icon: , path: '/buckets', translationKey: 'navigation.buckets' }, { text: 'Explorer', icon: , path: '/explorer', translationKey: 'navigation.explorer' }, { text: 'Users', icon: , path: '/users', translationKey: 'navigation.users' }, { text: 'Policies', icon: , path: '/policies', translationKey: 'navigation.policies' }, { text: 'Reports', icon: , path: '/reports', translationKey: 'navigation.reports' }, ]; const handleDrawerToggle = () => { setOpen(!open); }; const handleMenuOpen = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setAnchorEl(null); }; const handleLogout = async () => { await logout(); navigate('/login'); }; const handleLanguageChange = (event: any) => { i18n.changeLanguage(event.target.value); }; return ( theme.transitions.create(['margin', 'width'], { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen, }), }} > {open ? : } {t('common:appName')} Logged in as {user?.role || 'Admin'} {t('common:navigation.logout')} theme.spacing(0, 1), ...((theme) => theme.mixins.toolbar), justifyContent: 'center', }} > MinIO Manager {navItems.map((item) => ( navigate(item.path)} > {item.icon} ))} theme.transitions.create('margin', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen, }), marginLeft: open ? 0 : `-${drawerWidth}px`, mt: 8, }} > ); }; export default Layout;