UNPKG

@collectionspace/cspace-public-browser

Version:
95 lines (94 loc) 3.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = FieldList; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactIntl = require("react-intl"); var _classnames = _interopRequireDefault(require("classnames")); var _FieldList = _interopRequireDefault(require("../../../styles/cspace/FieldList.css")); var _FieldListGroup = _interopRequireDefault(require("../../../styles/cspace/FieldListGroup.css")); var _FieldListField = _interopRequireDefault(require("../../../styles/cspace/FieldListField.css")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const propTypes = { config: _propTypes.default.shape({ fields: _propTypes.default.object.isRequired, groups: _propTypes.default.object.isRequired, layout: _propTypes.default.object.isRequired }).isRequired, data: _propTypes.default.shape({ 'collectionspace_core:refName': _propTypes.default.string, 'collectionspace_denorm:title': _propTypes.default.string }).isRequired }; const renderField = (id, fieldConfig, data) => { const { className, field, format, label, messages } = fieldConfig; const title = messages // eslint-disable-next-line react/jsx-props-no-spreading ? /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.label) : label; const value = data[field]; const formattedValue = format && value ? format(value, id) : value; if (!formattedValue) { return null; } if (title) { const classes = (0, _classnames.default)(_FieldListField.default[className]); const classProp = classes ? { className: classes } : undefined; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, { key: id }, /*#__PURE__*/_react.default.createElement("div", classProp, title), /*#__PURE__*/_react.default.createElement("div", classProp, formattedValue)); } const classes = (0, _classnames.default)(_FieldListField.default.unlabeled, _FieldListField.default[className]); return /*#__PURE__*/_react.default.createElement("div", { className: classes, key: id }, formattedValue); }; const renderGroup = (id, groupConfig, config, data) => { const { className, fields, label, messages } = groupConfig; const title = messages // eslint-disable-next-line react/jsx-props-no-spreading ? /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.label) : label; const fieldsConfig = config.fields; const renderedFields = fields.map(fieldId => renderField(fieldId, fieldsConfig[fieldId], data)).filter(renderedField => !!renderedField); if (renderedFields.length === 0) { return null; } const classes = (0, _classnames.default)(_FieldListGroup.default.common, _FieldListGroup.default[className]); return /*#__PURE__*/_react.default.createElement("div", { className: classes, key: id }, title && /*#__PURE__*/_react.default.createElement("h3", null, title), /*#__PURE__*/_react.default.createElement("div", null, renderedFields)); }; function FieldList(props) { const { config, data } = props; const { groups, layout } = config; return Object.keys(layout).map(layoutId => /*#__PURE__*/_react.default.createElement("div", { className: _FieldList.default.common, key: layoutId, style: { gridArea: layoutId } }, layout[layoutId].map(groupId => renderGroup(groupId, groups[groupId], config, data)))); } FieldList.propTypes = propTypes;