aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/components/shared/checkbox.js
diff options
context:
space:
mode:
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.js37
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="#"/>;
+ }
+});