123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import { useEffect, useState } from "react";
- import { Outlet } from "react-router-dom";
- import { useDispatch, useSelector } from "react-redux";
- // material-ui
- import { useTheme } from "@mui/material/styles";
- import { useMediaQuery, Box, Container, Toolbar } from "@mui/material";
- // project import
- import Drawer from "./Drawer";
- import Header from "./Header";
- import Footer from "./Footer";
- import navigation from "@/menu-items";
- import useConfig from "@/hooks/useConfig";
- import Breadcrumbs from "@/components/@extended/Breadcrumbs";
- // types
- import { RootStateProps } from "@/types/root";
- import { openDrawer } from "@/store/reducers/menu";
- // ==============================|| MAIN LAYOUT ||============================== //
- const MainLayout = () => {
- const theme = useTheme();
- const matchDownLG = useMediaQuery(theme.breakpoints.down("xl"));
- const { container, miniDrawer } = useConfig();
- const dispatch = useDispatch();
- const menu = useSelector((state: RootStateProps) => state.menu);
- const { drawerOpen } = menu;
- // drawer toggler
- const [open, setOpen] = useState(!miniDrawer || drawerOpen);
- const handleDrawerToggle = () => {
- setOpen(!open);
- dispatch(openDrawer({ drawerOpen: !open }));
- };
- // set media wise responsive drawer
- useEffect(() => {
- if (!miniDrawer) {
- setOpen(!matchDownLG);
- dispatch(openDrawer({ drawerOpen: !matchDownLG }));
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [matchDownLG]);
- // useEffect(() => {
- // if (open !== drawerOpen) setOpen(drawerOpen);
- // // eslint-disable-next-line react-hooks/exhaustive-deps
- // }, [drawerOpen]);
- return (
- <Box sx={{ display: "flex", width: "100%" }}>
- <Header open={open} handleDrawerToggle={handleDrawerToggle} />
- <Drawer open={open} handleDrawerToggle={handleDrawerToggle} />
- <Box component="main" sx={{ width: "calc(100% - 260px)", flexGrow: 1, p: { xs: 2, sm: 3 } }}>
- <Toolbar />
- {container && (
- <Container
- maxWidth="xl"
- sx={{
- px: { xs: 0, sm: 2 },
- position: "relative",
- minHeight: "calc(100vh - 110px)",
- display: "flex",
- flexDirection: "column"
- }}
- >
- <Breadcrumbs navigation={navigation} title titleBottom card={false} divider={false} />
- <Outlet />
- <Footer />
- </Container>
- )}
- {!container && (
- <Box
- sx={{ position: "relative", minHeight: "calc(100vh - 110px)", display: "flex", flexDirection: "column" }}
- >
- <Breadcrumbs navigation={navigation} title titleBottom card={false} divider={false} />
- <Outlet />
- <Footer />
- </Box>
- )}
- </Box>
- </Box>
- );
- };
- export default MainLayout;
|