client/src/components/SessionForm.js
author salimr <riwad.salim@yahoo.fr>
Thu, 16 Aug 2018 22:32:36 +0200
changeset 146 4f4bb2b3ef39
parent 143 cfcbf4bc66f1
child 148 fcce52a159bc
permissions -rw-r--r--
Removing Modal from react-bootstrap and adding react-modal
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';
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
     4
import { Collapse } from 'react-bootstrap';
46
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';
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 46
diff changeset
     7
import * as authActions from '../actions/authActions';
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
import _ from 'lodash';
135
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
     9
import './SessionForm.css';
46
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
class SessionForm extends Component {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 46
diff changeset
    13
  state = {
135
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    14
    createGroup: false,
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    15
    protocolOpen: false
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 46
diff changeset
    16
  }
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 46
diff changeset
    17
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
  onChange = (e) => {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
    const { name, value } = e.target;
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
    const changes = { [name]: value }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    21
    this.onChangeThrottle(changes);
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
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    24
  onChangeThrottle = _.debounce((changes) => {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    25
    this.props.sessionsActions.updateSession(this.props.currentSession, changes);
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    26
  }, 750)
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    27
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    28
  onGroupChange = (e) => {
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    29
    const groupName = e.target.value;
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    30
133
6f3078f7fd47 Work on correct protocol propagation
ymh <ymh.work@gmail.com>
parents: 132
diff changeset
    31
    const group = this.props.groups.find((g) => g.get('name') === groupName);
6f3078f7fd47 Work on correct protocol propagation
ymh <ymh.work@gmail.com>
parents: 132
diff changeset
    32
6f3078f7fd47 Work on correct protocol propagation
ymh <ymh.work@gmail.com>
parents: 132
diff changeset
    33
    this.props.sessionsActions.updateSession(this.props.currentSession, { group: groupName, protocol: group?group.get('protocol'):'' });
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    34
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    35
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    36
  componentWillUpdate = (nextProps, nextState) => {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    37
    if (nextState.createGroup && nextProps.createGroup.get('success')) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    38
      this.setState({ createGroup: false })
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    39
    }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    40
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    41
135
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    42
  toggleProtocol = (e) => {
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    43
    e.preventDefault();
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    44
    this.setState({
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    45
      protocolOpen: !this.state.protocolOpen
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    46
    });
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    47
  }
b5aafa462956 Cleaning session form. The group and protocol are no longer editable. Removing cruft
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    48
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    49
  render() {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    50
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    51
    if (!this.props.currentSession) {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    52
      return (
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    53
        <form></form>
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    54
      )
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    55
    }
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
    return (
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    58
        <div className="panel-default">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    59
          <div class="panel-body">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    60
            <form onSubmit={ e => { e.preventDefault() } }>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    61
              <div className="form-group">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    62
                <label className="control-label">Titre</label>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    63
                <input className="form-control"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    64
                  name="title"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    65
                  defaultValue={ this.props.currentSession.title }
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    66
                  onChange={ this.onChange }
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    67
                  type="text"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    68
                  placeholder="Entrez un titre"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    69
                />
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    70
              </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    71
              <div className="form-group">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    72
                <label className="control-label">Description</label>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    73
                <input className="form-control"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    74
                  type="textarea"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    75
                  name="description"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    76
                  defaultValue={ this.props.currentSession.description }
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    77
                  onChange={ this.onChange }
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    78
                  placeholder="Entrez une description"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    79
                />
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    80
              </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    81
              <div className="form-group">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    82
                <label className="control-label">Group</label>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    83
                <p>{this.props.currentSession.group}</p>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    84
              </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    85
              <div className="form-group">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    86
                <label className="control-label" onClick={this.toggleProtocol}>Protocol {this.state.protocolOpen?<span className="material-icons protocol-toggle">&#xE313;</span>:<span className="material-icons protocol-toggle">&#xE315;</span>}</label>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    87
                <Collapse in={this.state.protocolOpen}>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    88
                <pre>{JSON.stringify(this.props.currentSession.protocol, null, 2)}</pre>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    89
                </Collapse>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    90
              </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    91
            </form>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    92
          </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 135
diff changeset
    93
        </div>
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    94
    );
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    95
  }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    96
}
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    97
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    98
function mapStateToProps(state, props) {
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    99
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
   100
  let group;
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
   101
  if (props.session && props.session.get('group')) {
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
   102
    group = state.get('groups').find(group => props.session.get('group') === group.get('name'))
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
   103
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
   104
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   105
  return {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   106
    currentSession: props.session,
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   107
    createGroup: state.get('createGroup'),
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   108
    groups: state.get('groups'),
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
   109
    group
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   110
  };
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   111
}
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   112
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   113
function mapDispatchToProps(dispatch) {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   114
  return {
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   115
    sessionsActions: bindActionCreators(sessionsActions, dispatch),
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 46
diff changeset
   116
    authActions: bindActionCreators(authActions, dispatch),
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   117
  }
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   118
}
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   119
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   120
export default connect(mapStateToProps, mapDispatchToProps)(SessionForm);