UNPKG

cspace-ui

Version:
128 lines (127 loc) 4.26 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(e) { return e && e.__esModule ? e : { default: e }; } function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } 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;