-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Expand file tree
/
Copy pathCustomInputs.js
More file actions
83 lines (76 loc) · 2.36 KB
/
CustomInputs.js
File metadata and controls
83 lines (76 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import React from 'react';
import { Formik, Field, Form, ErrorMessage } from 'formik';
import * as Yup from 'yup';
import { Debug } from './Debug';
// By combining a vanilla <label> plus Formik's <Field> and <ErrorMessage>,
// we can abstract a generic "Fieldset" component for most of our inputs.
const Fieldset = ({ name, label, ...rest }) => (
<React.Fragment>
<label htmlFor={name}>{label}</label>
<Field id={name} name={name} {...rest} />
<ErrorMessage name={name} />
</React.Fragment>
);
const SignUp = () => (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={{
email: '',
color: '',
animal: '',
website: '',
}}
validationSchema={Yup.object().shape({
email: Yup.string().email('Invalid email address').required('Required'),
color: Yup.string().required('Required'),
website: Yup.string().url('Invalid URL').required('Required'),
animal: Yup.string().required('Required'),
})}
onSubmit={values => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
}, 500);
}}
render={({ isSubmitting, handleReset }) => (
<Form>
<Fieldset
name="email"
type="email"
label="Email"
placeholder="jane@acme.com"
/>
<Fieldset name="color" label="Favorite Color" as="select">
<option value="">Select a Color</option>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</Fieldset>
<Fieldset
name="website"
type="url"
label="Website"
placeholder="https://example.com"
/>
<Fieldset name="animal" as="select" label="Favorite Animal">
<option value="">Select an animal</option>
<option value="tiger">Tiger</option>
<option value="bear">Bear</option>
<option value="shark">Shark</option>
</Fieldset>
<button
type="reset"
className="secondary"
disabled={isSubmitting}
onClick={handleReset}
>
Reset
</button>
<button type="submit">Submit</button>
<Debug />
</Form>
)}
/>
</div>
);
export default SignUp;