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)

244 lines (200 loc) 8.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _stringify = require("babel-runtime/core-js/json/stringify"); var _stringify2 = _interopRequireDefault(_stringify); var _keys = require("babel-runtime/core-js/object/keys"); var _keys2 = _interopRequireDefault(_keys); var _defineProperty2 = require("babel-runtime/helpers/defineProperty"); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends4 = require("babel-runtime/helpers/extends"); var _extends5 = _interopRequireDefault(_extends4); var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); 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 }; } function DefaultObjectFieldTemplate(props) { var TitleField = props.TitleField, DescriptionField = props.DescriptionField; return _react2.default.createElement( _semanticUiReact.Form.Field, null, (props.uiSchema["ui:title"] || props.title) && _react2.default.createElement(TitleField, { id: props.idSchema.$id + "__title", title: props.title || props.uiSchema["ui:title"], required: props.required, formContext: props.formContext }), props.description && _react2.default.createElement(DescriptionField, { id: props.idSchema.$id + "__description", description: props.description, formContext: props.formContext }), props.properties.map(function (prop) { return prop.content; }) ); } var ObjectField = function (_Component) { (0, _inherits3.default)(ObjectField, _Component); function ObjectField() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, ObjectField); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = ObjectField.__proto__ || (0, _getPrototypeOf2.default)(ObjectField)).call.apply(_ref, [this].concat(args))), _this), _this.onPropertyChange = function (name) { return function (value, errorSchema) { var newFormData = (0, _extends5.default)({}, _this.props.formData, (0, _defineProperty3.default)({}, name, value)); _this.props.onChange(newFormData, errorSchema && _this.props.errorSchema && (0, _extends5.default)({}, _this.props.errorSchema, (0, _defineProperty3.default)({}, name, errorSchema))); }; }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(ObjectField, [{ key: "isRequired", value: function isRequired(name) { var schema = this.props.schema; return Array.isArray(schema.required) && schema.required.indexOf(name) !== -1; } }, { key: "render", value: function render() { var _this2 = this; var _props = this.props, uiSchema = _props.uiSchema, formData = _props.formData, errorSchema = _props.errorSchema, idSchema = _props.idSchema, name = _props.name, required = _props.required, disabled = _props.disabled, readonly = _props.readonly, idPrefix = _props.idPrefix, onBlur = _props.onBlur, onFocus = _props.onFocus, _props$registry = _props.registry, registry = _props$registry === undefined ? (0, _utils.getDefaultRegistry)() : _props$registry; var definitions = registry.definitions, fields = registry.fields, formContext = registry.formContext; var SchemaField = fields.SchemaField, TitleField = fields.TitleField, DescriptionField = fields.DescriptionField; var schema = (0, _utils.retrieveSchema)(this.props.schema, definitions, formData); var title = schema.title === undefined ? name : schema.title; var description = uiSchema["ui:description"] || schema.description; var orderedProperties = void 0; try { var properties = (0, _keys2.default)(schema.properties); orderedProperties = (0, _utils.orderProperties)(properties, uiSchema["ui:order"]); } catch (err) { return _react2.default.createElement( _semanticUiReact.Message, { error: true }, _react2.default.createElement( "p", null, "Invalid ", name || "root", " object field configuration:", _react2.default.createElement( "em", null, err.message ), "." ), _react2.default.createElement( "pre", null, (0, _stringify2.default)(schema) ) ); } var Template = registry.ObjectFieldTemplate || DefaultObjectFieldTemplate; var templateProps = { title: uiSchema["ui:title"] || title, description: description, TitleField: TitleField, DescriptionField: DescriptionField, properties: orderedProperties.map(function (name) { return { content: _react2.default.createElement(SchemaField, { key: name, name: name, required: _this2.isRequired(name), schema: schema.properties[name], uiSchema: uiSchema[name], errorSchema: errorSchema[name], idSchema: idSchema[name], idPrefix: idPrefix, formData: formData[name], onChange: _this2.onPropertyChange(name), onBlur: onBlur, onFocus: onFocus, registry: registry, disabled: disabled, readonly: readonly }), name: name, readonly: readonly, disabled: disabled, required: required }; }), required: required, idSchema: idSchema, uiSchema: uiSchema, schema: schema, formData: formData, formContext: formContext }; return _react2.default.createElement(Template, templateProps); } }]); return ObjectField; }(_react.Component); ObjectField.defaultProps = { uiSchema: {}, formData: {}, errorSchema: {}, idSchema: {}, required: false, disabled: false, readonly: false }; if (process.env.NODE_ENV !== "production") { ObjectField.propTypes = { schema: _propTypes2.default.object.isRequired, uiSchema: _propTypes2.default.object, errorSchema: _propTypes2.default.object, idSchema: _propTypes2.default.object, onChange: _propTypes2.default.func.isRequired, formData: _propTypes2.default.object, required: _propTypes2.default.bool, disabled: _propTypes2.default.bool, readonly: _propTypes2.default.bool, registry: _propTypes2.default.shape({ widgets: _propTypes2.default.objectOf(_propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.object])).isRequired, fields: _propTypes2.default.objectOf(_propTypes2.default.func).isRequired, definitions: _propTypes2.default.object.isRequired, formContext: _propTypes2.default.object.isRequired }) }; } exports.default = ObjectField;