FPSMS-frontend
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

53 lines
1.4 KiB

  1. import AppBar from "@/components/AppBar";
  2. import { getServerSession } from "next-auth";
  3. import { authOptions } from "@/config/authConfig";
  4. import { redirect } from "next/navigation";
  5. import Box from "@mui/material/Box";
  6. import { NAVIGATION_CONTENT_WIDTH } from "@/config/uiConfig";
  7. import Stack from "@mui/material/Stack";
  8. import Breadcrumb from "@/components/Breadcrumb";
  9. import { AxiosProvider } from "@/app/(main)/axios/AxiosProvider";
  10. import { SetupAxiosInterceptors } from "@/app/(main)/axios/axiosInstance";
  11. import { CameraProvider } from "@/components/Cameras/CameraProvider";
  12. export default async function MainLayout({
  13. children,
  14. }: {
  15. children: React.ReactNode;
  16. }) {
  17. const session = await getServerSession(authOptions);
  18. if (!session?.user) {
  19. redirect("/login");
  20. }
  21. if (session) {
  22. SetupAxiosInterceptors(session?.accessToken);
  23. }
  24. return (
  25. <CameraProvider>
  26. <AxiosProvider>
  27. <>
  28. <AppBar
  29. profileName={session.user.name!}
  30. avatarImageSrc={session.user.image || undefined}
  31. />
  32. <Box
  33. component="main"
  34. sx={{
  35. marginInlineStart: { xs: 0, xl: NAVIGATION_CONTENT_WIDTH },
  36. padding: { xs: "1rem", sm: "1.5rem", lg: "3rem" },
  37. }}
  38. >
  39. <Stack spacing={2}>
  40. <Breadcrumb />
  41. {children}
  42. </Stack>
  43. </Box>
  44. </>
  45. </AxiosProvider>
  46. </CameraProvider>
  47. );
  48. }