import { useEffect, useState } from "react"; import { navigate } from "gatsby"; import { AllUsersAuthLayout } from "../../layouts/AuthLayout"; import HighlightedLink from "../../components/HighlightedLink"; import accountsService from "../../services/accountsService"; const State = { Pure: "PURE", Success: "SUCCESS", Failure: "FAILURE", }; const EmailConfirmationPage = ({ location }) => { const query = new URLSearchParams(location.search); const token = query.get("token"); const [state, setState] = useState(State.Pure); useEffect(() => { const controller = new AbortController(); let timer; async function confirm(token) { try { await accountsService.get("user/confirm", { signal: controller.signal, searchParams: { token }, }); timer = setTimeout(() => { navigate("/"); }, 3000); setState(State.Success); } catch (err) { // Don't show an error message if request was aborted due to `token` changing. if (err.code !== DOMException.ABORT_ERR) { setState(State.Failure); } } } if (token) { confirm(token); } return () => { controller.abort(); clearTimeout(timer); }; }, [token]); return (
Skynet
{state === State.Pure &&

Please wait while we verify your account...

} {state === State.Success && ( <>

All done!

You will be redirected to your dashboard shortly.

Redirect now. )} {state === State.Failure &&

Something went wrong, please try again later.

}
); }; EmailConfirmationPage.Layout = AllUsersAuthLayout; export default EmailConfirmationPage;