cspace-ui
Version:
CollectionSpace user interface for browsers
143 lines (142 loc) • 5.58 kB
JavaScript
"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
};