Skip to content
Snippets Groups Projects
Verified Commit da221a48 authored by Defendi Alberto's avatar Defendi Alberto
Browse files

Install react-hook-form

parent 18518edb
No related branches found
No related tags found
2 merge requests!14Hook form for form validation,!13Basic form api and implement cookie entrypoint
import React, { useState } from 'react'; import React, { FC } from 'react';
import { useForm } from 'react-hook-form';
import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';
import TextField from '@material-ui/core/TextField'; import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button'; import Button from '@material-ui/core/Button';
import { isEmailValid } from './emailValidator';
const useStyles = makeStyles((theme: Theme) => const useStyles = makeStyles((theme: Theme) =>
createStyles({ createStyles({
...@@ -21,30 +22,29 @@ const useStyles = makeStyles((theme: Theme) => ...@@ -21,30 +22,29 @@ const useStyles = makeStyles((theme: Theme) =>
}), }),
); );
export const SignInForm: React.FC = () => { export const SignInForm: FC = () => {
interface formData { type FormData = {
email: string; email: string;
password: string; password: string;
errors: Array<string>; };
}
const defaultValues: formData = { const defaultValues: FormData = {
email: '', email: '',
password: '', password: '',
errors: [],
}; };
const [formValues, setFormValues] = useState<formData>(defaultValues);
const handleSubmit = (event: React.FormEvent): void => { const { register, errors, handleSubmit, getValues } = useForm({
event.preventDefault(); defaultValues,
const errors: Array<string> = []; });
if (!isEmailValid(formValues.email)) errors.push('email');
}; const onSubmit = handleSubmit((values: FormData) => {
// Send data
});
const classes = useStyles(); const classes = useStyles();
return ( return (
<form className={classes.form} onSubmit={handleSubmit} data-testid="Form"> <form className={classes.form} onSubmit={onSubmit} data-testid="Form">
<TextField <TextField
variant="outlined" variant="outlined"
margin="normal" margin="normal"
...@@ -55,10 +55,14 @@ export const SignInForm: React.FC = () => { ...@@ -55,10 +55,14 @@ export const SignInForm: React.FC = () => {
name="email" name="email"
autoComplete="email" autoComplete="email"
autoFocus autoFocus
onChange={(event) => inputRef={register({
setFormValues({ ...formValues, email: String(event.target.value) }) required: 'Required',
} validate: {
emailEqual: (value) => value === getValues().email || 'Error',
},
})}
/> />
{errors.email && errors.email.message}
<TextField <TextField
variant="outlined" variant="outlined"
margin="normal" margin="normal"
...@@ -69,10 +73,13 @@ export const SignInForm: React.FC = () => { ...@@ -69,10 +73,13 @@ export const SignInForm: React.FC = () => {
type="password" type="password"
id="password" id="password"
autoComplete="current-password" autoComplete="current-password"
onChange={(event) => inputRef={register({
setFormValues({ ...formValues, password: String(event.target.value) }) required: 'Required',
} min: 8,
max: 60,
})}
/> />
<Button <Button
type="submit" type="submit"
fullWidth fullWidth
......
...@@ -15135,6 +15135,11 @@ react-helmet-async@^1.0.4: ...@@ -15135,6 +15135,11 @@ react-helmet-async@^1.0.4:
react-fast-compare "^3.2.0" react-fast-compare "^3.2.0"
shallowequal "^1.1.0" shallowequal "^1.1.0"
   
react-hook-form@^6.15.5:
version "6.15.5"
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-6.15.5.tgz#c2578f9ce6a6df7b33015587d40cd880dc13e2db"
integrity sha512-so2jEPYKdVk1olMo+HQ9D9n1hVzaPPFO4wsjgSeZ964R7q7CHsYRbVF0PGBi83FcycA5482WHflasdwLIUVENg==
react-hot-loader@^4.12.21: react-hot-loader@^4.12.21:
version "4.13.0" version "4.13.0"
resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.13.0.tgz#c27e9408581c2a678f5316e69c061b226dc6a202" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.13.0.tgz#c27e9408581c2a678f5316e69c061b226dc6a202"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment