You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.2 KiB
JavaScript

import React from 'react'
import Link from 'next/link'
5 years ago
import Router from 'next/router'
import isEmail from 'validator/lib/isEmail'
import axios from 'axios'
import {FormController, Input, Button} from '~/components/form'
import useErrorReducer from '../hooks/errorReducer'
export default function Login(){
const [errors, dispatch] = useErrorReducer()
5 years ago
const submit = async (values)=>{
try {
await axios.post(`/api/auth`, values)
Router.push('/')
} catch (err) {
if(!err.response || err.response.status !== 422) throw err;
5 years ago
dispatch({
type: 'set_errors',
errors: err.response.data.errors
})
}
}
return (
<FormController errors={errors} errorDispatch={dispatch} onSubmit={submit}>
<h1>Login</h1>
<Input label="Email" type="text" name="email" validate={value=>isEmail(value)} hint="Enter a valid email address" />
<Input label="Password" type="password" name="password" validate={value=>(value.length >= 8)} hint="Password must be at least 8 characters long" />
<Button type="submit">Submit</Button>
<p>Need an account? <Link href="/register"><a>Register here</a></Link>.</p>
</FormController>
)
}