import React from 'react'; import PropTypes from 'proptypes'; import _ from 'lodash'; import { Tabs, Tab } from 'material-ui/Tabs'; import MenuItem from 'material-ui/MenuItem'; import injectSheet from 'react-jss'; import { SettingsGroup, SelectField, TextField, Checkbox } from './FormComponents.js'; import { grey500 } from 'material-ui/styles/colors'; const styles = { textFieldRow: { display: 'flex' } }; class Settings extends React.Component { constructor(props) { super(props); this.state = { settings: props.initialSettings, printers: props.defaultPrinter, quality: props.defaultQuality, material: props.defaultMaterial }; } changeSettings = (fieldName, value) => { const { onChange } = this.props; let state; switch (fieldName) { case 'printers': case 'quality': case 'material': state = { [fieldName]: value, settings: _.merge({}, this.state.settings, this.props[fieldName][value]) }; break; default: state = _.set(_.cloneDeep(this.state), fieldName, value); break; } if (onChange) onChange(state.settings); if (state) this.setState(state); }; getChildContext() { return { state: this.state, onChange: this.changeSettings }; } render() { const { classes, printers, quality, material } = this.props; return (
{Object.entries(printers).map(([value, { title }]) => ( ))} {Object.entries(quality).map(([value, { title }]) => ( ))} {Object.entries(material).map(([value, { title }]) => ( ))}
); } } Settings.childContextTypes = { state: PropTypes.object, onChange: PropTypes.func }; Settings.propTypes = { classes: PropTypes.objectOf(PropTypes.string), onChange: PropTypes.func, printers: PropTypes.object.isRequired, defaultPrinter: PropTypes.string.isRequired, quality: PropTypes.object.isRequired, defaultQuality: PropTypes.string.isRequired, material: PropTypes.object.isRequired, defaultMaterial: PropTypes.string.isRequired, initialSettings: PropTypes.object.isRequired }; export default injectSheet(styles)(Settings);