diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index a7d5ad94..4fc91d7a 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -35,13 +35,21 @@ const router = createBrowserRouter( loader: async () => { console.log('------------ after reload'); - const auth = await loadAuth(); - if (auth.status === 403) { + let authData = null; + + try { + const auth = await loadAuth(); + if (auth.status === 403) { + return redirect(Routes.Login); + } + + authData = await auth.json(); + } catch (error) { + console.log(error); + return redirect(Routes.Login); } - const authData = await auth.json(); - const userConfig = await loadUserMeConfig(); const userAccount = await loadUserAccount(); const appSettings = await loadAppsettingsConfig(); diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/Login.tsx index 0b556913..93d226d3 100644 --- a/frontend/src/pages/Login.tsx +++ b/frontend/src/pages/Login.tsx @@ -1,9 +1,10 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import Routes from '../configuration/routes/RouteList'; import { useNavigate } from 'react-router-dom'; import useColours from '../configuration/colours/useColours'; import Button from '../components/Button'; import signIn from '../api/actions/signIn'; +import loadAuth from '../api/loader/loadAuth'; const Login = () => { useColours(); @@ -13,11 +14,16 @@ const Login = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [saveLogin, setSaveLogin] = useState(false); + const [waitingForBackend, setWaitingForBackend] = useState(false); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event: { preventDefault: () => void }) => { event.preventDefault(); + if (waitingForBackend) { + return false; + } + setErrorMessage(null); const loginResponse = await signIn(username, password, saveLogin); @@ -33,6 +39,28 @@ const Login = () => { } }; + useEffect(() => { + const backendCheckInterval = setInterval(async () => { + try { + const auth = await loadAuth(); + + const authData = await auth.json(); + + if (authData.response === 'pong') { + setWaitingForBackend(false); + clearInterval(backendCheckInterval); + } + } catch (error) { + console.log('Checking backend availability: ', error); + setWaitingForBackend(true); + } + }, 1000); + + return () => { + clearInterval(backendCheckInterval); + }; + }, []); + return ( <> TA | Welcome @@ -92,7 +120,17 @@ const Login = () => { -