diff options
Diffstat (limited to 'server/sonar-web/src/main/js/components/shared/checkbox.js')
-rw-r--r-- | server/sonar-web/src/main/js/components/shared/checkbox.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/server/sonar-web/src/main/js/components/shared/checkbox.js b/server/sonar-web/src/main/js/components/shared/checkbox.js new file mode 100644 index 00000000000..633c23c8354 --- /dev/null +++ b/server/sonar-web/src/main/js/components/shared/checkbox.js @@ -0,0 +1,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="#"/>; + } +}); |