UNPKG

react-jsonschema-form-semantic

Version:

A simple React component capable of building HTML forms out of a JSON schema. Uses React Semantic UI (css not bundled)

99 lines (85 loc) 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _semanticUiReact = require("semantic-ui-react"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function selectValue(value, selected, all) { var at = all.indexOf(value); var updated = selected.slice(0, at).concat(value, selected.slice(at)); // As inserting values at predefined index positions doesn't work with empty // arrays, we need to reorder the updated selection to match the initial order return updated.sort(function (a, b) { return all.indexOf(a) > all.indexOf(b); }); } function deselectValue(value, selected) { return selected.filter(function (v) { return v !== value; }); } function CheckboxesWidget(props) { var id = props.id, disabled = props.disabled, options = props.options, value = props.value, autofocus = props.autofocus, readonly = props.readonly, _onChange = props.onChange; var enumOptions = options.enumOptions; return _react2.default.createElement( _semanticUiReact.Form.Group, { grouped: true, className: "checkboxes", id: id }, enumOptions.map(function (option, index) { var checked = value.indexOf(option.value) !== -1; var checkbox = _react2.default.createElement(_semanticUiReact.Form.Checkbox, { label: option.label, type: "checkbox", id: id + "_" + index, checked: checked, disabled: disabled || readonly, autoFocus: autofocus && index === 0, onChange: function onChange(event) { var all = enumOptions.map(function (_ref) { var value = _ref.value; return value; }); if (event.target.checked) { _onChange(selectValue(option.value, value, all)); } else { _onChange(deselectValue(option.value, value)); } } }); return checkbox; }) ); } CheckboxesWidget.defaultProps = { autofocus: false, options: { inline: false } }; if (process.env.NODE_ENV !== "production") { CheckboxesWidget.propTypes = { schema: _propTypes2.default.object.isRequired, id: _propTypes2.default.string.isRequired, options: _propTypes2.default.shape({ enumOptions: _propTypes2.default.array, inline: _propTypes2.default.bool }).isRequired, value: _propTypes2.default.any, required: _propTypes2.default.bool, readonly: _propTypes2.default.bool, disabled: _propTypes2.default.bool, multiple: _propTypes2.default.bool, autofocus: _propTypes2.default.bool, onChange: _propTypes2.default.func }; } exports.default = CheckboxesWidget;