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