1
1
"use client" ;
2
2
3
- import { fetchAllUsers , fetchIsAdmin , promoteToAdmin } from "@/app/api" ;
3
+ import { fetchAllUsers , promoteToAdmin } from "@/app/api" ;
4
4
import Button from "@/app/components/button/Button" ;
5
5
import useAdmin from "@/app/hooks/useAdmin" ;
6
+ import LoadingPage from "@/app/loading" ;
6
7
import { message } from "antd" ;
7
- import { useRouter } from "next/navigation" ;
8
- import { use , useEffect , useState } from "react" ;
8
+ import { useEffect , useState } from "react" ;
9
9
import Select , { MultiValue } from "react-select" ;
10
10
11
11
const AdminPortalPage = ( ) => {
12
- const isAdmin = useAdmin ( ) ;
13
- const router = useRouter ( ) ;
12
+ const { isAdmin, isLoading } = useAdmin ( ) ;
14
13
const [ api , contextHolder ] = message . useMessage ( ) ;
15
14
16
15
type User = {
@@ -30,13 +29,15 @@ const AdminPortalPage = () => {
30
29
> ( [ ] ) ;
31
30
32
31
useEffect ( ( ) => {
33
- fetchAllUsers ( ) . then ( ( allUsers ) => {
34
- setAdminOptions (
35
- allUsers . payload
36
- . filter ( ( user : User ) => user . role === "user" )
37
- . map ( ( user : User ) => ( { label : user . name , value : user . uid } ) ) ,
38
- ) ;
39
- } ) ;
32
+ if ( isAdmin ) {
33
+ fetchAllUsers ( ) . then ( ( allUsers ) => {
34
+ setAdminOptions (
35
+ allUsers . payload
36
+ . filter ( ( user : User ) => user . role === "user" )
37
+ . map ( ( user : User ) => ( { label : user . name , value : user . uid } ) ) ,
38
+ ) ;
39
+ } ) ;
40
+ }
40
41
} , [ api , contextHolder ] ) ;
41
42
42
43
const handleSelectChange = (
@@ -49,8 +50,20 @@ const AdminPortalPage = () => {
49
50
MultiValue < SelectOptionType >
50
51
> ( [ ] ) ;
51
52
53
+ if ( isLoading ) {
54
+ return < LoadingPage /> ;
55
+ }
56
+
52
57
if ( ! isAdmin ) {
53
- router . push ( "/" ) ;
58
+ return (
59
+ < div className = "flex h-full items-center justify-center" >
60
+ < div className = "flex items-center" >
61
+ < h1 className = "text-6xl text-white" > 401</ h1 >
62
+ < div className = "divider divider-horizontal h-24" > </ div >
63
+ < h2 className = "text-xl text-white" > Unauthorized</ h2 >
64
+ </ div >
65
+ </ div >
66
+ ) ;
54
67
}
55
68
56
69
return (
0 commit comments