src/components/LoginForm.jsx   A
last analyzed

Complexity

Total Complexity 5
Complexity/F 0

Size

Lines of Code 242
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 192
mnd 5
bc 5
fnc 0
dl 0
loc 242
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import React, { useState } from "react";
2
import auth from "../models/auth";
3
import { useStateContext } from "../contexts/ContextProvider";
4
import { register } from "../data/data";
5
const LoginForm = ({ setDisplayForm }) => {
6
  const { setIsServerAcc, setIsLoggedIn, setServerProfileId } =
7
    useStateContext();
8
  const [isRegister, setIsRegister] = useState(false);
9
  const [message, setMessage] = useState();
10
  const [Agree, setAgree] = useState(false);
11
  const [registerForm, setRegisterForm] = useState({
12
    firstName: "",
13
    lastName: "",
14
    email: "",
15
    password: "",
16
    email: "",
17
    phoneNumber: "",
18
  });
19
20
  const [loginForm, setLoginForm] = useState({
21
    email: "",
22
    password: "",
23
  });
24
25
  const handleEdit = (val, field) => {
26
    setLoginForm({ ...loginForm, [field]: val });
27
  };
28
29
  const handleEditRegister = (val, field) => {
30
    setRegisterForm({ ...registerForm, [field]: val });
31
  };
32
33
  const createAccount = async () => {
34
    const res = await auth.registerUser(registerForm);
35
    console.log(res);
36
    if (!Agree) {
37
      setMessage("Your have to agree to the terms before you can register");
38
    } else if (res.errors) {
39
      setMessage("Error user not registered");
40
    } else {
41
      setMessage(res.data.message);
42
      setIsRegister(false);
43
    }
44
  };
45
46
  const validPass = async () => {
47
    console.log(loginForm["email"], loginForm["password"]);
48
    const res = await auth.login(loginForm["email"], loginForm["password"]);
49
    console.log(res.message);
50
    if (res.message === "Success") {
51
      setIsLoggedIn(true);
52
      setIsServerAcc(true);
53
      setDisplayForm(false);
54
    }
55
  };
56
57
  const registerForms = () => {
58
    return register.map((item, index) => {
59
      return (
60
        <div key={index} classname="border-b-2 my-8 w-full text-xl">
61
          <label>Enter a {item.title}</label>
62
          <input
63
            value={registerForm[`${item.name}`]}
64
            onChange={(e) => {
65
              handleEditRegister(e.target.value, e.target.name);
66
            }}
67
            className="bg-gray-50 border border-gray-300 text-gray-900
68
            text-sm rounded-lg block p-2.5 w-full"
69
            type={item.type}
70
            name={item.name}
71
          />
72
        </div>
73
      );
74
    });
75
  };
76
77
  return (
78
    <div
79
      className="fixed top-1/2 left-1/2 z-10 rounded-xl px-3 outline outline-DarkBlue
80
        transform -translate-x-1/2 -translate-y-1/2 bg-white py-5"
81
    >
82
      <button
83
        onClick={() => {
84
          setDisplayForm(false);
85
          setRegisterForm({
86
            firstName: "",
87
            lastName: "",
88
            email: "",
89
            password: "",
90
            email: "",
91
            phoneNumber: "",
92
          });
93
        }}
94
      >
95
        Close
96
      </button>
97
      {isRegister ? (
98
        <div>
99
          <h1 className="font-semibold text-2xl text-center"> Register </h1>
100
          <form>{registerForms()}</form>
101
          <div className="flex justify-between py-4 align-middle">
102
            <input
103
              type="checkbox"
104
              id="terms"
105
              checked={Agree}
106
              onChange={(e) => {
107
                setAgree(e.target.checked);
108
              }}
109
            />
110
            <label for="terms" className="px-4">
111
              <span className="text-xs text-slate-500 ">
112
                By registering, you agree to our terms and conditions and
113
                <a
114
                  className="underline text-blue-400"
115
                  onClick={() => {
116
                    console.log("hello");
117
                  }}
118
                >
119
                  {" "}
120
                  privacy policy
121
                </a>
122
              </span>
123
            </label>
124
          </div>
125
          <button
126
            onClick={() => {
127
              createAccount();
128
              setRegisterForm({
129
                firstName: "",
130
                lastName: "",
131
                email: "",
132
                password: "",
133
                email: "",
134
                phoneNumber: "",
135
              });
136
              setMessage("");
137
            }}
138
            className="bg-violet-500 py-1 text-white rounded-full w-72
139
         hover:bg-violet-600 transition-colors mt-3"
140
          >
141
            Register
142
          </button>
143
        </div>
144
      ) : (
145
        <div>
146
          <h1 className="font-semibold text-2xl text-center"> Login </h1>
147
          <form>
148
            <div className="w-full">
149
              <div className="border-b-2 my-8 w-full text-xl">
150
                <input
151
                  type="text"
152
                  value={loginForm["email"]}
153
                  placeholder="Email"
154
                  name="email"
155
                  onChange={(e) => {
156
                    handleEdit(e.target.value, e.target.name);
157
                  }}
158
                  className="bg-gray-50 border border-gray-300 text-gray-900
159
              text-sm rounded-lg block p-2.5 w-full"
160
                />
161
              </div>
162
              <div className="border-b-2 my-8 w-full text-xl">
163
                <input
164
                  type="password"
165
                  onChange={(e) => {
166
                    handleEdit(e.target.value, e.target.name);
167
                  }}
168
                  value={loginForm["password"]}
169
                  name="password"
170
                  placeholder="Password"
171
                  className="bg-gray-50 border border-gray-300 text-gray-900
172
              text-sm rounded-lg block p-2.5 w-full"
173
                />
174
              </div>
175
            </div>
176
            {/* {isIncorrect ? (
177
          <div className="text-center text-xl text-red-700 font-semibold">
178
            <p>Incorrect password or email please try again!</p>
179
          </div>
180
        ) : null} */}
181
182
            <div className="p-3">
183
              <button
184
                type="button"
185
                onClick={() => {
186
                  window.location.href =
187
                    process.env.REACT_APP_GOOGLE_LOGIN_API_URL;
188
                }}
189
                className="text-white bg-[#4285F4] hover:bg-[#4285F4]/90 focus:ring-4 focus:outline-none focus:ring-[#4285F4]/50 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center dark:focus:ring-[#4285F4]/55 mr-2 mb-2"
190
              >
191
                <svg
192
                  class="w-4 h-4 mr-2 -ml-1"
193
                  aria-hidden="true"
194
                  focusable="false"
195
                  data-prefix="fab"
196
                  data-icon="google"
197
                  role="img"
198
                  xmlns="http://www.w3.org/2000/svg"
199
                  viewBox="0 0 488 512"
200
                >
201
                  <path
202
                    fill="currentColor"
203
                    d="M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"
204
                  ></path>
205
                </svg>
206
                Sign in with Google
207
              </button>
208
            </div>
209
210
            <div className="p-3">
211
              <button
212
                onClick={(e) => {
213
                  e.preventDefault();
214
                  validPass();
215
                }}
216
                className="bg-violet-500 py-1 text-white rounded-full w-72
217
         hover:bg-violet-600 transition-colors"
218
              >
219
                Login
220
              </button>
221
              <button
222
                onClick={(e) => {
223
                  setIsRegister(true);
224
                }}
225
                className="bg-violet-500 py-1 text-white rounded-full w-72
226
         hover:bg-violet-600 transition-colors mt-3"
227
              >
228
                Register
229
              </button>
230
            </div>
231
          </form>
232
        </div>
233
      )}
234
      {message ? (
235
        <p className="text-center font-semibold pt-2 underline">{message}</p>
236
      ) : null}
237
    </div>
238
  );
239
};
240
241
export default LoginForm;
242