ente/src/pages/index.tsx

89 lines
3.6 KiB
TypeScript
Raw Normal View History

import React, { useState, useEffect } from 'react';
import { useRouter } from 'next/router';
2020-09-09 21:09:51 +00:00
import Card from 'react-bootstrap/Card';
import Form from 'react-bootstrap/Form';
import FormControl from 'react-bootstrap/FormControl';
2020-09-09 21:09:51 +00:00
import Button from 'react-bootstrap/Button';
import constants from 'utils/strings/constants';
import { Formik, FormikHelpers } from 'formik';
import * as Yup from 'yup';
import { getOtt } from 'services/userService';
import Container from 'components/Container';
import { setData, SESSION_KEYS, getData } from 'utils/sessionStorage';
2020-09-09 21:09:51 +00:00
interface formValues {
email: string;
}
2020-09-09 21:09:51 +00:00
export default function Home() {
const [loading, setLoading] = useState(false);
const router = useRouter();
useEffect(() => {
const user = getData(SESSION_KEYS.USER);
if (user?.email) {
router.push('/verify');
}
}, []);
const loginUser = async ({ email }: formValues, { setFieldError }: FormikHelpers<formValues>) => {
try {
setLoading(true);
await getOtt(email);
setData(SESSION_KEYS.USER, { email });
router.push('/verify');
} catch (e) {
setFieldError('email', `${constants.UNKNOWN_ERROR} ${e.message}`);
}
setLoading(false);
}
return (
<Container>
<Card style={{ minWidth: '300px' }}>
<Card.Body>
<Card.Title>{constants.LOGIN}</Card.Title>
<Formik<formValues>
initialValues={{email: ''}}
validationSchema={Yup.object().shape({
email: Yup.string()
.email(constants.EMAIL_ERROR)
.required(constants.REQUIRED)
})}
onSubmit={loginUser}
>
{({values, errors, touched, handleChange, handleBlur, handleSubmit}) => (
<Form noValidate onSubmit={handleSubmit}>
<Form.Group controlId="formBasicEmail">
<Form.Label>{constants.EMAIL}</Form.Label>
<Form.Control
type="email"
placeholder={constants.ENTER_EMAIL}
value={values.email}
onChange={handleChange('email')}
onBlur={handleBlur('email')}
isInvalid={Boolean(touched.email && errors.email)}
disabled={loading}
/>
<FormControl.Feedback type="invalid">
{errors.email}
</FormControl.Feedback>
<Form.Text className="text-muted">
{constants.EMAIL_DISCLAIMER}
</Form.Text>
</Form.Group>
<Button
variant="primary" type="submit" block
disabled={loading}
>
{constants.SUBMIT}
</Button>
</Form>
)}
</Formik>
</Card.Body>
</Card>
</Container>
)
2020-09-09 21:09:51 +00:00
}