-
Notifications
You must be signed in to change notification settings - Fork 12.5k
Expand file tree
/
Copy pathBasicForm.js
More file actions
101 lines (90 loc) · 2.88 KB
/
BasicForm.js
File metadata and controls
101 lines (90 loc) · 2.88 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import useInput from '../hooks/use-input';
const isNotEmpty = (value) => value.trim() !== '';
const isEmail = (value) => value.includes('@');
const BasicForm = (props) => {
const {
value: firstNameValue,
isValid: firstNameIsValid,
hasError: firstNameHasError,
valueChangeHandler: firstNameChangeHandler,
inputBlurHandler: firstNameBlurHandler,
reset: resetFirstName,
} = useInput(isNotEmpty);
const {
value: lastNameValue,
isValid: lastNameIsValid,
hasError: lastNameHasError,
valueChangeHandler: lastNameChangeHandler,
inputBlurHandler: lastNameBlurHandler,
reset: resetLastName,
} = useInput(isNotEmpty);
const {
value: emailValue,
isValid: emailIsValid,
hasError: emailHasError,
valueChangeHandler: emailChangeHandler,
inputBlurHandler: emailBlurHandler,
reset: resetEmail,
} = useInput(isEmail);
let formIsValid = false;
if (firstNameIsValid && lastNameIsValid && emailIsValid) {
formIsValid = true;
}
const submitHandler = event => {
event.preventDefault();
if (!formIsValid) {
return;
}
console.log('Submitted!');
console.log(firstNameValue, lastNameValue, emailValue);
resetFirstName();
resetLastName();
resetEmail();
};
const firstNameClasses = firstNameHasError ? 'form-control invalid' : 'form-control';
const lastNameClasses = lastNameHasError ? 'form-control invalid' : 'form-control';
const emailClasses = emailHasError ? 'form-control invalid' : 'form-control';
return (
<form onSubmit={submitHandler}>
<div className='control-group'>
<div className={firstNameClasses}>
<label htmlFor='name'>First Name</label>
<input
type='text'
id='name'
value={firstNameValue}
onChange={firstNameChangeHandler}
onBlur={firstNameBlurHandler}
/>
{firstNameHasError && <p className="error-text">Please enter a first name.</p>}
</div>
<div className={lastNameClasses}>
<label htmlFor='lastName'>Last Name</label>
<input
type='text'
id='lastName'
value={lastNameValue}
onChange={lastNameChangeHandler}
onBlur={lastNameBlurHandler}
/>
{lastNameHasError && <p className="error-text">Please enter a last name.</p>}
</div>
</div>
<div className={emailClasses}>
<label htmlFor='email'>E-Mail Address</label>
<input
type='text'
id='email'
value={emailValue}
onChange={emailChangeHandler}
onBlur={emailBlurHandler}
/>
{emailHasError && <p className="error-text">Please enter a valid email address.</p>}
</div>
<div className='form-actions'>
<button disabled={!formIsValid}>Submit</button>
</div>
</form>
);
};
export default BasicForm;