client/src/components/CategoriesTooltip.js
author Alexandre Segura <mex.zktk@gmail.com>
Thu, 29 Jun 2017 17:02:21 +0200
changeset 107 e6f85e26b08c
parent 25 e04714a1d4eb
child 143 cfcbf4bc66f1
permissions -rw-r--r--
Confirm logout when pending requests, try to purge offline.outbox
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
import { FormGroup, FormControl, Button } from 'react-bootstrap';
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
class CategoriesTooltip extends Component {
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     6
  state = {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     7
    activeCategory: null,
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
     8
    showCommentControl: false
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
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    11
  componentDidUpdate = () => {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    12
    if (this.state.showCommentControl) {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    13
      this.commentControl.focus();
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
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    17
  isCategoryActive = (category) => {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    18
    return this.state.activeCategory && this.state.activeCategory.key === category.key
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    19
  }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    20
21
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    21
  onButtonClick = (category) => {
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    22
    if (category.hasOwnProperty('hasComment') && category.hasComment === true) {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    23
      this.setState({
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    24
        activeCategory: this.state.activeCategory ? null : category,
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    25
        showCommentControl: !this.state.showCommentControl
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    26
      })
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    27
    } else {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    28
      if (typeof this.props.onCategoryClick === 'function') {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    29
        this.props.onCategoryClick(category)
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
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    34
  onSubmit = (e) => {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    35
    e.preventDefault();
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    36
    if (this.state.showCommentControl) {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    37
      const comment = this.commentControl.value;
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    38
      const { activeCategory } = this.state;
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    39
      Object.assign(activeCategory, { comment: comment });
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    40
      if (typeof this.props.onCategoryClick === 'function') {
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    41
        this.props.onCategoryClick(activeCategory)
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    42
      }
21
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
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    46
  render() {
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    47
    return (
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    48
      <div className="categories-tooltip">
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    49
        <form onSubmit={ this.onSubmit }>
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    50
          <FormGroup className="buttons">
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    51
          {this.props.categories.map((category) =>
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    52
            <Button
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    53
              key={ category.name }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    54
              bsStyle="primary"
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    55
              style={{ backgroundColor: category.color }}
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    56
              active={ this.isCategoryActive(category)  }
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    57
              onClick={ this.onButtonClick.bind(this, category) }>{ category.name }</Button>
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    58
          )}
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    59
          </FormGroup>
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    60
          {this.state.showCommentControl &&
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    61
          <FormGroup>
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    62
            <FormControl inputRef={(ref) => { this.commentControl = ref; }} />
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    63
          </FormGroup>}
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    64
        </form>
21
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    65
      </div>
284e866f55c7 First version of categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    66
    );
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
export default CategoriesTooltip