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)

127 lines (106 loc) 3.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _set = require("babel-runtime/core-js/set"); var _set2 = _interopRequireDefault(_set); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _utils = require("../../utils"); var _semanticUiReact = require("semantic-ui-react"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var nums = new _set2.default(["number", "integer"]); /** * This is a silly limitation in the DOM where option change event values are * always retrieved as strings. */ function processValue(_ref, value) { var type = _ref.type, items = _ref.items; if (value === "") { return undefined; } else if (type === "array" && items && nums.has(items.type)) { return value.map(_utils.asNumber); } else if (type === "boolean") { return value === "true"; } else if (type === "number") { return (0, _utils.asNumber)(value); } return value; } function SelectWidget(props) { var schema = props.schema, id = props.id, options = props.options, value = props.value, required = props.required, disabled = props.disabled, readonly = props.readonly, multiple = props.multiple, autofocus = props.autofocus, _onChange = props.onChange, onBlur = props.onBlur, onFocus = props.onFocus, placeholder = props.placeholder; var enumOptions = options.enumOptions, enumDisabled = options.enumDisabled; var emptyValue = multiple ? [] : ""; var parsedOptions = enumOptions.map(function (_ref2, i) { var value = _ref2.value, label = _ref2.label; var disabled = enumDisabled && enumDisabled.indexOf(value) != -1; return { value: value, disabled: disabled, text: label }; }); return _react2.default.createElement(_semanticUiReact.Dropdown, { selection: true, placeholder: placeholder, options: parsedOptions, id: id, multiple: multiple, value: typeof value === "undefined" ? emptyValue : value, required: required, disabled: disabled || readonly, autoFocus: autofocus, onBlur: onBlur && function (event, data) { var newValue = data.value; onBlur(id, processValue(schema, newValue)); }, onFocus: onFocus && function (event, data) { var newValue = data.value; onFocus(id, processValue(schema, newValue)); }, onChange: function onChange(event, data) { console.log(data); var newValue = data.value; _onChange(processValue(schema, newValue)); } }); } SelectWidget.defaultProps = { autofocus: false }; if (process.env.NODE_ENV !== "production") { SelectWidget.propTypes = { schema: _propTypes2.default.object.isRequired, id: _propTypes2.default.string.isRequired, options: _propTypes2.default.shape({ enumOptions: _propTypes2.default.array }).isRequired, value: _propTypes2.default.any, required: _propTypes2.default.bool, disabled: _propTypes2.default.bool, readonly: _propTypes2.default.bool, multiple: _propTypes2.default.bool, autofocus: _propTypes2.default.bool, onChange: _propTypes2.default.func, onBlur: _propTypes2.default.func, onFocus: _propTypes2.default.func }; } exports.default = SelectWidget;