-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSignUp.js
More file actions
144 lines (136 loc) · 3.83 KB
/
Copy pathSignUp.js
File metadata and controls
144 lines (136 loc) · 3.83 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import React, { useState, useRef } from "react";
import validator from "validator";
const SignUp = () => {
const [avatar, setAvatar] = useState(null);
const aboutRef = useRef(null);
const confirmPasswordRef = useRef(null);
const emailRef = useRef(null);
const filepickerRef = useRef(null);
const fullnameRef = useRef(null);
const passwordRef = useRef(null);
const signup = async () => {
const { about, fullname, email, password, confirmPassword } = getInputs();
if (
isSignupValid({
about,
fullname,
email,
password,
confirmPassword,
})
) {
alert("You account was created successfully");
}
};
const getInputs = () => {
const about = aboutRef.current.value;
const fullname = fullnameRef.current.value;
const email = emailRef.current.value;
const password = passwordRef.current.value;
const confirmPassword = confirmPasswordRef.current.value;
return { about, fullname, email, password, confirmPassword };
};
const isSignupValid = ({
about,
fullname,
email,
password,
confirmPassword,
}) => {
if (!avatar) {
alert("Please upload your avatar");
return false;
}
if (validator.isEmpty(fullname)) {
alert("Please input your fullname");
return false;
}
if (!validator.isEmail(email)) {
alert("Please input your email");
return false;
}
if (
validator.isEmpty(password) ||
!validator.isLength(password, { min: 6 })
) {
alert(
"Please input your password. You password must have at least 6 characters"
);
return false;
}
if (validator.isEmpty(confirmPassword)) {
alert("Please input your confirm password");
return false;
}
if (password !== confirmPassword) {
alert("Confirm password and password must be the same");
return false;
}
if (validator.isEmpty(about)) {
alert("Please input your description");
return false;
}
return true;
};
const uploadAvatar = (e) => {
const reader = new FileReader();
if (e.target.files[0]) {
reader.readAsDataURL(e.target.files[0]);
}
reader.onload = (readerEvent) => {
setAvatar(readerEvent.target.result);
};
};
return (
<div className="signup">
<div className="signup__content">
<div className="signup__container">
<div className="signup__title">Sign Up</div>
</div>
<div className="signup__subtitle"></div>
<div className="signup__form">
{avatar && (
<div
className="signup__user-avatar"
onClick={() => filepickerRef.current.click()}
>
<img src={avatar} alt="avatar" />
</div>
)}
{!avatar && (
<div
onClick={() => filepickerRef.current.click()}
className="signup__upload-container"
>
Choose File
</div>
)}
<input
className="signup__upload-avatar"
hidden
onChange={uploadAvatar}
ref={filepickerRef}
type="file"
/>
<input type="text" placeholder="Fullname" ref={fullnameRef} />
<input type="text" placeholder="Email" ref={emailRef} />
<input type="password" placeholder="Password" ref={passwordRef} />
<input
type="password"
placeholder="Confirm Password"
ref={confirmPasswordRef}
/>
<textarea
className="signup__about"
placeholder="Describe yourself here..."
ref={aboutRef}
></textarea>
<button className="signup__btn" onClick={signup}>
Sign Up
</button>
</div>
</div>
</div>
);
};
export default SignUp;