Newer
Older

Cross, Liam (UG - Comp Sci & Elec Eng)
committed
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { useForm } from 'react-hook-form';
import { AxiosError } from 'axios';
import { useAuth } from '../../hooks/useAuth';
import { loginUser } from '../../services/Login/Login';
import { userToDashboard } from '../../helpers/UserType';

Cross, Liam (UG - Comp Sci & Elec Eng)
committed
import './Login.scss';
export interface ILoginForm {

Cross, Liam (UG - Comp Sci & Elec Eng)
committed
email: string;
password: string;
}
export function Login() {
const navigate = useNavigate();
const [error, setError] = useState('');
const { register, handleSubmit } = useForm<ILoginForm>({mode: 'onChange'});
const onSubmit = async (formValue: ILoginForm) => {
setError('');
try {
const result = await loginUser(formValue);
giveAuth();
updateUser(result.data);
navigate(`/${userToDashboard(result.data)}`);
} catch (error) {
const errorMessage = (error as AxiosError).response?.data;

Cross, Liam (UG - Comp Sci & Elec Eng)
committed
if (typeof errorMessage == 'string') {
setError(errorMessage);
} else {
setError('An unexpected error has occurred');
}
}

Cross, Liam (UG - Comp Sci & Elec Eng)
committed
};
return (
<>
<div className='login'>
<form onSubmit={handleSubmit(onSubmit)}>
<div className='card login-card'>
<div className='form-group'>
<label>Email Address</label>
<input type='email' placeholder='Enter email' {...register('email', { required: true })} />
</div>
<div className='form-group'>
<label>Password</label>
<input type='password' placeholder='Enter password' {...register('password', { required: true })} />
</div>
<div className='form-group'>
<button type='submit'>Submit</button>
</div>
<div className='form-group'>
{error && <span>{error}</span>}
</div>
</div>
</form>
</div>
</>
);
}