@@ -9,6 +9,7 @@ import Breadcrumb from "@/components/Breadcrumb"; | |||
import { AxiosProvider } from "@/app/(main)/axios/AxiosProvider"; | |||
import { SetupAxiosInterceptors } from "@/app/(main)/axios/axiosInstance"; | |||
import { CameraProvider } from "@/components/Cameras/CameraProvider"; | |||
import { UploadProvider } from "@/components/UploadProvider/UploadProvider"; | |||
export default async function MainLayout({ | |||
children, | |||
@@ -26,27 +27,29 @@ export default async function MainLayout({ | |||
} | |||
return ( | |||
<CameraProvider> | |||
<AxiosProvider> | |||
<> | |||
<AppBar | |||
profileName={session.user.name!} | |||
avatarImageSrc={session.user.image || undefined} | |||
/> | |||
<Box | |||
component="main" | |||
sx={{ | |||
marginInlineStart: { xs: 0, xl: NAVIGATION_CONTENT_WIDTH }, | |||
padding: { xs: "1rem", sm: "1.5rem", lg: "3rem" }, | |||
}} | |||
> | |||
<Stack spacing={2}> | |||
<Breadcrumb /> | |||
{children} | |||
</Stack> | |||
</Box> | |||
</> | |||
</AxiosProvider> | |||
</CameraProvider> | |||
<UploadProvider> | |||
<CameraProvider> | |||
<AxiosProvider> | |||
<> | |||
<AppBar | |||
profileName={session.user.name!} | |||
avatarImageSrc={session.user.image || undefined} | |||
/> | |||
<Box | |||
component="main" | |||
sx={{ | |||
marginInlineStart: { xs: 0, xl: NAVIGATION_CONTENT_WIDTH }, | |||
padding: { xs: "1rem", sm: "1.5rem", lg: "3rem" }, | |||
}} | |||
> | |||
<Stack spacing={2}> | |||
<Breadcrumb /> | |||
{children} | |||
</Stack> | |||
</Box> | |||
</> | |||
</AxiosProvider> | |||
</CameraProvider> | |||
</UploadProvider> | |||
); | |||
} |
@@ -0,0 +1,52 @@ | |||
"use client"; | |||
import React, { createContext, useState } from 'react'; | |||
import {CircularProgress} from "@mui/material"; | |||
const UploadContext = createContext<{ | |||
isUploading: boolean, | |||
setIsUploading: React.Dispatch<React.SetStateAction<boolean>> | |||
} | undefined>(undefined); | |||
export const UploadProvider: React.FC<{ children: React.ReactNode }> = ({ | |||
children, | |||
}) => { | |||
const [isUploading, setIsUploading] = useState(false); | |||
return ( | |||
<UploadContext.Provider value={{ isUploading, setIsUploading }}> | |||
{children} | |||
{isUploading && ( | |||
<div | |||
style={{ | |||
position: 'fixed', | |||
top: 0, | |||
left: 0, | |||
width: '100%', | |||
height: '100%', | |||
backgroundColor: 'rgba(0, 0, 0, 0.5)', | |||
zIndex: 9999, | |||
display: 'flex', | |||
justifyContent: 'center', | |||
alignItems: 'center', | |||
}} | |||
> | |||
<div | |||
style={{ | |||
display: 'flex', | |||
justifyContent: 'center', | |||
alignItems: 'center', | |||
width: 75, | |||
height: 75, | |||
borderRadius: '50%', | |||
backgroundColor: 'white', | |||
}} | |||
> | |||
<CircularProgress /> | |||
</div> | |||
</div> | |||
)} | |||
</UploadContext.Provider> | |||
); | |||
}; | |||
export default UploadContext; |
@@ -0,0 +1,15 @@ | |||
"use client" | |||
import { useContext } from 'react'; | |||
import UploadContext from './UploadProvider'; | |||
const useUploadContext = () => { | |||
const context = useContext(UploadContext); | |||
if (!context) { | |||
throw new Error('useUploadContext must be used within an UploadProvider'); | |||
} | |||
return context; | |||
}; | |||
export default useUploadContext; |