summaryrefslogtreecommitdiff
path: root/app/client/auth/login.component.js
blob: d2b71455a7f3636b27bc671ba10f5241ea88bd90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { h, Component } from 'preact';
// import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { Redirect } from 'react-router-dom';
// import { Link } from 'react-router-dom';
import * as authActions from './auth.actions';

import { Group, Param, TextInput, Button } from '../common';

class Login extends Component {
  state = {
    username: '',
    password: '',
  }
  constructor() {
    super()
    this.handleChange = this.handleChange.bind(this)
    this.handleSubmit = this.handleSubmit.bind(this)
  }
  handleChange(value, name) {
    this.setState({
      [name]: value,
      error: null,
    })
  }
  handleSubmit(e) {
    e.preventDefault()
    if (this.props.auth.loading) return
    this.props.actions.login(this.state.username, this.state.password)
  }
  render(){
    if (this.props.auth.isAuthenticated) {
      return <Redirect to="/" />
    }
    return (
      <form onSubmit={this.handleSubmit}>
        <h1>Log in</h1><br />
        <Group>
          <TextInput
            autofocus
            autocapitalize="off"
            autocomplete="off"
            title="Username"
            name="username"
            type="text"
            value={this.state.username}
            onInput={this.handleChange}
          />
          <TextInput
            title="Password"
            name="password"
            type="password"
            value={this.state.password}
            onInput={this.handleChange}
          />
          <Button
            loading={this.props.auth.loading}
          >
            Login
          </Button>
          {this.renderAuthError()}
        </Group>
      </form>
    )
  }
  renderAuthError(){
    if (this.props.auth.error) {
      return (
        <div className='form-input-hint'>{"There was an error logging you in (bad password?)"}</div>
      )
    }
    return null
  }
}

const mapStateToProps = (state) => ({
  auth: state.auth,
});

const mapDispatchToProps = (dispatch) => ({
  actions: bindActionCreators(authActions, dispatch)
});

export default connect(mapStateToProps, mapDispatchToProps)(Login);