chessGame / frontend /src /layout /MainLayout.jsx
ilhamdev's picture
Upload folder using huggingface_hub
ece5841 verified
import React, { useContext, useState } from "react";
import { Outlet } from "react-router-dom";
import {
AppShell,
Burger,
Container,
Header,
MediaQuery,
Navbar,
Paper,
Text,
createStyles,
useMantineTheme,
} from "@mantine/core";
import UserDataContextProvider, {
UserDataContext,
} from "../context/user-data-context";
import MainLoader from "../components/MainLoader";
import NavbarLinks from "../components/NavbarLinks";
import Logout from "../components/Logout";
const useStyles = createStyles(() => ({
body: {
width: "100%",
height: "100%",
},
root: {
width: "100%",
height: "100vh",
},
main: {
width: "100%",
height: "100vh",
},
}));
const MainLayout = () => {
const { classes } = useStyles();
const theme = useMantineTheme();
const [opened, setOpened] = useState(false);
const { isLoggedIn, errorMessage } = useContext(UserDataContext);
if (!isLoggedIn) {
return <MainLoader errorMessage={errorMessage} />;
}
return (
<UserDataContextProvider>
<Paper>
<AppShell
classNames={{
body: classes.body,
root: classes.root,
main: classes.main,
}}
styles={{
main: {
background:
theme.colorScheme === "dark" ? "#302e2a" : theme.colors.gray[0],
},
body: {
textAlign: "center",
},
}}
layout="alt"
navbar={
<Navbar
py="md"
px="0"
hiddenBreakpoint="md"
sx={{ backgroundColor: "#262523" }}
hidden={!opened}
width={{ md: 150 }}
>
<Navbar.Section>
<Text size={30} weight={700}>
Chess
</Text>
</Navbar.Section>
<Navbar.Section grow mt="md">
<NavbarLinks />
</Navbar.Section>
<Navbar.Section>
<Logout />
</Navbar.Section>
</Navbar>
}
header={
<MediaQuery largerThan="sm" styles={{ display: "none" }}>
<Header zIndex={1000} p="md">
<div
style={{
display: "flex",
alignItems: "center",
height: "100%",
}}
>
<Burger
opened={opened}
onClick={() => setOpened((o) => !o)}
size="sm"
color={theme.colors.gray[6]}
mr="xl"
/>
<Text>Application header</Text>
</div>
</Header>
</MediaQuery>
}
padding
>
<Container
size="100%"
style={{ height: "100vh" }}
pl={{ md: 150 }}
pr={{ md: 0 }}
>
<Outlet />
</Container>
</AppShell>
</Paper>
</UserDataContextProvider>
);
};
export default MainLayout;