@collectionspace/cspace-public-browser
Version:
CollectionSpace public browser
95 lines (94 loc) • 3.61 kB
JavaScript
"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;