client/src/components/Register.js
author ymh <ymh.work@gmail.com>
Thu, 20 Jul 2017 11:23:08 +0200
changeset 124 c77570164050
parent 94 2c2a9c8dc216
child 129 d48946d164c6
permissions -rw-r--r--
implement soft delete and indicator that session and notes have been modiied
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import React, { Component } from 'react';
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
import { connect } from 'react-redux';
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
import { bindActionCreators } from 'redux';
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
     4
import { Grid, Row, Col, Panel, FormGroup, ControlLabel, FormControl, Button, HelpBlock } from 'react-bootstrap';
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
import '../App.css';
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
import Navbar from './Navbar';
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
import * as authActions from '../actions/authActions';
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
class Register extends Component {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
  register = () => {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
    const username = this.username.value;
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
    const email = this.email.value;
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
    const password1 = this.password1.value;
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    15
    const password2 = this.password2.value;
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
    this.props.authActions.registerSubmit(username, email, password1, password2);
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
  }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
94
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    20
  submit = (e) => {
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    21
    e.preventDefault();
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    22
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    23
    this.register();
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    24
  }
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    25
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    26
  onClickLogin = (e) => {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    27
    e.preventDefault();
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    28
    this.props.history.push('/login');
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    29
  }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    30
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    31
  renderErrorMessage(errorMessages, fieldname) {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    32
    if (errorMessages && errorMessages.has(fieldname)) {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    33
      return errorMessages.get(fieldname).map((message, key) =>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    34
        <HelpBlock key={ key }>{ message }</HelpBlock>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    35
      );
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    36
    }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    37
  }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    38
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    39
  render() {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    40
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    41
    const panelHeader = (
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    42
      <h4 className="text-uppercase text-center">Register</h4>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    43
    )
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    44
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    45
    const errorMessages = this.props.register.get('errorMessages');
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    46
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    47
    return (
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    48
      <div>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    49
        <Navbar history={this.props.history} />
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    50
        <Grid fluid>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    51
          <Row>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    52
            <Col md={6} mdOffset={3}>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    53
              <Panel header={ panelHeader } className="panel-login">
94
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    54
                <form onSubmit={this.submit}>
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    55
                  <FormGroup validationState={ errorMessages && errorMessages.has('username') ? 'error' : null }>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    56
                    <ControlLabel>Username</ControlLabel>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    57
                    <FormControl componentClass="input" type="text" inputRef={ref => { this.username = ref; }} />
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    58
                    { this.renderErrorMessage(errorMessages, 'username') }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    59
                  </FormGroup>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    60
                  <FormGroup validationState={ errorMessages && errorMessages.has('email') ? 'error' : null }>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    61
                    <ControlLabel>Email</ControlLabel>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    62
                    <FormControl componentClass="input" type="email" inputRef={ref => { this.email = ref; }} />
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    63
                    { this.renderErrorMessage(errorMessages, 'email') }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    64
                  </FormGroup>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    65
                  <FormGroup validationState={ errorMessages && errorMessages.has('password1') ? 'error' : null }>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    66
                    <ControlLabel>Password</ControlLabel>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    67
                    <FormControl componentClass="input" type="password" inputRef={ref => { this.password1 = ref; }} />
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    68
                    { this.renderErrorMessage(errorMessages, 'password1') }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    69
                  </FormGroup>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    70
                  <FormGroup validationState={ errorMessages && errorMessages.has('password2') ? 'error' : null }>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    71
                    <ControlLabel>Confirm password</ControlLabel>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    72
                    <FormControl componentClass="input" type="password" inputRef={ref => { this.password2 = ref; }} />
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    73
                    { this.renderErrorMessage(errorMessages, 'password2') }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    74
                  </FormGroup>
94
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    75
                  <Button type="submit" block bsStyle="primary" onClick={this.register}>Register</Button>
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    76
                </form>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    77
              </Panel>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    78
              <p className="text-center">
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    79
                <a className="text-muted" href="/login" onClick={ this.onClickLogin }>Already registered? Sign in.</a>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    80
              </p>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    81
            </Col>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    82
          </Row>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    83
        </Grid>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    84
      </div>
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    85
    );
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    86
  }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    87
}
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    88
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    89
function mapStateToProps(state, props) {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    90
  return {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    91
    register: state['register']
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    92
  };
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    93
}
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    94
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    95
function mapDispatchToProps(dispatch) {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    96
  return {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    97
    authActions: bindActionCreators(authActions, dispatch)
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    98
  }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    99
}
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   100
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   101
export default connect(mapStateToProps, mapDispatchToProps)(Register);