mirror of
https://github.com/myfatemi04/wheelshare-frontend.git
synced 2025-06-01 12:06:04 -04:00
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { useCallback, useEffect, useState } from 'react';
|
|
import { getMe } from '../api/api';
|
|
import AuthenticationContext, { AuthState } from './AuthenticationContext';
|
|
|
|
export default function AuthenticationWrapper({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const sessionToken = localStorage.getItem('session_token');
|
|
// Prevent race conditions
|
|
const [authState, setAuthState] = useState<AuthState>({
|
|
isLoggedIn: null,
|
|
user: null,
|
|
refreshAuthState: null,
|
|
});
|
|
|
|
const refreshAuthState = useCallback(() => {
|
|
if (sessionToken) {
|
|
getMe().then((user) => {
|
|
if (user) {
|
|
setAuthState({ isLoggedIn: true, user, refreshAuthState });
|
|
} else {
|
|
setAuthState({ isLoggedIn: false, user: null, refreshAuthState });
|
|
}
|
|
});
|
|
} else {
|
|
setAuthState({ isLoggedIn: false, user: null, refreshAuthState });
|
|
}
|
|
}, [sessionToken]);
|
|
|
|
useEffect(() => {
|
|
refreshAuthState();
|
|
}, [refreshAuthState]);
|
|
|
|
if (authState?.isLoggedIn == null) {
|
|
return null;
|
|
} else {
|
|
return (
|
|
<AuthenticationContext.Provider value={authState}>
|
|
{children}
|
|
</AuthenticationContext.Provider>
|
|
);
|
|
}
|
|
}
|