@collectionspace/cspace-public-browser
Version:
CollectionSpace public browser
155 lines (154 loc) • 5.5 kB
JavaScript
;
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;