Newer
Older
import { useForm, Controller } from 'react-hook-form';
import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';
import { TextField, Button } from '@material-ui/core';
import { DevTool } from '@hookform/devtools';
const useStyles = makeStyles((theme: Theme) =>
createStyles({
root: {
'& > *': {
margin: theme.spacing(0),
},
},
form: {
width: '100%', // Fix IE 11 issue.
marginTop: theme.spacing(1),
},
submit: {
margin: theme.spacing(3, 0, 2),
},
}),
);
const { control, register, errors, handleSubmit } = useForm<FormData>({
const onSubmit: any = (values: FormData) => {
<>
<form
className={classes.form}
onSubmit={handleSubmit(onSubmit)}
data-testid="Form"
<Controller
name="email"
control={control}
defaultValues
rules={{
validate: (value) =>
/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(value),
required: { value: true, message: 'You must enter your email' },
}}
render={() => (
<TextField
variant="outlined"
margin="normal"
required
fullWidth
id="email"
label="Email Address"
name="email"
autoComplete="email"
autoFocus
error={Boolean(errors.email)}
helperText={errors.email && 'Incorrect entry.'}
/>
)}
/>
<Controller
name="password"
control={control}
defaultValues
rules={{
minLength: 8,
maxLength: 60,
required: { value: true, message: 'You must enter your name' },
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
}}
render={() => (
<TextField
variant="outlined"
margin="normal"
required
fullWidth
name="password"
label="Password"
type="password"
id="password"
autoComplete="password"
autoFocus
error={Boolean(errors.password)}
helperText={errors.password && 'Incorrect entry.'}
/>
)}
/>
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
data-testid="Submit"
className={classes.submit}
>
Sign In
</Button>
</form>
<DevTool control={control} /> {/* set up the dev tool */}
</>