UNPKG

cspace-ui

Version:
193 lines (158 loc) 6.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _immutable = _interopRequireDefault(require("immutable")); var _get = _interopRequireDefault(require("lodash/get")); var _classnames = _interopRequireDefault(require("classnames")); var _warning = _interopRequireDefault(require("warning")); var _recordDataHelpers = require("../../helpers/recordDataHelpers"); var _RecordForm = _interopRequireDefault(require("../../../styles/cspace-ui/RecordForm.css")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function renderTemplate(component, messages, handlers) { const overrideProps = {}; const type = (0, _get.default)(component, 'type'); if (type) { const propTypes = type.propTypes; if (propTypes) { Object.keys(handlers).forEach(handlerName => { if (propTypes[handlerName] && !component.props[handlerName]) { overrideProps[handlerName] = handlers[handlerName]; } }); } return _react.default.cloneElement(component, overrideProps, _react.default.Children.map(component.props.children, child => renderTemplate(child, messages, handlers))); } return component; } const propTypes = { config: _propTypes.default.object, recordTypeConfig: _propTypes.default.object, recordType: _propTypes.default.string.isRequired, vocabulary: _propTypes.default.string, csid: _propTypes.default.string, data: _propTypes.default.instanceOf(_immutable.default.Map), formName: _propTypes.default.string, readOnly: _propTypes.default.bool, onAddInstance: _propTypes.default.func, onCommit: _propTypes.default.func, onMoveInstance: _propTypes.default.func, onRemoveInstance: _propTypes.default.func, onSortInstances: _propTypes.default.func }; const defaultProps = { data: _immutable.default.Map() }; const childContextTypes = { config: _propTypes.default.object, recordData: _propTypes.default.instanceOf(_immutable.default.Map), recordType: _propTypes.default.string, recordTypeConfig: _propTypes.default.object, vocabulary: _propTypes.default.string, csid: _propTypes.default.string, readOnly: _propTypes.default.bool }; class RecordForm extends _react.Component { getChildContext() { const { config, csid, data, recordType, recordTypeConfig, vocabulary, readOnly } = this.props; // Get the csid from the data. This may differ from the csid in props, for example if a // urn-style csid was entered in the address bar. We always want to supply the guid-style csid // in the context. const dataCsid = (0, _recordDataHelpers.getCsid)(data); return { config, recordType, recordTypeConfig, vocabulary, readOnly, csid: dataCsid || csid, recordData: data }; } render() { const { config, data, formName, readOnly, recordType, recordTypeConfig, onAddInstance, onCommit, onMoveInstance, onRemoveInstance, onSortInstances } = this.props; if (!recordTypeConfig) { return null; } const { fields, forms, messages } = recordTypeConfig; const handlers = { onAddInstance, onCommit, onSortInstances, onMoveInstance, onRemoveInstance }; let formTemplate; if (formName) { formTemplate = (0, _get.default)(forms, [formName, 'template']); } if (!formTemplate) { // Try to get the configured default form. const defaultFormName = recordTypeConfig.defaultForm || 'default'; if (defaultFormName) { formTemplate = (0, _get.default)(forms, [defaultFormName, 'template']); } process.env.NODE_ENV !== "production" ? (0, _warning.default)(formTemplate, "No form template found for form name ".concat(formName, " or default form name ").concat(defaultFormName, " in record type ").concat(recordType, ". Check the record type plugin configuration.")) : void 0; } if (typeof formTemplate === 'function') { const result = formTemplate(data, config); if (!result) { return null; } if (typeof result === 'string') { // The form template function returned a string. This will be the name of another form // template to use. formTemplate = (0, _get.default)(forms, [result, 'template']); process.env.NODE_ENV !== "production" ? (0, _warning.default)(formTemplate, "No form template found for computed form name ".concat(result, " for form name ").concat(formName, " in record type ").concat(recordType, ". Check the record type plugin configuration.")) : void 0; } else { if ((0, _react.isValidElement)(result)) { // The form template function returned a React element to use. formTemplate = result; } process.env.NODE_ENV !== "production" ? (0, _warning.default)(formTemplate, "The computed form template for form name ".concat(formName, " in record type ").concat(recordType, " did not return a string or a React element. Check the record type plugin configuration.")) : void 0; } } const rootPropertyName = Object.keys(fields)[0]; const formContent = _react.default.cloneElement(formTemplate, { readOnly, name: rootPropertyName, value: data.get(rootPropertyName), children: _react.default.Children.map(formTemplate.props.children, child => renderTemplate(child, messages, handlers)) }); const className = (0, _classnames.default)(_RecordForm.default.common, "cspace-ui-RecordForm--".concat(recordType)); return _react.default.createElement("div", { className: className }, formContent); } } exports.default = RecordForm; RecordForm.propTypes = propTypes; RecordForm.defaultProps = defaultProps; RecordForm.childContextTypes = childContextTypes;