瀏覽代碼

upload provider

create_edit_user
MSI\derek 2 月之前
父節點
當前提交
eddf01e9a1
共有 3 個檔案被更改,包括 92 行新增22 行删除
  1. +25
    -22
      src/app/(main)/layout.tsx
  2. +52
    -0
      src/components/UploadProvider/UploadProvider.tsx
  3. +15
    -0
      src/components/UploadProvider/useUploadContext.tsx

+ 25
- 22
src/app/(main)/layout.tsx 查看文件

@@ -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>
);
}

+ 52
- 0
src/components/UploadProvider/UploadProvider.tsx 查看文件

@@ -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;

+ 15
- 0
src/components/UploadProvider/useUploadContext.tsx 查看文件

@@ -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;

Loading…
取消
儲存