UNPKG

cspace-ui

Version:
143 lines (142 loc) 5.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchResultCard = SearchResultCard; exports.default = SearchResultGrid; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _immutable = _interopRequireDefault(require("immutable")); var _reactRedux = require("react-redux"); var _lodash = require("lodash"); var _reactRouterDom = require("react-router-dom"); var _searchResultHelpers = require("../searchResultHelpers"); var _reducers = require("../../../reducers"); var _searchNames = require("../../../constants/searchNames"); var _ConfigProvider = require("../../config/ConfigProvider"); var _SearchGrid = _interopRequireDefault(require("../../../../styles/cspace-ui/SearchGrid.css")); var _searchHelpers = require("../../../helpers/searchHelpers"); var _SearchResultCheckbox = _interopRequireDefault(require("../SearchResultCheckbox")); var _SearchResultImage = _interopRequireDefault(require("../SearchResultImage")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const cardPropTypes = { item: _propTypes.default.instanceOf(_immutable.default.Map), index: _propTypes.default.number, listType: _propTypes.default.string, gridConfig: _propTypes.default.shape({ title: _propTypes.default.shape({ formatter: _propTypes.default.func }), subtitle: _propTypes.default.shape({ formatter: _propTypes.default.func }), description: _propTypes.default.shape({ formatter: _propTypes.default.func }), tags: _propTypes.default.shape({ formatter: _propTypes.default.func }) }), searchDescriptor: _propTypes.default.object }; function SearchResultCard({ item, gridConfig, index, searchDescriptor, listType }) { const config = (0, _ConfigProvider.useConfig)(); const { description: { formatter: descriptionFormatter } = {}, tags: { formatter: tagFormatter } = {}, title: { formatter: titleFormatter } = {}, subtitle: { formatter: subtitleFormatter } = {} } = gridConfig; const selectedItems = (0, _reactRedux.useSelector)(state => (0, _reducers.getSearchSelectedItems)(state, _searchNames.SEARCH_RESULT_PAGE_SEARCH_NAME)); const csid = item.get('csid'); const selected = selectedItems ? selectedItems.has(csid) : false; const listTypeConfig = config.listTypes[listType]; const { getItemLocationPath } = listTypeConfig; let location; let state; if (getItemLocationPath) { location = getItemLocationPath(item, { config, searchDescriptor }); state = { searchDescriptor: searchDescriptor.toJS(), // The search traverser on records will always link to the search result page, so use // its search name. searchName: _searchNames.SEARCH_RESULT_PAGE_SEARCH_NAME }; } const blob = /*#__PURE__*/_react.default.createElement(_SearchResultImage.default, { derivative: "Medium", item: item, location: location, state: state }); const title = location ? /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, { to: { pathname: location, state } }, titleFormatter === null || titleFormatter === void 0 ? void 0 : titleFormatter(item)) : titleFormatter === null || titleFormatter === void 0 ? void 0 : titleFormatter(item); return /*#__PURE__*/_react.default.createElement("div", { className: _SearchGrid.default.card }, blob, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", { className: _SearchGrid.default.summary }, /*#__PURE__*/_react.default.createElement(_SearchResultCheckbox.default, { index: index, listType: listType, searchDescriptor: searchDescriptor, selected: selected }), /*#__PURE__*/_react.default.createElement("div", { className: _SearchGrid.default.info }, title, subtitleFormatter === null || subtitleFormatter === void 0 ? void 0 : subtitleFormatter(item), descriptionFormatter === null || descriptionFormatter === void 0 ? void 0 : descriptionFormatter(item), /*#__PURE__*/_react.default.createElement("div", { className: _SearchGrid.default.mt10 }, tagFormatter === null || tagFormatter === void 0 ? void 0 : tagFormatter(item)))))); } SearchResultCard.propTypes = cardPropTypes; function SearchResultGrid({ searchDescriptor }) { const results = (0, _reactRedux.useSelector)(state => (0, _reducers.getSearchResult)(state, _searchNames.SEARCH_RESULT_PAGE_SEARCH_NAME, searchDescriptor)); const config = (0, _ConfigProvider.useConfig)(); const listType = (0, _searchHelpers.getListTypeFromResult)(config, results); const { items } = (0, _searchResultHelpers.readListItems)(config, listType, results); if (!items) { return null; } const recordType = searchDescriptor.get('recordType'); const subresource = searchDescriptor.get('subresource'); const configurer = subresource ? config.subresources[subresource] : config.recordTypes[recordType]; const gridConfig = (0, _lodash.get)(configurer, ['grid']); return /*#__PURE__*/_react.default.createElement("div", { className: _SearchGrid.default.grid }, items.map((item, index) => /*#__PURE__*/_react.default.createElement(SearchResultCard, { key: item.get('csid'), index: index, item: item, listType: listType, gridConfig: gridConfig, searchDescriptor: searchDescriptor }))); } SearchResultGrid.propTypes = { searchDescriptor: _propTypes.default.object };