import React, { useState } from 'react'; import { Outlet } from 'react-router-dom'; import { Box, Container, AppBar, Toolbar, Typography, Button, IconButton, Drawer, List, ListItem, ListItemIcon, ListItemText, Divider, Badge, useMediaQuery } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import MenuIcon from '@mui/icons-material/Menu'; import HomeIcon from '@mui/icons-material/Home'; import ShoppingCartIcon from '@mui/icons-material/ShoppingCart'; import CategoryIcon from '@mui/icons-material/Category'; import PersonIcon from '@mui/icons-material/Person'; import LoginIcon from '@mui/icons-material/Login'; import LogoutIcon from '@mui/icons-material/Logout'; import DashboardIcon from '@mui/icons-material/Dashboard'; import Brightness4Icon from '@mui/icons-material/Brightness4'; import Brightness7Icon from '@mui/icons-material/Brightness7'; import ReceiptIcon from '@mui/icons-material/Receipt'; import BookIcon from '@mui/icons-material/Book'; import { Link as RouterLink, useNavigate } from 'react-router-dom'; import { useAuth, useCart, useDarkMode } from '../hooks/reduxHooks'; import Footer from '../components/Footer'; import { useQuery } from '@tanstack/react-query'; import apiClient from '@services/api'; import useBrandingSettings from '@hooks/brandingHooks'; import imageUtils from '@utils/imageUtils'; const MainLayout = () => { const [drawerOpen, setDrawerOpen] = useState(false); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); const navigate = useNavigate(); const { isAuthenticated, isAdmin, logout } = useAuth(); const { itemCount } = useCart(); const [darkMode, toggleDarkMode] = useDarkMode(); const { data: brandingSettings } = useBrandingSettings(); const siteName = brandingSettings?.site_name || 'Rocks, Bones & Sticks'; const logoUrl = imageUtils.getImageUrl(brandingSettings?.logo_url) const handleDrawerToggle = () => { setDrawerOpen(!drawerOpen); }; const handleLogout = () => { logout(); navigate('/'); }; let mainMenu = [ { text: 'Home', icon: , path: '/' }, { text: 'Products', icon: , path: '/products' }, { text: 'Blog', icon: , path: '/blog' }, { text: 'Cart', icon: , path: '/cart', badge: itemCount > 0 ? itemCount : null }, ]; if (isAuthenticated) { mainMenu.push( { text: 'My Orders', icon: , path: '/account/orders' } ); } const authMenu = isAuthenticated ? [ { text: 'Logout', icon: , onClick: handleLogout } ] : [ { text: 'Login', icon: , path: '/auth/login' }, { text: 'Register', icon: , path: '/auth/register' } ]; // Add admin menu if user is admin if (isAuthenticated && isAdmin) { mainMenu.push( { text: 'Admin Dashboard', icon: , path: '/admin' } ); } const drawer = ( {logoUrl ? ( ) : ( {siteName} )} {mainMenu.map((item) => ( {item.badge ? ( {item.icon} ) : ( item.icon )} ))} {darkMode ? : } {authMenu.map((item) => ( {item.icon} ))} ); return ( {logoUrl ? ( ) : ( {siteName} )} {/* Desktop navigation */} {!isMobile && ( {mainMenu.map((item) => ( ))} {darkMode ? : } {authMenu.map((item) => ( item.path ? ( ) : ( ) ))} )} {drawer}