import React, { useState, useEffect } from 'react'; import { Box, Container, Paper, Typography, Alert, Tabs, Tab, Card, CardContent, useMediaQuery, useTheme, } from '@mui/material'; import { Person, PersonAdd, } from '@mui/icons-material'; import 'react-phone-number-input/style.css'; import './LoginPage.css'; import { useAuth } from 'hooks/AuthContext'; import { BackstoryLogo } from 'components/ui/BackstoryLogo'; import { BackstoryPageProps } from 'components/BackstoryTab'; import { LoginForm } from "components/EmailVerificationComponents"; import { CandidateRegistrationForm } from "pages/candidate/RegistrationForms"; import { useNavigate, useParams } from 'react-router-dom'; import { useAppState } from 'hooks/GlobalContext'; import * as Types from 'types/types'; const LoginPage: React.FC = (props: BackstoryPageProps) => { const navigate = useNavigate(); const { setSnack } = useAppState(); const [tabValue, setTabValue] = useState('login'); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(null); const { guest, user, login, isLoading, error } = useAuth(); const name = (user?.userType === 'candidate') ? (user as Types.Candidate).username : user?.email || ''; const [errorMessage, setErrorMessage] = useState(null); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const showGuest: boolean = false; const { tab } = useParams(); useEffect(() => { if (!loading || !error) { return; } if (loading && error) { /* Remove 'HTTP .*: ' from error string */ const jsonStr = error.replace(/^[^{]*/, ''); const data = JSON.parse(jsonStr); setErrorMessage(data.error.message); setSnack(data.error.message, "error"); setTimeout(() => { setErrorMessage(null); setLoading(false); }, 3000); } }, [error, loading]); useEffect(() => { if (tab === 'register') { setTabValue(tab); } }, [tab, setTabValue]); const handleTabChange = (event: React.SyntheticEvent, newValue: string) => { setTabValue(newValue); setSuccess(null); }; // If user is logged in, navigate to the profile page if (user) { navigate('/candidate/profile'); return (<>); } return ( {showGuest && guest && ( Guest Session Active Session ID: {guest.sessionId} Created: {guest.createdAt?.toLocaleString()} )} } label="Login" /> } label="Register" /> {errorMessage && ( {errorMessage} )} {success && ( {success} )} {tabValue === "login" && ( )} {tabValue === "register" && ( )} ); }; export { LoginPage };