1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | var React = require("react");
|
11 | require("react/addons");
|
12 | var PropTypes = React.PropTypes;
|
13 |
|
14 | var Toggle = React.createClass({
|
15 |
|
16 | mixins: [ React.addons.PureRenderMixin ],
|
17 |
|
18 | propTypes: {
|
19 | className: PropTypes.string,
|
20 | label: PropTypes.string.isRequired,
|
21 | onToggle: PropTypes.func,
|
22 | toggled: PropTypes.bool
|
23 | },
|
24 |
|
25 | getDefaultProps: function() {
|
26 | return {
|
27 | toggled: false
|
28 | };
|
29 | },
|
30 |
|
31 | getInitialState: function() {
|
32 | return {
|
33 | toggled: this.props.toggled ||
|
34 | false
|
35 | };
|
36 | },
|
37 |
|
38 | handleClick: function() {
|
39 | this.setState({ toggled: !this.state.toggled }, function() {
|
40 | if (this.props.onToggle) {
|
41 | this.props.onToggle(this.state.toggled);
|
42 | }
|
43 | });
|
44 | },
|
45 |
|
46 | render: function() {
|
47 | var toggleClass = this.state.toggled ? 'toggled' : '';
|
48 | return (
|
49 | <div className={["cb-toggle", toggleClass, this.props.className].join(" ")} onClick={this.handleClick}>
|
50 | <div className="cb-toggle-container"></div>
|
51 | <div className="cb-toggle-switch"></div>
|
52 | <input
|
53 | checked={this.state.toggled}
|
54 | readOnly={true}
|
55 | type="checkbox"
|
56 | name={this.props.name}
|
57 | />
|
58 | <label>{this.props.label}</label>
|
59 | </div>
|
60 | );
|
61 | }
|
62 | });
|
63 |
|
64 | module.exports = Toggle;
|