import React from 'react';
import PropTypes from 'prop-types';
import {
AppBar,
Box,
CssBaseline,
Divider,
Drawer,
IconButton,
List,
ListItem,
ListItemIcon,
ListItemText,
Toolbar,
Typography,
Avatar,
Menu,
MenuItem
} from '@mui/material';
import MenuIcon from '@mui/icons-material/Menu';
import CategoryIcon from '@mui/icons-material/Category';
import DescriptionIcon from '@mui/icons-material/Description';
import PeopleIcon from '@mui/icons-material/People';
import LogoIcon from '@mui/icons-material/Widgets';
const drawerWidth = 240;
export default function MainLayout({ children }) {
const [anchorEl, setAnchorEl] = React.useState(null);
const open = Boolean(anchorEl);
const handleMenuClick = (event) => {
setAnchorEl(event.currentTarget);
};
const handleMenuClose = () => {
setAnchorEl(null);
};
return (
<Box sx={{ display: 'flex', height: '100vh', flexDirection: 'column' }}>
<CssBaseline />
{/* Top App Bar */}
<AppBar position="fixed" sx={{ zIndex: (theme) => theme.zIndex.drawer + 1 }}>
<Toolbar>
<LogoIcon sx={{ mr: 2 }} />
<Typography variant="h6" sx={{ flexGrow: 1 }}>
Wiki App
</Typography>
<IconButton onClick={handleMenuClick} color="inherit">
<PeopleIcon />
</IconButton>
<Menu anchorEl={anchorEl} open={open} onClose={handleMenuClose}>
<MenuItem onClick={handleMenuClose}>Profile</MenuItem>
<MenuItem onClick={handleMenuClose}>Logout</MenuItem>
</Menu>
</Toolbar>
</AppBar>
{/* Layout Container */}
<Box sx={{ display: 'flex', flexGrow: 1, pt: 8 }}>
{/* Sidebar */}
<Drawer
variant="permanent"
sx={{
width: drawerWidth,
flexShrink: 0,
[`& .MuiDrawer-paper`]: { width: drawerWidth, boxSizing: 'border-box' }
}}
>
<Toolbar />
<Divider />
<List>
<ListItem button>
<ListItemIcon><CategoryIcon /></ListItemIcon>
<ListItemText primary="Categories" />
</ListItem>
<ListItem button>
<ListItemIcon><DescriptionIcon /></ListItemIcon>
<ListItemText primary="Pages" />
</ListItem>
</List>
</Drawer>
{/* Main Content */}
<Box
component="main"
sx={{ flexGrow: 1, p: 3, overflowY: 'auto', display: 'flex', flexDirection: 'column' }}
>
{children}
</Box>
</Box>
{/* Sticky Footer */}
<Box
component="footer"
sx={{
p: 2,
backgroundColor: 'background.paper',
borderTop: '1px solid #ccc',
textAlign: 'center'
}}
>
<Typography variant="body2" color="text.secondary">
© {new Date().getFullYear()} Wiki App. All rights reserved.
</Typography>
</Box>
</Box>
);
}
MainLayout.propTypes = {
children: PropTypes.node
};