UNPKG

us-forms-system

Version:

Build React forms with JSON Schema and the U.S. Web Design System

189 lines (151 loc) 8.19 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _get2 = require('lodash/fp/get'); var _get3 = _interopRequireDefault(_get2); var _set2 = require('lodash/fp/set'); var _set3 = _interopRequireDefault(_set2); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _reactScroll = require('react-scroll'); var _reactScroll2 = _interopRequireDefault(_reactScroll); var _utils = require('@department-of-veterans-affairs/react-jsonschema-form/lib/utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var Element = _reactScroll2.default.Element; var BasicArrayField = function (_React$Component) { _inherits(BasicArrayField, _React$Component); function BasicArrayField() { var _ref; var _temp, _this, _ret; _classCallCheck(this, BasicArrayField); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = BasicArrayField.__proto__ || Object.getPrototypeOf(BasicArrayField)).call.apply(_ref, [this].concat(args))), _this), _this.shouldComponentUpdate = function (nextProps, nextState) { return !(0, _utils.deepEquals)(_this.props, nextProps) || nextState !== _this.state; }, _this.onItemChange = function (indexToChange, value) { var newItems = (0, _set3.default)(indexToChange, value, _this.props.formData || []); _this.props.onChange(newItems); }, _this.getItemSchema = function (index) { return _this.props.schema.items[index]; }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(BasicArrayField, [{ key: 'render', value: function render() { var _this2 = this; var _props = this.props, uiSchema = _props.uiSchema, errorSchema = _props.errorSchema, idSchema = _props.idSchema, formData = _props.formData, disabled = _props.disabled, readonly = _props.readonly, registry = _props.registry, formContext = _props.formContext, onBlur = _props.onBlur, schema = _props.schema; var definitions = registry.definitions; var _registry$fields = registry.fields, TitleField = _registry$fields.TitleField, SchemaField = _registry$fields.SchemaField; var title = uiSchema['ui:title'] || schema.title; var hideTitle = !!(0, _get3.default)(['ui:options', 'hideTitle'], uiSchema); var description = uiSchema['ui:description']; var textDescription = typeof description === 'string' ? description : null; var DescriptionField = typeof description === 'function' ? uiSchema['ui:description'] : null; var hasTitleOrDescription = !!title && !hideTitle || !!description; // if we have form data, use that, otherwise use an array with a single default object var items = formData && formData.length ? formData : [(0, _utils.getDefaultFormState)(schema, undefined, registry.definitions)]; var containerClassNames = (0, _classnames2.default)({ 'schemaform-field-container': true, 'schemaform-block': hasTitleOrDescription }); return _react2.default.createElement( 'div', { className: containerClassNames }, hasTitleOrDescription && _react2.default.createElement( 'div', { className: 'schemaform-block-header' }, title && !hideTitle ? _react2.default.createElement(TitleField, { id: idSchema.$id + '__title', title: title, formContext: formContext }) : null, textDescription && _react2.default.createElement( 'p', null, textDescription ), DescriptionField && _react2.default.createElement(DescriptionField, { options: uiSchema['ui:options'] }), !textDescription && !DescriptionField && description ), _react2.default.createElement( 'div', null, items.map(function (item, index) { var itemSchema = _this2.getItemSchema(index); var itemIdPrefix = idSchema.$id + '_' + index; var itemIdSchema = (0, _utils.toIdSchema)(itemSchema, itemIdPrefix, definitions); return _react2.default.createElement( 'div', { key: index }, _react2.default.createElement(Element, { name: 'table_' + itemIdPrefix }), _react2.default.createElement( 'div', { className: 'row small-collapse' }, _react2.default.createElement( 'div', { className: 'small-12 columns' }, _react2.default.createElement(SchemaField, { key: index, schema: itemSchema, uiSchema: uiSchema.items, errorSchema: errorSchema ? errorSchema[index] : undefined, idSchema: itemIdSchema, formData: item, onChange: function onChange(value) { return _this2.onItemChange(index, value); }, onBlur: onBlur, registry: _this2.props.registry, required: false, disabled: disabled, readonly: readonly }) ) ) ); }) ) ); } }]); return BasicArrayField; }(_react2.default.Component); BasicArrayField.propTypes = { schema: _propTypes2.default.object.isRequired, uiSchema: _propTypes2.default.object, errorSchema: _propTypes2.default.object, requiredSchema: _propTypes2.default.object, idSchema: _propTypes2.default.object, onChange: _propTypes2.default.func.isRequired, onBlur: _propTypes2.default.func, formData: _propTypes2.default.array, 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 = BasicArrayField; //# sourceMappingURL=BasicArrayField.js.map