UNPKG

@collectionspace/cspace-public-browser

Version:
155 lines (154 loc) 5.5 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 _reactIntl = require("react-intl"); var _FieldList = _interopRequireDefault(require("./FieldList")); var _ImageGalleryContainer = _interopRequireDefault(require("./ImageGalleryContainer")); var _PanelTitle = _interopRequireDefault(require("../layout/PanelTitle")); var _config = _interopRequireDefault(require("../../config")); var _InstitutionHoldingList = _interopRequireDefault(require("../../../styles/cspace/InstitutionHoldingList.css")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /* global window */ const messages = (0, _reactIntl.defineMessages)({ title: { "id": "institutionHoldingList.title", "defaultMessage": "Samples at {title}" } }); const propTypes = { hits: _propTypes.default.arrayOf(_propTypes.default.shape({ _source: _propTypes.default.shape({ 'collectionspace_core:uri': _propTypes.default.string }) })), institutionConfig: _propTypes.default.shape({ title: _propTypes.default.string }).isRequired, institutionId: _propTypes.default.string.isRequired, isExpanded: _propTypes.default.bool, isSelected: _propTypes.default.bool, expandPanel: _propTypes.default.func, referenceValue: _propTypes.default.string.isRequired, togglePanel: _propTypes.default.func }; const defaultProps = { hits: [], isExpanded: false, isSelected: false, expandPanel: () => undefined, togglePanel: () => undefined }; const renderResult = data => { const { 'collectionspace_core:uri': uri } = data; return /*#__PURE__*/_react.default.createElement("li", { key: uri }, /*#__PURE__*/_react.default.createElement(_FieldList.default, { config: _config.default.get('institutionHoldings').detailFields, data: data })); }; class InstitutionHoldingList extends _react.Component { constructor() { super(); this.ref = /*#__PURE__*/_react.default.createRef(); } componentDidMount() { const { isSelected } = this.props; if (isSelected) { this.focus(); } } componentDidUpdate(prevProps) { const { isSelected: prevIsSelected } = prevProps; const { isSelected } = this.props; if (isSelected && !prevIsSelected) { this.focus(); } } focus() { const { expandPanel } = this.props; const domNode = this.ref.current; if (domNode) { window.setTimeout(() => { expandPanel(); domNode.scrollIntoView(); }, 0); } } renderContent() { const { hits, institutionId, isExpanded, referenceValue } = this.props; if (isExpanded) { return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_ImageGalleryContainer.default, { institutionId: institutionId, referenceValue: referenceValue }), /*#__PURE__*/_react.default.createElement("ul", null, hits.map(hit => renderResult(hit._source)))); } return null; } renderTitle() { const { hits, institutionConfig, isExpanded, togglePanel } = this.props; const { title } = institutionConfig; const formattedTitle = /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage // eslint-disable-next-line react/jsx-props-no-spreading , _extends({}, messages.title, { tagName: "h2", values: { title, count: hits.length } })); return /*#__PURE__*/_react.default.createElement(_PanelTitle.default, { isExpanded: isExpanded, title: formattedTitle, onClick: togglePanel }); } render() { const { hits } = this.props; if (hits.length === 0) { return null; } const { institutionId, isExpanded } = this.props; return /*#__PURE__*/_react.default.createElement("section", { className: isExpanded ? _InstitutionHoldingList.default.expanded : _InstitutionHoldingList.default.collapsed, id: institutionId, ref: this.ref }, this.renderTitle(), this.renderContent()); } } exports.default = InstitutionHoldingList; InstitutionHoldingList.propTypes = propTypes; InstitutionHoldingList.defaultProps = defaultProps;