|
@@ -1,117 +1,44 @@
|
|
|
-import React, { Component } from "react";
|
|
|
+import React from "react";
|
|
|
|
|
|
+import { useForm } from "../hooks/useForm";
|
|
|
import Input from "../input";
|
|
|
import Button from "../button/button";
|
|
|
+import { logInForm } from "../../utils/formFields";
|
|
|
|
|
|
-export default class AuthForm extends Component {
|
|
|
- state = {
|
|
|
- form: {
|
|
|
- email: {
|
|
|
- id: 1,
|
|
|
- name: "email",
|
|
|
- type: "email",
|
|
|
- label: "Email",
|
|
|
- validation: {
|
|
|
- requred: true
|
|
|
- },
|
|
|
- fail: false,
|
|
|
- touch: false,
|
|
|
- value: ""
|
|
|
- },
|
|
|
- password: {
|
|
|
- id: 2,
|
|
|
- name: "password",
|
|
|
- type: "password",
|
|
|
- label: "Password",
|
|
|
- validation: {
|
|
|
- requred: true,
|
|
|
- minL: 6
|
|
|
- },
|
|
|
- fail: false,
|
|
|
- touch: false,
|
|
|
- value: ""
|
|
|
- }
|
|
|
- },
|
|
|
- validForm: false
|
|
|
- };
|
|
|
-
|
|
|
- validator = (rules, value) => {
|
|
|
- const { requred, minL } = rules;
|
|
|
-
|
|
|
- let valid = true;
|
|
|
- if (requred) {
|
|
|
- valid = value.trim() === "" && valid;
|
|
|
- }
|
|
|
-
|
|
|
- if (minL) {
|
|
|
- valid = value.trim().length < minL && valid;
|
|
|
- }
|
|
|
-
|
|
|
- return valid;
|
|
|
- };
|
|
|
+export const AuthForm = ({ error, submitHandler }) => {
|
|
|
+ const [form, { onChangeHandler, returnAllValues, focusEvent, blurEvent }] = useForm(logInForm);
|
|
|
|
|
|
- submit = e => {
|
|
|
+ const submit = e => {
|
|
|
e.preventDefault();
|
|
|
-
|
|
|
- const values = Object.keys(this.state.form).reduce((prev, elem) => {
|
|
|
- return { ...prev, [elem]: this.state.form[elem].value };
|
|
|
- }, {});
|
|
|
-
|
|
|
- this.props.submitHandler(values);
|
|
|
- };
|
|
|
-
|
|
|
- onChangeHandler = e => {
|
|
|
- const { name, value } = e.target;
|
|
|
-
|
|
|
- this.setState(prevState => {
|
|
|
- const values = Object.keys(prevState.form).reduce((prev, elem) => {
|
|
|
- if (elem === name) return prev.concat(value);
|
|
|
- return prev.concat(prevState.form[elem].value);
|
|
|
- }, []);
|
|
|
-
|
|
|
- return {
|
|
|
- ...prevState,
|
|
|
- form: {
|
|
|
- ...prevState.form,
|
|
|
- [name]: {
|
|
|
- ...prevState.form[name],
|
|
|
- value,
|
|
|
- touch: true,
|
|
|
- fail: this.validator(prevState.form[name].validation, value)
|
|
|
- }
|
|
|
- },
|
|
|
- validForm: values.some(value => value)
|
|
|
- };
|
|
|
- });
|
|
|
+ const values = returnAllValues();
|
|
|
+ submitHandler(values);
|
|
|
};
|
|
|
|
|
|
- render() {
|
|
|
- const { form, validForm } = this.state;
|
|
|
- const { error } = this.props;
|
|
|
- return (
|
|
|
- <div className="auth__auth-box">
|
|
|
- <form onSubmit={this.submit} className="auth__auth-form">
|
|
|
- {Object.keys(form).map(input_name => {
|
|
|
- return (
|
|
|
- <Input
|
|
|
- key={form[input_name].id}
|
|
|
- id={form[input_name].id}
|
|
|
- value={form[input_name].value}
|
|
|
- name={form[input_name].name}
|
|
|
- type={form[input_name].type}
|
|
|
- fail={form[input_name].fail}
|
|
|
- touch={form[input_name].touch}
|
|
|
- label={form[input_name].label}
|
|
|
- onChange={this.onChangeHandler}
|
|
|
- />
|
|
|
- );
|
|
|
- })}
|
|
|
- {error && <p className="auth__error-auth-text">{error}</p>}
|
|
|
- <div className="auth__control-box">
|
|
|
- <Button disabled={!validForm} className="auth__submit-btn" type="submit" text="Log In" />
|
|
|
- </div>
|
|
|
- </form>
|
|
|
- </div>
|
|
|
- );
|
|
|
- }
|
|
|
-}
|
|
|
+ return (
|
|
|
+ <div className="auth__auth-box">
|
|
|
+ <form onSubmit={submit} className="auth__auth-form">
|
|
|
+ {Object.keys(form.form).map(input_name => {
|
|
|
+ return (
|
|
|
+ <Input
|
|
|
+ key={form.form[input_name].id}
|
|
|
+ id={form.form[input_name].id}
|
|
|
+ value={form.form[input_name].value}
|
|
|
+ name={form.form[input_name].name}
|
|
|
+ type={form.form[input_name].type}
|
|
|
+ fail={form.form[input_name].fail}
|
|
|
+ touch={form.form[input_name].touch}
|
|
|
+ label={form.form[input_name].label}
|
|
|
+ onChange={onChangeHandler}
|
|
|
+ onFocus={focusEvent}
|
|
|
+ onBlur={blurEvent}
|
|
|
+ />
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ {error && <p className="auth__error-auth-text">{error}</p>}
|
|
|
+ <div className="auth__control-box">
|
|
|
+ <Button disabled={!form.validForm} className="auth__submit-btn" type="submit" text="Log In" />
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+};
|