| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- import React, { Component } from 'react';
- import BasePage from '@/components/Layout/BasePage';
- import Link from 'next/link';
- import { Input, CustomInput } from 'reactstrap';
- import FormValidator from '@/components/Forms/Validator.js';
- class Register extends Component {
- state = {
- formRegister: {
- email: '',
- password: '',
- password2: '',
- terms: false
- }
- }
- /**
- * Validate input using onChange event
- * @param {String} formName The name of the form in the state object
- * @return {Function} a function used for the event
- */
- validateOnChange = event => {
- const input = event.target;
- const form = input.form
- const value = input.type === 'checkbox' ? input.checked : input.value;
- const result = FormValidator.validate(input);
- this.setState({
- [form.name]: {
- ...this.state[form.name],
- [input.name]: value,
- errors: {
- ...this.state[form.name].errors,
- [input.name]: result
- }
- }
- });
- }
- onSubmit = e => {
- const form = e.target;
- const inputs = [...form.elements].filter(i => ['INPUT', 'SELECT'].includes(i.nodeName))
- const { errors, hasError } = FormValidator.bulkValidate(inputs)
- this.setState({
- [form.name]: {
- ...this.state[form.name],
- errors
- }
- });
- console.log(hasError ? 'Form has errors. Check!' : 'Form Submitted!')
- e.preventDefault()
- }
- /* Simplify error check */
- hasError = (formName, inputName, method) => {
- return this.state[formName] &&
- this.state[formName].errors &&
- this.state[formName].errors[inputName] &&
- this.state[formName].errors[inputName][method]
- }
- render() {
- return (
- <div className="block-center mt-4 wd-xl">
- {/* START card */}
- <div className="card card-flat">
- <div className="card-header text-center bg-dark">
- <a href="">
- <img className="block-center" src="/static/img/logo.png" alt="Logo"/>
- </a>
- </div>
- <div className="card-body">
- <p className="text-center py-2">SIGNUP TO GET INSTANT ACCESS.</p>
- <form className="mb-3" name="formRegister" onSubmit={this.onSubmit}>
- <div className="form-group">
- <label className="text-muted" htmlFor="signupInputEmail1">Email address</label>
- <div className="input-group with-focus">
- <Input type="email"
- name="email"
- className="border-right-0"
- placeholder="Enter email"
- invalid={this.hasError('formRegister','email','required')||this.hasError('formRegister','email','email')}
- onChange={this.validateOnChange}
- data-validate='["required", "email"]'
- value={this.state.formRegister.email}/>
- <div className="input-group-append">
- <span className="input-group-text text-muted bg-transparent border-left-0">
- <em className="fa fa-envelope"></em>
- </span>
- </div>
- { this.hasError('formRegister','email','required') && <span className="invalid-feedback">Field is required</span> }
- { this.hasError('formRegister','email','email') && <span className="invalid-feedback">Field must be valid email</span> }
- </div>
- </div>
- <div className="form-group">
- <label className="text-muted" htmlFor="signupInputPassword1">Password</label>
- <div className="input-group with-focus">
- <Input type="text"
- id="id-password"
- name="password"
- className="border-right-0"
- placeholder="Password"
- invalid={this.hasError('formRegister','password','required')}
- onChange={this.validateOnChange}
- data-validate='["required"]'
- value={this.state.formRegister.password}
- />
- <div className="input-group-append">
- <span className="input-group-text text-muted bg-transparent border-left-0">
- <em className="fa fa-lock"></em>
- </span>
- </div>
- <span className="invalid-feedback">Field is required</span>
- </div>
- </div>
- <div className="form-group">
- <label className="text-muted" htmlFor="signupInputRePassword1">Retype Password</label>
- <div className="input-group with-focus">
- <Input type="text" name="password2"
- className="border-right-0"
- placeholder="Retype assword"
- invalid={this.hasError('formRegister','password2','equalto')}
- onChange={this.validateOnChange}
- data-validate='["equalto"]'
- value={this.state.formRegister.password2}
- data-param="id-password"
- />
- <div className="input-group-append">
- <span className="input-group-text text-muted bg-transparent border-left-0">
- <em className="fa fa-lock"></em>
- </span>
- </div>
- <span className="invalid-feedback">Field must be equal to previous</span>
- </div>
- </div>
- <CustomInput type="checkbox" id="terms"
- name="terms"
- label="I agree with the terms"
- invalid={this.hasError('formRegister','terms','required')}
- onChange={this.validateOnChange}
- data-validate='["required"]'
- checked={this.state.formRegister.terms}>
- <span className="invalid-feedback">Field is required</span>
- </CustomInput>
- <button className="btn btn-block btn-primary mt-3" type="submit">Create account</button>
- </form>
- <p className="pt-3 text-center">Have an account?</p>
- <Link href="/pages/login" as="/login"><button type="button" className="btn btn-block btn-secondary">Signup</button></Link>
- </div>
- </div>
- {/* END card */}
- <div className="p-3 text-center">
- <span className="mr-2">©</span>
- <span>2020</span>
- <span className="mx-2">-</span>
- <span>Angle</span>
- <br/>
- <span>Bootstrap Admin Template</span>
- </div>
- </div>
- );
- }
- }
- Register.Layout = BasePage
- export default Register;
|