aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/components/shared/checkbox.js
blob: 2758749474904b5570ba7163011117bfd6ea2b73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import React from 'react';

export default React.createClass({
  propTypes: {
    onCheck: React.PropTypes.func.isRequired,
    initiallyChecked: React.PropTypes.bool,
    thirdState: React.PropTypes.bool
  },

  getInitialState() {
    return { checked: this.props.initiallyChecked || false };
  },

  componentWillReceiveProps(nextProps) {
    if (nextProps.initiallyChecked != null) {
      this.setState({ checked: nextProps.initiallyChecked });
    }
  },

  toggle(e) {
    e.preventDefault();
    this.props.onCheck(!this.state.checked);
    this.setState({ checked: !this.state.checked });
  },

  render() {
    let classNames = ['icon-checkbox'];
    if (this.state.checked) {
      classNames.push('icon-checkbox-checked');
    }
    if (this.props.thirdState) {
      classNames.push('icon-checkbox-single');
    }
    let className = classNames.join(' ');
    return <a onClick={this.toggle} className={className} href="#"/>;
  }
});