client/src/components/CategoriesTooltip.js
author salimr <riwad.salim@yahoo.fr>
Tue, 09 Oct 2018 18:59:20 +0200
changeset 165 62e5be0df812
parent 161 a642639dbc07
permissions -rw-r--r--
Add ProtocolSummary component
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import React, { Component } from 'react';
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
class CategoriesTooltip extends Component {
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     5
  state = {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     6
    activeCategory: null,
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     7
    showCommentControl: false
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     8
  }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     9
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    10
  componentDidUpdate = () => {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    11
    if (this.state.showCommentControl) {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    12
      this.commentControl.focus();
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    13
    }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    14
  }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    15
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    16
  isCategoryActive = (category) => {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    17
    return this.state.activeCategory && this.state.activeCategory.key === category.key
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    18
  }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    19
21
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
  onButtonClick = (category) => {
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    21
    if (category.hasOwnProperty('hasComment') && category.hasComment === true) {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    22
      this.setState({
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    23
        activeCategory: this.state.activeCategory ? null : category,
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    24
        showCommentControl: !this.state.showCommentControl
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    25
      })
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    26
    } else {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    27
      if (typeof this.props.onCategoryClick === 'function') {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    28
        this.props.onCategoryClick(category)
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    29
      }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    30
    }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    31
  }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    32
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    33
  onSubmit = (e) => {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    34
    e.preventDefault();
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    35
    if (this.state.showCommentControl) {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    36
      const comment = this.commentControl.value;
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    37
      const { activeCategory } = this.state;
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    38
      Object.assign(activeCategory, { comment: comment });
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    39
      if (typeof this.props.onCategoryClick === 'function') {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    40
        this.props.onCategoryClick(activeCategory)
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    41
      }
21
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    42
    }
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    43
  }
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    44
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    45
  render() {
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    46
    return (
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    47
      <div className="categories-tooltip">
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    48
        <form onSubmit={ this.onSubmit }>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    49
          <div className="form-group buttons">
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    50
          {this.props.categories.map((category) =>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    51
            <button type="button"
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    52
              key={ category.name }
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    53
              className="btn btn-sm text-secondary"
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    54
              style={{ backgroundColor: category.color }}
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    55
              active={ this.isCategoryActive(category)  }
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    56
              onClick={ this.onButtonClick.bind(this, category) }>{ category.name }</button>
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    57
          )}
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    58
          </div>
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    59
          {this.state.showCommentControl &&
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    60
          <div className="form-group">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    61
            <input className="form-control"
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    62
            // inputRef={(ref) => { this.commentControl = ref; }}
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    63
            ref={(commentControl) => { this.commentControl = commentControl; }}/>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    64
          </div>}
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    65
        </form>
21
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    66
      </div>
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    67
    );
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    68
  }
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    69
}
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    70
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    71
export default CategoriesTooltip