import React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Outlet } from 'react-router-dom'; // material-ui import { styled, useTheme, Theme } from '@mui/material/styles'; import { AppBar, Box, CssBaseline, Toolbar, useMediaQuery } from '@mui/material'; // project imports import Breadcrumbs from 'ui-component/extended/Breadcrumbs'; import Header from './Header'; import Sidebar from './Sidebar'; import navigation from 'menu-items'; import { drawerWidth } from 'store/constant'; import { SET_MENU } from 'store/actions'; import { DefaultRootStateProps } from 'types'; // assets import { IconChevronRight } from '@tabler/icons'; interface MainStyleProps { theme: Theme; open: boolean; } // styles const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }: MainStyleProps) => ({ ...theme.typography.mainContent, ...(!open && { borderBottomLeftRadius: 0, borderBottomRightRadius: 0, transition: theme.transitions.create('margin', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen }), [theme.breakpoints.up('md')]: { marginLeft: -(drawerWidth - 20), width: `calc(100% - ${drawerWidth}px)` }, [theme.breakpoints.down('md')]: { marginLeft: '20px', width: `calc(100% - ${drawerWidth}px)`, padding: '16px' }, [theme.breakpoints.down('sm')]: { marginLeft: '10px', width: `calc(100% - ${drawerWidth}px)`, padding: '16px', marginRight: '10px' } }), ...(open && { transition: theme.transitions.create('margin', { easing: theme.transitions.easing.easeOut, duration: theme.transitions.duration.enteringScreen }), marginLeft: 0, borderBottomLeftRadius: 0, borderBottomRightRadius: 0, width: `calc(100% - ${drawerWidth}px)`, [theme.breakpoints.down('md')]: { marginLeft: '20px' }, [theme.breakpoints.down('sm')]: { marginLeft: '10px' } }) })); // ==============================|| MAIN LAYOUT ||============================== // const MainLayout = () => { const theme = useTheme(); const matchDownMd = useMediaQuery(theme.breakpoints.down('lg')); // Handle left drawer const leftDrawerOpened = useSelector((state: DefaultRootStateProps) => state.customization.opened); const dispatch = useDispatch(); const handleLeftDrawerToggle = () => { dispatch({ type: SET_MENU, opened: !leftDrawerOpened }); }; React.useEffect(() => { dispatch({ type: SET_MENU, opened: !matchDownMd }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [matchDownMd]); return ( {/* header */}
{/* drawer */} {/* main content */}
{/* breadcrumb */}
); }; export default MainLayout;