mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { Box, Toolbar } from '@mui/material';
|
|
import { useState, useEffect } from 'react';
|
|
import { useLocation } from 'react-router-dom';
|
|
import LayoutAppBar from './LayoutAppBar';
|
|
import LayoutDrawer from './LayoutDrawer';
|
|
import { LayoutContext } from './context';
|
|
import type { FC } from 'react';
|
|
|
|
import type { RequiredChildrenProps } from 'utils';
|
|
import { PROJECT_NAME } from 'api/env';
|
|
|
|
export const DRAWER_WIDTH = 210;
|
|
|
|
const Layout: FC<RequiredChildrenProps> = ({ children }) => {
|
|
const [mobileOpen, setMobileOpen] = useState(false);
|
|
const [title, setTitle] = useState(PROJECT_NAME);
|
|
const { pathname } = useLocation();
|
|
|
|
const handleDrawerToggle = () => {
|
|
setMobileOpen(!mobileOpen);
|
|
};
|
|
|
|
useEffect(() => setMobileOpen(false), [pathname]);
|
|
|
|
return (
|
|
<LayoutContext.Provider value={{ title, setTitle }}>
|
|
<LayoutAppBar title={title} onToggleDrawer={handleDrawerToggle} />
|
|
<LayoutDrawer mobileOpen={mobileOpen} onClose={handleDrawerToggle} />
|
|
<Box component="main" sx={{ marginLeft: { md: `${DRAWER_WIDTH}px` } }}>
|
|
<Toolbar />
|
|
{children}
|
|
</Box>
|
|
</LayoutContext.Provider>
|
|
);
|
|
};
|
|
|
|
export default Layout;
|