UNPKG

cspace-ui

Version:
109 lines (108 loc) 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _reactIntl = require("react-intl"); var _propTypes = _interopRequireDefault(require("prop-types")); var _immutable = _interopRequireDefault(require("immutable")); var _reactRouterDom = require("react-router-dom/cjs/react-router-dom.min"); var _ConfigProvider = require("../../config/ConfigProvider"); var _searchNames = require("../../../constants/searchNames"); var _SearchTable = _interopRequireDefault(require("../../../../styles/cspace-ui/SearchTable.css")); var _SearchResultCheckbox = _interopRequireDefault(require("../SearchResultCheckbox")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const propTypes = { item: _propTypes.default.instanceOf(_immutable.default.Map), index: _propTypes.default.number, totalItems: _propTypes.default.number, intl: _propTypes.default.object, renderContext: _propTypes.default.shape({ listType: _propTypes.default.string, searchDescriptor: _propTypes.default.object, columns: _propTypes.default.array, selectedItems: _propTypes.default.object }) }; const messages = (0, _reactIntl.defineMessages)({ rowAriaLabel: { "id": "searchResultTableRow.rowAriaLabel", "defaultMessage": "Row {index} of {total} - {primary}" } }); function renderColumn(column, item) { const data = item.get(column.dataKey); const formatted = data ? column.formatValue(data) : null; const key = `${item.get('csid')}-${column.dataKey}`; return /*#__PURE__*/_react.default.createElement("td", { key: key }, formatted); } function createRowLabel(column, item, index, total, intl) { const data = item.get(column.dataKey); return data ? intl.formatMessage(messages.rowAriaLabel, { primary: data, index: index + 1, total }) : 'row'; } function SearchResultTableRow({ item, index, totalItems, renderContext, intl }) { const config = (0, _ConfigProvider.useConfig)(); const history = (0, _reactRouterDom.useHistory)(); const { listType, searchDescriptor, columns, selectedItems } = renderContext; const csid = item.get('csid'); const listTypeConfig = config.listTypes[listType]; const { getItemLocationPath } = listTypeConfig; let location; if (getItemLocationPath) { location = getItemLocationPath(item, { config, searchDescriptor }); } const selected = selectedItems ? selectedItems.has(csid) : false; const rowAriaLabel = createRowLabel(columns[0], item, index, totalItems, intl); function handleRowClick() { // from SearchResultTable: // Create a location with the item location path, along with enough state to reproduce this // search. The search descriptor is converted to an object in order to reliably store it in // location state. Also merge in any object that was passed in via the linkState prop. const 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, listType // ...linkState, }; history.push(location, state); } return /*#__PURE__*/_react.default.createElement("tr", { "aria-label": rowAriaLabel, role: "link", tabIndex: 0, className: index % 2 === 0 ? _SearchTable.default.even : _SearchTable.default.odd, onClick: handleRowClick }, /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement(_SearchResultCheckbox.default, { index: index, listType: listType, searchDescriptor: searchDescriptor, selected: selected })), columns.map(column => renderColumn(column, item, location))); } SearchResultTableRow.propTypes = propTypes; var _default = exports.default = (0, _reactIntl.injectIntl)(SearchResultTableRow);