import { useContext, useEffect, useState } from 'react'; import { Redirect, useLocation, useParams } from 'react-router-dom'; import { makeAPIPostCall } from '../api/utils'; import AuthenticationContext from './AuthenticationContext'; export default function Authenticator() { const { provider } = useParams<{ provider: string }>(); const query = new URLSearchParams(useLocation().search); const code = query.get('code'); const { refreshAuthState } = useContext(AuthenticationContext); const [status, setStatus] = useState<'pending' | 'errored' | 'authenticated'>( 'pending' ); useEffect(() => { makeAPIPostCall('/create_session', { code, provider }) .then((response) => { if (response.data.status === 'success') { localStorage.setItem('session_token', response.data.token); refreshAuthState && refreshAuthState(); setStatus('authenticated'); } else { setStatus('errored'); } }) .catch(() => { setStatus('errored'); }); }, [code, provider, refreshAuthState]); switch (status) { case 'authenticated': return ; case 'errored': return

Sign In Error

; case 'pending': return

Signing In

; } }