@collectionspace/cspace-public-browser
Version:
CollectionSpace public browser
72 lines (70 loc) • 2.48 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = FilterGroup;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactIntl = require("react-intl");
var _immutable = _interopRequireDefault(require("immutable"));
var _FilterContainer = _interopRequireDefault(require("./FilterContainer"));
var _FilterGroup = _interopRequireDefault(require("../../../../styles/cspace/FilterGroup.css"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const propTypes = {
config: _propTypes.default.shape({
fields: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
label: _propTypes.default.string,
messages: _propTypes.default.object
}).isRequired,
fieldsConfig: _propTypes.default.objectOf(_propTypes.default.object).isRequired,
id: _propTypes.default.string.isRequired,
isPending: _propTypes.default.bool,
aggregations: _propTypes.default.instanceOf(_immutable.default.Map)
};
const defaultProps = {
isPending: false,
aggregations: _immutable.default.Map()
};
function FilterGroup(props) {
const {
aggregations,
config,
fieldsConfig
} = props;
const {
fields,
label,
messages
} = config;
const isEmpty = aggregations.isEmpty() || !fields.find(fieldId => {
const buckets = aggregations.getIn([fieldId, 'buckets']);
return buckets && buckets.size > 0;
});
if (isEmpty) {
return null;
}
const labelMessage = messages && messages.label;
// eslint-disable-next-line react/jsx-props-no-spreading
const headerContent = labelMessage ? /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, labelMessage) : label;
return /*#__PURE__*/_react.default.createElement("div", {
className: _FilterGroup.default.common
}, headerContent && /*#__PURE__*/_react.default.createElement("h1", null, headerContent), fields.map(fieldId => {
const {
field,
formatValue,
messages: fieldMessages,
showSearch
} = fieldsConfig[fieldId];
return /*#__PURE__*/_react.default.createElement(_FilterContainer.default, {
aggregation: aggregations.get(fieldId),
id: fieldId,
field: field,
formatValue: formatValue,
key: fieldId,
messages: fieldMessages,
showSearch: showSearch
});
}));
}
FilterGroup.propTypes = propTypes;
FilterGroup.defaultProps = defaultProps;