-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathAuthForm.js
100 lines (92 loc) · 2.67 KB
/
AuthForm.js
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
import { useState } from 'react';
import { StyleSheet, View } from 'react-native';
import Button from '../ui/Button';
import Input from './Input';
function AuthForm({ isLogin, onSubmit, credentialsInvalid }) {
const [enteredEmail, setEnteredEmail] = useState('');
const [enteredConfirmEmail, setEnteredConfirmEmail] = useState('');
const [enteredPassword, setEnteredPassword] = useState('');
const [enteredConfirmPassword, setEnteredConfirmPassword] = useState('');
const {
email: emailIsInvalid,
confirmEmail: emailsDontMatch,
password: passwordIsInvalid,
confirmPassword: passwordsDontMatch,
} = credentialsInvalid;
function updateInputValueHandler(inputType, enteredValue) {
switch (inputType) {
case 'email':
setEnteredEmail(enteredValue);
break;
case 'confirmEmail':
setEnteredConfirmEmail(enteredValue);
break;
case 'password':
setEnteredPassword(enteredValue);
break;
case 'confirmPassword':
setEnteredConfirmPassword(enteredValue);
break;
}
}
function submitHandler() {
onSubmit({
email: enteredEmail,
confirmEmail: enteredConfirmEmail,
password: enteredPassword,
confirmPassword: enteredConfirmPassword,
});
}
return (
<View style={styles.form}>
<View>
<Input
label="Email Address"
onUpdateValue={updateInputValueHandler.bind(this, 'email')}
value={enteredEmail}
keyboardType="email-address"
isInvalid={emailIsInvalid}
/>
{!isLogin && (
<Input
label="Confirm Email Address"
onUpdateValue={updateInputValueHandler.bind(this, 'confirmEmail')}
value={enteredConfirmEmail}
keyboardType="email-address"
isInvalid={emailsDontMatch}
/>
)}
<Input
label="Password"
onUpdateValue={updateInputValueHandler.bind(this, 'password')}
secure
value={enteredPassword}
isInvalid={passwordIsInvalid}
/>
{!isLogin && (
<Input
label="Confirm Password"
onUpdateValue={updateInputValueHandler.bind(
this,
'confirmPassword'
)}
secure
value={enteredConfirmPassword}
isInvalid={passwordsDontMatch}
/>
)}
<View style={styles.buttons}>
<Button onPress={submitHandler}>
{isLogin ? 'Log In' : 'Sign Up'}
</Button>
</View>
</View>
</View>
);
}
export default AuthForm;
const styles = StyleSheet.create({
buttons: {
marginTop: 12,
},
});