client/src/components/Login.js
author ymh <ymh.work@gmail.com>
Fri, 16 Nov 2018 17:01:19 +0100
changeset 174 ac1a026edd58
parent 171 03334a31130a
child 181 cda96c025330
permissions -rw-r--r--
Correct display of protocol small improvment on fonts
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import React, { Component } from 'react';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
import { connect } from 'react-redux';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
import { bindActionCreators } from 'redux';
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
     4
import { Trans } from 'react-i18next';
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
     5
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
import '../App.css';
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
     7
import './Login.css';
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
     8
// import Navbar from './Navbar';
44
3b20e2b584fe Introduce authentication through API.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
     9
import * as authActions from '../actions/authActions';
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    10
import { getLoginErrorMessages } from '../selectors/authSelectors';
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    11
import * as R from 'ramda';
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
class Login extends Component {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    15
  state = {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    16
    username: '',
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    17
    password: ''
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    18
  }
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    19
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    20
  handleInputChange = (e) => {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    21
    const target = e.target;
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    22
    const value = target.value;
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    23
    const name = target.name;
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    24
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    25
    this.setState({
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    26
      [name]: value
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    27
    });
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    28
  }
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    29
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    30
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    31
  login = () => {
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    32
    const { username, password } = this.state;
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    33
44
3b20e2b584fe Introduce authentication through API.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
    34
    this.props.authActions.loginSubmit(username, password);
3b20e2b584fe Introduce authentication through API.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
    35
  }
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    36
94
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    37
  submit = (e) => {
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    38
    e.preventDefault();
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    39
    this.login();
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    40
  }
2c2a9c8dc216 Submit form on enter.
Alexandre Segura <mex.zktk@gmail.com>
parents: 90
diff changeset
    41
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    42
  onClickRegister = (e) => {
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    43
    e.preventDefault();
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    44
    this.props.history.push('/register');
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    45
  }
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    46
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    47
  renderErrorMessage(errorMessages, fieldname) {
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    48
    if (errorMessages && errorMessages.has(fieldname)) {
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    49
      return errorMessages.get(fieldname).map((message, key) =>
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    50
        <p className="form-text" key={ key }>{ message }</p>
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    51
      );
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    52
    }
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    53
  }
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    54
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    55
  renderNonFieldErrors(errorMessages) {
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    56
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    57
    if (errorMessages && errorMessages.error) {
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    58
      return (
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    59
        <div className="alert alert-danger mt-4" role="alert">
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    60
          <Trans i18nKey="login.login_error">Unable to log in.</Trans>
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    61
        </div>
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    62
      )
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    63
    }
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    64
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    65
    const errors = R.path(['data','non_field_errors'], errorMessages);
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    66
    if (errors) {
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    67
      return (
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    68
        <div className="alert alert-danger mt-4" role="alert">
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    69
        { errors.map((message, key) =>
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    70
          <p key={ key }><Trans i18nKey="login.credentials_error">{ message }</Trans></p>
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    71
        ) }
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    72
        </div>
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    73
      )
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    74
    }
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    75
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    76
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    77
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    78
  render() {
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    79
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    80
    const errorMessages = this.props.errorMessages;
90
990f2c928b15 Improve login errors.
Alexandre Segura <mex.zktk@gmail.com>
parents: 89
diff changeset
    81
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    82
    return (
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    83
      <div>
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    84
        {/* <Navbar history={this.props.history} /> */}
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    85
        <div className="container-fluid">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    86
          <div className="row">
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    87
            <div className="col-lg-6 offset-md-3">
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    88
              <div className="panel-login panel panel-default">
154
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
    89
                <div className="card-header bg-secondary border-0 mt-5 pt-5">
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
    90
                  <h4 className="text-center card-title font-weight-bold text-lg">IRI Notes</h4>
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
    91
                  <form className="pt-3 ml-5 pl-5" onSubmit={this.submit}>
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    92
                    <div className="form-group mb-2 ml-3 w-75" >
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    93
                      <label className="col-form-label text-primary font-weight-bold mt-2 text-capitalize"><Trans i18nKey="common.username">Nom d'utilisateur</Trans></label>
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    94
                      <input className="form-control bg-irinotes-form border-0 text-muted" type="text" onChange={this.handleInputChange} name="username" />
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    95
                      {/* { this.renderErrorMessage(errorMessages, 'username') } */}
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    96
                    </div>
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    97
                    <div className="form-group mb-2 ml-3 w-75">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    98
                      <label className="col-form-label text-primary font-weight-bold mt-2 text-capitalize"><Trans i18nKey="common.password">Mot de passe</Trans></label>
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    99
                      <input className="form-control bg-irinotes-form border-0 text-muted" type="password" onChange={this.handleInputChange} name="password" />
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   100
                      {/* { this.renderErrorMessage(errorMessages, 'password') } */}
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   101
                    </div>
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
   102
                    { this.renderNonFieldErrors(errorMessages) }
154
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
   103
                    <div className="text-center mr-5 pr-5">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   104
                    <button type="submit" className="btn btn-primary btn-lg text-secondary font-weight-bold mt-3 text-capitalize"><Trans i18nKey='common.connect'>Se connecter</Trans></button>
154
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
   105
                    </div>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   106
                  </form>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   107
                </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   108
              </div>
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
   109
              <p className="text-center">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   110
                <a className="text-muted" href="/register" onClick={ this.onClickRegister }><Trans i18nKey='login.registration_message'>Pas encore inscrit ? Créer un compte.</Trans></a>
89
06f609adfbf8 Add registration page.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
   111
              </p>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   112
            </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   113
          </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
   114
        </div>
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   115
      </div>
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   116
    );
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   117
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   118
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   119
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   120
function mapStateToProps(state, props) {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   121
  return {
170
7da1d5137b0b Upgrade dependencies and correct theme colors
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
   122
    errorMessages: getLoginErrorMessages(state)
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   123
  };
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   124
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   125
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   126
function mapDispatchToProps(dispatch) {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   127
  return {
44
3b20e2b584fe Introduce authentication through API.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
   128
    authActions: bindActionCreators(authActions, dispatch)
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   129
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   130
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   131
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   132
export default connect(mapStateToProps, mapDispatchToProps)(Login);