client/src/components/SessionForm.js
author Alexandre Segura <mex.zktk@gmail.com>
Tue, 20 Jun 2017 16:08:12 +0200
changeset 63 4088f8dc6b52
parent 46 4aa24724e5b3
child 100 6fd752d98933
permissions -rw-r--r--
Improve session page layout, introduce summary.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import React, { Component } from 'react';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
import { connect } from 'react-redux';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
import { bindActionCreators } from 'redux';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
import { Panel, FormGroup, ControlLabel, FormControl } from 'react-bootstrap';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
import '../App.css';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
import * as sessionsActions from '../actions/sessionsActions';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
import _ from 'lodash';
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
class SessionForm extends Component {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
  onChange = (e) => {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
    const { name, value } = e.target;
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
    const changes = { [name]: value }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
    this.onChangeThrottle(changes);
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    15
  }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
  onChangeThrottle = _.debounce((changes) => {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
    this.props.sessionsActions.updateSession(this.props.currentSession, changes);
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
  }, 750)
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    21
  render() {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    22
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    23
    if (!this.props.currentSession) {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    24
      return (
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    25
        <form></form>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    26
      )
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    27
    }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    28
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    29
    return (
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    30
      <Panel>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    31
        <form onSubmit={ e => { e.preventDefault() } }>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    32
          <FormGroup>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    33
            <ControlLabel>Title</ControlLabel>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    34
            <FormControl
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    35
              name="title"
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    36
              defaultValue={ this.props.currentSession.title }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    37
              onChange={ this.onChange }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    38
              type="text"
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    39
              placeholder="Enter a title for this session"
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    40
              inputRef={ ref => { this.title = ref; } }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    41
            />
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    42
          </FormGroup>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    43
          <FormGroup>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    44
            <ControlLabel>Description</ControlLabel>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    45
            <FormControl
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    46
              name="description"
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    47
              componentClass="textarea"
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    48
              defaultValue={ this.props.currentSession.description }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    49
              onChange={ this.onChange }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    50
              placeholder="Enter a description for this session"
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    51
              inputRef={ ref => { this.description = ref; } }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    52
            />
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    53
          </FormGroup>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    54
        </form>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    55
      </Panel>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    56
    );
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    57
  }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    58
}
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    59
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    60
function mapStateToProps(state, props) {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    61
  return {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    62
    currentSession: props.session,
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    63
  };
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    64
}
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    65
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    66
function mapDispatchToProps(dispatch) {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    67
  return {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    68
    sessionsActions: bindActionCreators(sessionsActions, dispatch),
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    69
  }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    70
}
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    71
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    72
export default connect(mapStateToProps, mapDispatchToProps)(SessionForm);