import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import { update as updateOptions } from '../../ducks/options'
PureBooleanOption.PropTypes = {
value: PropTypes.bool.isRequired,
onChange: PropTypes.func.isRequired,
}
function PureBooleanOption({ value, onChange, name, help}) {
return (
)
}
PureStringOption.PropTypes = {
value: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
}
function PureStringOption( { value, onChange, name, help }) {
let onKeyDown = (e) => {e.stopPropagation()}
return (
)
}
PureNumberOption.PropTypes = {
value: PropTypes.number.isRequired,
onChange: PropTypes.func.isRequired,
}
function PureNumberOption( {value, onChange, name, help }) {
let onKeyDown = (e) => {e.stopPropagation()}
return (
)
}
PureChoicesOption.PropTypes = {
value: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
}
function PureChoicesOption( { value, onChange, name, help, choices }) {
return (
)
}
const OptionTypes = {
bool: PureBooleanOption,
str: PureStringOption,
int: PureNumberOption,
"optional str": PureStringOption,
"sequence of str": PureStringOption,
}
Wrapper.displayName = 'OptionWrapper'
function Wrapper({option, options, updateOptions, ...props}) {
let optionObj = options[option],
WrappedComponent = null
if (optionObj.choices) {
WrappedComponent = PureChoicesOption
} else {
WrappedComponent = OptionTypes[optionObj.type]
}
let onChange = (e) => {
switch (optionObj.type) {
case 'bool' :
updateOptions({[option]: !optionObj.value})
break
case 'int':
updateOptions({[option]: parseInt(e.target.value)})
break
default:
updateOptions({[option]: e.target.value})
}
}
return
}
export default connect(
state => ({
options: state.options,
}),
{
updateOptions,
}
)(Wrapper)