core-resource-app-test
Version:
App that contains assets and scripts for the core apps
75 lines (67 loc) • 2.36 kB
JavaScript
import React from 'react';
// Material UI
import Checkbox from 'material-ui/Checkbox';
// TODO: Rewrite as ES6 class
/* eslint-disable react/prefer-es6-class */
export default React.createClass({
propTypes: {
label: React.PropTypes.string.isRequired,
onChange: React.PropTypes.func.isRequired,
items: React.PropTypes.arrayOf(React.PropTypes.shape({
name: React.PropTypes.string.isRequired,
value: React.PropTypes.bool,
text: React.PropTypes.string.isRequired,
})),
style: React.PropTypes.object,
},
contextTypes: {
muiTheme: React.PropTypes.object,
},
getInitialState() {
return {
values: this.props.items.reduce((prev, curr) => {
if (curr.value) {
prev.push(curr.name);
}
return prev;
}, []),
};
},
_handleToggle(value, event, checked) {
this.setState((oldState) => {
if (checked) {
if (oldState.values.indexOf(value) === -1) {
oldState.values.push(value);
}
} else if (oldState.values.indexOf(value) !== -1) {
oldState.values.splice(oldState.values.indexOf(value), 1);
}
return oldState;
}, () => {
this.props.onChange({ target: { value: this.state.values } });
});
},
render() {
const style = Object.assign({}, this.context.muiTheme.forms, this.props.style);
return (
<div>
<div style={{ marginTop: 16, marginBottom: 8 }}>{this.props.label}</div>
{this.props.items.map((item) => {
const togglor = this._handleToggle.bind(null, item.name);
return (
<Checkbox
key={item.name}
name={item.name}
value="true"
defaultChecked={item.value === true}
label={item.text}
onCheck={togglor}
style={style}
labelPosition="right"
/>
);
})}
</div>
);
},
});