@@ -11,18 +11,20 @@ import {
11
11
} from "react" ;
12
12
13
13
interface AuthContextType {
14
- user : User | null ;
15
- token : string | null ;
14
+ user : User | null | undefined ;
15
+ token : string | null | undefined ;
16
16
login : ( email : string , password : string ) => Promise < User | undefined > ;
17
17
logout : ( ) => Promise < void > ;
18
+ isLoading : boolean ;
18
19
}
19
20
20
21
const AuthContext = createContext < AuthContextType | undefined > ( undefined ) ;
21
22
22
23
const AuthProvider : React . FC < { children : ReactNode } > = ( { children } ) => {
23
24
const tokenKey = "jwtToken" ;
24
- const [ user , setUser ] = useState < User | null > ( null ) ;
25
- const [ token , setToken ] = useState < string | null > ( null ) ;
25
+ const [ user , setUser ] = useState < User | null > ( ) ;
26
+ const [ token , setToken ] = useState < string | null > ( ) ;
27
+ const [ isLoading , setIsLoading ] = useState < boolean > ( true ) ;
26
28
const router = useRouter ( ) ;
27
29
28
30
useEffect ( ( ) => {
@@ -31,7 +33,11 @@ const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
31
33
32
34
// Login using locally stored JWT token
33
35
useEffect ( ( ) => {
36
+ if ( token !== undefined ) {
37
+ setIsLoading ( false ) ;
38
+ }
34
39
if ( token ) {
40
+ setIsLoading ( true ) ;
35
41
fetch ( "http://localhost:3001/auth/verify-token" , {
36
42
method : "GET" ,
37
43
headers : {
@@ -41,10 +47,12 @@ const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
41
47
. then ( ( res ) => {
42
48
res . json ( ) . then ( ( result ) => {
43
49
setUser ( result . data ) ;
50
+ setIsLoading ( false ) ;
44
51
} ) ;
45
52
} )
46
53
. catch ( ( err ) => {
47
54
console . error ( err ) ;
55
+ setIsLoading ( false ) ;
48
56
} ) ;
49
57
}
50
58
} , [ token ] ) ;
@@ -88,7 +96,7 @@ const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
88
96
} ;
89
97
90
98
return (
91
- < AuthContext . Provider value = { { user, token, login, logout } } >
99
+ < AuthContext . Provider value = { { user, token, login, logout, isLoading } } >
92
100
{ children }
93
101
</ AuthContext . Provider >
94
102
) ;
0 commit comments