UNPKG

cspace-ui

Version:
129 lines (128 loc) 4.44 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 _immutable = _interopRequireDefault(require("immutable")); var _SearchResultItemLink = _interopRequireDefault(require("./SearchResultItemLink")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } const messages = (0, _reactIntl.defineMessages)({ pending: { "id": "searchResultLink.pending", "defaultMessage": "..." }, error: { "id": "searchResultLink.error", "defaultMessage": "..." }, notFound: { "id": "searchResultLink.notFound", "defaultMessage": "[record not found]" }, label: { "id": "searchResultLink.label", "defaultMessage": "{recordNumber}" } }); const propTypes = { config: _propTypes.default.shape({ listTypes: _propTypes.default.object }), listType: _propTypes.default.string, search: _propTypes.default.func, searchName: _propTypes.default.string, searchDescriptor: _propTypes.default.instanceOf(_immutable.default.Map), itemFilter: _propTypes.default.func, isSearchPending: _propTypes.default.bool, searchError: _propTypes.default.instanceOf(_immutable.default.Map), searchResult: _propTypes.default.instanceOf(_immutable.default.Map) }; const defaultProps = { listType: 'common', itemFilter: () => true }; class SearchResultLink extends _react.Component { componentDidMount() { this.search(); } componentDidUpdate(prevProps) { const { searchName, searchDescriptor } = this.props; const { searchName: prevSearchName, searchDescriptor: prevSearchDescriptor } = prevProps; if (searchName !== prevSearchName || !_immutable.default.is(searchDescriptor, prevSearchDescriptor)) { this.search(); } } getResultItem() { const { config, searchResult, itemFilter, listType } = this.props; const { listNodeName, itemNodeName } = config.listTypes[listType]; const list = searchResult.get(listNodeName); const totalItems = parseInt(list.get('totalItems'), 10); if (Number.isNaN(totalItems) || totalItems === 0) { return null; } let items = list.get(itemNodeName); if (!_immutable.default.List.isList(items)) { items = _immutable.default.List.of(items); } return items.find(itemFilter); } search() { const { config, search, searchName, searchDescriptor } = this.props; if (search) { search(config, searchName, searchDescriptor); } } render() { const { config, isSearchPending, searchError, searchResult } = this.props; if (isSearchPending) { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.pending); } if (searchResult) { const item = this.getResultItem(); if (item) { return /*#__PURE__*/_react.default.createElement(_SearchResultItemLink.default, { config: config, item: item, message: messages.label }); } return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.notFound); } if (searchError) { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.error); } return null; } } exports.default = SearchResultLink; SearchResultLink.propTypes = propTypes; SearchResultLink.defaultProps = defaultProps;