FPSMS-frontend
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

70 рядки
2.3 KiB

  1. import AppBar from "@/components/AppBar";
  2. import { AuthOptions, getServerSession } from "next-auth";
  3. import { authOptions, SessionWithTokens } 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. import { UploadProvider } from "@/components/UploadProvider/UploadProvider";
  13. import SessionProviderWrapper from "@/components/SessionProviderWrapper/SessionProviderWrapper";
  14. import QrCodeScannerProvider from "@/components/QrCodeScannerProvider/QrCodeScannerProvider";
  15. import { I18nProvider } from "@/i18n";
  16. import "src/app/global.css"
  17. export default async function MainLayout({
  18. children,
  19. }: {
  20. children: React.ReactNode;
  21. }) {
  22. const session = await getServerSession<AuthOptions, SessionWithTokens>(
  23. authOptions,
  24. );
  25. if (!session?.user) {
  26. redirect("/login");
  27. }
  28. // console.log(session?.user);
  29. // Verify if the session is valid
  30. if (session) {
  31. SetupAxiosInterceptors(session.accessToken);
  32. }
  33. return (
  34. <SessionProviderWrapper session={session}>
  35. <UploadProvider>
  36. {/* <CameraProvider> */}
  37. <AxiosProvider>
  38. <QrCodeScannerProvider>
  39. <>
  40. <AppBar
  41. profileName={session.user.name!}
  42. avatarImageSrc={session.user.image || undefined}
  43. />
  44. <Box
  45. component="main"
  46. sx={{
  47. marginInlineStart: { xs: 0, xl: NAVIGATION_CONTENT_WIDTH },
  48. padding: { xs: "1rem", sm: "1.5rem", lg: "3rem" },
  49. }}
  50. >
  51. <Stack spacing={2}>
  52. <I18nProvider namespaces={["common"]}>
  53. <Breadcrumb />
  54. {children}
  55. </I18nProvider>
  56. </Stack>
  57. </Box>
  58. </>
  59. </QrCodeScannerProvider>
  60. </AxiosProvider>
  61. {/* </CameraProvider> */}
  62. </UploadProvider>
  63. </SessionProviderWrapper>
  64. );
  65. }