// Package imports import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * export default class LocalSettingsPageItem extends React.PureComponent { static propTypes = { children: PropTypes.node.isRequired, dependsOn: PropTypes.array, dependsOnNot: PropTypes.array, id: PropTypes.string.isRequired, item: PropTypes.array.isRequired, onChange: PropTypes.func.isRequired, inputProps: PropTypes.object, options: PropTypes.arrayOf(PropTypes.shape({ value: PropTypes.string.isRequired, message: PropTypes.string.isRequired, hint: PropTypes.string, })), settings: ImmutablePropTypes.map.isRequired, placeholder: PropTypes.string, disabled: PropTypes.bool, }; handleChange = e => { const { target } = e; const { item, onChange, options, placeholder } = this.props; if (options && options.length > 0) onChange(item, target.value); else if (placeholder) onChange(item, target.value); else onChange(item, target.checked); } render () { const { handleChange } = this; const { settings, item, id, inputProps, options, children, dependsOn, dependsOnNot, placeholder, disabled } = this.props; let enabled = !disabled; if (dependsOn) { for (let i = 0; i < dependsOn.length; i++) { enabled = enabled && settings.getIn(dependsOn[i]); } } if (dependsOnNot) { for (let i = 0; i < dependsOnNot.length; i++) { enabled = enabled && !settings.getIn(dependsOnNot[i]); } } if (options && options.length > 0) { const currentValue = settings.getIn(item); const optionElems = options && options.length > 0 && options.map((opt) => { let optionId = `${id}--${opt.value}`; return ( ); }); return (
{children} {optionElems}
); } else if (placeholder) { return (
); } else return (
); } }