client/src/components/CategoriesTooltip.js
changeset 25 e04714a1d4eb
parent 21 284e866f55c7
child 143 cfcbf4bc66f1
--- a/client/src/components/CategoriesTooltip.js	Thu Jun 08 17:57:57 2017 +0200
+++ b/client/src/components/CategoriesTooltip.js	Thu Jun 08 18:54:36 2017 +0200
@@ -3,24 +3,65 @@
 
 class CategoriesTooltip extends Component {
 
+  state = {
+    activeCategory: null,
+    showCommentControl: false
+  }
+
+  componentDidUpdate = () => {
+    if (this.state.showCommentControl) {
+      this.commentControl.focus();
+    }
+  }
+
+  isCategoryActive = (category) => {
+    return this.state.activeCategory && this.state.activeCategory.key === category.key
+  }
+
   onButtonClick = (category) => {
-    if (typeof this.props.onCategoryClick === 'function') {
-      this.props.onCategoryClick(category)
+    if (category.hasOwnProperty('hasComment') && category.hasComment === true) {
+      this.setState({
+        activeCategory: this.state.activeCategory ? null : category,
+        showCommentControl: !this.state.showCommentControl
+      })
+    } else {
+      if (typeof this.props.onCategoryClick === 'function') {
+        this.props.onCategoryClick(category)
+      }
+    }
+  }
+
+  onSubmit = (e) => {
+    e.preventDefault();
+    if (this.state.showCommentControl) {
+      const comment = this.commentControl.value;
+      const { activeCategory } = this.state;
+      Object.assign(activeCategory, { comment: comment });
+      if (typeof this.props.onCategoryClick === 'function') {
+        this.props.onCategoryClick(activeCategory)
+      }
     }
   }
 
   render() {
     return (
       <div className="categories-tooltip">
-        <FormGroup className="buttons">
-        {this.props.categories.map((category) =>
-          <Button key={ category.name } bsStyle="primary" style={{ backgroundColor: category.color }}
-            onClick={this.onButtonClick.bind(this, category)}>{ category.name }</Button>
-        )}
-        </FormGroup>
-        <FormGroup>
-          <FormControl />
-        </FormGroup>
+        <form onSubmit={ this.onSubmit }>
+          <FormGroup className="buttons">
+          {this.props.categories.map((category) =>
+            <Button
+              key={ category.name }
+              bsStyle="primary"
+              style={{ backgroundColor: category.color }}
+              active={ this.isCategoryActive(category)  }
+              onClick={ this.onButtonClick.bind(this, category) }>{ category.name }</Button>
+          )}
+          </FormGroup>
+          {this.state.showCommentControl &&
+          <FormGroup>
+            <FormControl inputRef={(ref) => { this.commentControl = ref; }} />
+          </FormGroup>}
+        </form>
       </div>
     );
   }