client/src/components/Login.js
changeset 90 990f2c928b15
parent 89 06f609adfbf8
child 94 2c2a9c8dc216
--- a/client/src/components/Login.js	Mon Jun 26 15:45:50 2017 +0200
+++ b/client/src/components/Login.js	Mon Jun 26 16:43:22 2017 +0200
@@ -1,7 +1,7 @@
 import React, { Component } from 'react';
 import { connect } from 'react-redux';
 import { bindActionCreators } from 'redux';
-import { Grid, Row, Col, Panel, FormGroup, ControlLabel, FormControl, Button, Alert } from 'react-bootstrap';
+import { Grid, Row, Col, Panel, FormGroup, ControlLabel, FormControl, Button, Alert, HelpBlock } from 'react-bootstrap';
 import '../App.css';
 import Navbar from './Navbar';
 import * as authActions from '../actions/authActions';
@@ -20,10 +20,25 @@
     this.props.history.push('/register');
   }
 
-  renderError() {
-    return (
-      <Alert bsStyle="danger">Bad credentials</Alert>
-    )
+  renderErrorMessage(errorMessages, fieldname) {
+    if (errorMessages && errorMessages.has(fieldname)) {
+      return errorMessages.get(fieldname).map((message, key) =>
+        <HelpBlock key={ key }>{ message }</HelpBlock>
+      );
+    }
+  }
+
+  renderNonFieldErrors(errorMessages) {
+    if (errorMessages && errorMessages.has('non_field_errors')) {
+      const errors = errorMessages.get('non_field_errors');
+      return (
+        <Alert bsStyle="danger">
+        { errors.map((message, key) =>
+          <p key={ key }>{ message }</p>
+        ) }
+        </Alert>
+      )
+    }
   }
 
   render() {
@@ -32,6 +47,8 @@
       <h4 className="text-uppercase text-center">Login</h4>
     )
 
+    const errorMessages = this.props.login.get('errorMessages');
+
     return (
       <div>
         <Navbar history={this.props.history} />
@@ -40,15 +57,17 @@
             <Col md={6} mdOffset={3}>
               <Panel header={ panelHeader } className="panel-login">
                 <form>
-                  <FormGroup>
+                  <FormGroup validationState={ errorMessages && errorMessages.has('username') ? 'error' : null }>
                     <ControlLabel>Username</ControlLabel>
                     <FormControl componentClass="input" type="text" inputRef={ref => { this.username = ref; }} />
+                    { this.renderErrorMessage(errorMessages, 'username') }
                   </FormGroup>
-                  <FormGroup>
+                  <FormGroup validationState={ errorMessages && errorMessages.has('password') ? 'error' : null }>
                     <ControlLabel>Password</ControlLabel>
                     <FormControl componentClass="input" type="password" inputRef={ref => { this.password = ref; }} />
+                    { this.renderErrorMessage(errorMessages, 'password') }
                   </FormGroup>
-                  { this.props.login.error && this.renderError() }
+                  { this.renderNonFieldErrors(errorMessages) }
                   <Button block bsStyle="primary" onClick={this.login}>Login</Button>
                 </form>
               </Panel>
@@ -65,7 +84,6 @@
 
 function mapStateToProps(state, props) {
   return {
-    currentUser: state['currentUser'],
     login: state['login']
   };
 }