UNPKG

@atlaskit/global-search

Version:

A cross-product search component (batteries included)

296 lines (233 loc) 13.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.UnwrappedResultList = exports.getUniqueResultId = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireDefault(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _theme = require("@atlaskit/theme"); var _search = _interopRequireDefault(require("@atlaskit/icon/glyph/search")); var _quickSearch = require("@atlaskit/quick-search"); var _reactIntl = require("react-intl"); var _messages = require("../messages"); var _Result = require("../model/Result"); var _styled = require("./styled"); var _confluenceAvatarUtil = require("../util/confluence-avatar-util"); var _jiraAvatarUtil = require("../util/jira-avatar-util"); var _DarkReturn = _interopRequireDefault(require("../assets/DarkReturn")); var _Return = _interopRequireDefault(require("../assets/Return")); var _FeaturesProvider = require("./FeaturesProvider"); var _templateObject; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var extractAvatarData = function extractAvatarData(jiraResult) { return jiraResult.avatarUrl ? { avatarUrl: jiraResult.avatarUrl } : { avatar: (0, _jiraAvatarUtil.getDefaultAvatar)(jiraResult.contentType) }; }; var selectedIcon = /*#__PURE__*/_react.default.createElement(_styled.SelectedIcon, null, /*#__PURE__*/_react.default.createElement(_DarkReturn.default, null)); var getI18nJiraContainerName = function getI18nJiraContainerName(projectType) { switch (projectType) { case _Result.JiraProjectType.Business: { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_project_type_business_project); } case _Result.JiraProjectType.Software: { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_project_type_software_project); } case _Result.JiraProjectType.ServiceDesk: { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_project_type_service_desk_project); } case _Result.JiraProjectType.Ops: { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_project_type_ops_project); } } }; var getI18nJiraContentType = function getI18nJiraContentType(contentType) { switch (contentType) { case _Result.ContentType.JiraBoard: { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_result_type_board); } case _Result.ContentType.JiraFilter: { return /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_result_type_filter); } } return undefined; }; // Being tested as part of the 'complex' experiment, to improve scannability when there // is lots of text. var LightSubtextWrapper = _styledComponents.default.span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n color: ", ";\n"])), _theme.colors.N90); var getI18nConfluenceContainerSubtext = function getI18nConfluenceContainerSubtext(containerName, friendlyLastModified) { var containerText = friendlyLastModified ? /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, (0, _extends2.default)({}, _messages.messages.confluence_container_subtext_with_modified_date, { values: { containerName: containerName, friendlyLastModified: friendlyLastModified } })) : containerName; return /*#__PURE__*/_react.default.createElement(LightSubtextWrapper, null, containerText); }; var getUniqueResultId = function getUniqueResultId(result) { return result.key ? result.key : "".concat(result.contentType, "-").concat(result.resultId); }; exports.getUniqueResultId = getUniqueResultId; var ResultList = /*#__PURE__*/function (_React$Component) { (0, _inherits2.default)(ResultList, _React$Component); var _super = _createSuper(ResultList); function ResultList() { (0, _classCallCheck2.default)(this, ResultList); return _super.apply(this, arguments); } (0, _createClass2.default)(ResultList, [{ key: "render", value: function render() { var _this = this; var _this$props = this.props, results = _this$props.results, sectionIndex = _this$props.sectionIndex, features = _this$props.features; return results.map(function (result, index) { var resultType = result.resultType; var analyticsData = _objectSpread(_objectSpread({ sectionIndex: sectionIndex, indexWithinSection: index, containerId: result.containerId, experimentId: result.experimentId }, _this.props.analyticsData), {}, { contentType: result.contentType, resultId: result.resultId, isRecentResult: !!result.isRecentResult }); // Make sure that key and resultId are unique across all search results var uniqueResultId = getUniqueResultId(result); var uniqueKey = "".concat(uniqueResultId, "_").concat(Date.now()); // same result might appear on two successive search switch (resultType) { case _Result.ResultType.ConfluenceObjectResult: { var confluenceResult = result; var subText = getI18nConfluenceContainerSubtext(confluenceResult.containerName, confluenceResult.friendlyLastModified); return /*#__PURE__*/_react.default.createElement(_quickSearch.ObjectResult, { key: uniqueKey, resultId: uniqueResultId, name: confluenceResult.name, href: confluenceResult.href, type: confluenceResult.analyticsType, containerName: subText, avatar: (0, _confluenceAvatarUtil.getAvatarForConfluenceObjectResult)(confluenceResult), analyticsData: analyticsData, selectedIcon: selectedIcon }); } case _Result.ResultType.JiraProjectResult: { var jiraResult = result; var avatarData = extractAvatarData(jiraResult); var containerNameElement = jiraResult.projectType ? getI18nJiraContainerName(jiraResult.projectType) : null; return /*#__PURE__*/_react.default.createElement(_quickSearch.ContainerResult, (0, _extends2.default)({ key: uniqueKey, resultId: uniqueResultId, name: jiraResult.name, href: jiraResult.href, type: jiraResult.analyticsType, subText: containerNameElement }, avatarData, { analyticsData: analyticsData, selectedIcon: selectedIcon })); } case _Result.ResultType.JiraObjectResult: { var _jiraResult = result; var _avatarData = extractAvatarData(_jiraResult); var objectKey = _jiraResult.contentType === 'jira-board' || _jiraResult.contentType === 'jira-filter' ? getI18nJiraContentType(_jiraResult.contentType) : _jiraResult.objectKey; return /*#__PURE__*/_react.default.createElement(_quickSearch.ObjectResult, (0, _extends2.default)({ key: uniqueKey, resultId: uniqueResultId, name: _jiraResult.name, href: _jiraResult.href, type: _jiraResult.analyticsType, objectKey: objectKey, containerName: _jiraResult.containerName }, _avatarData, { analyticsData: analyticsData, selectedIcon: selectedIcon })); } case _Result.ResultType.GenericContainerResult: { var containerResult = result; return /*#__PURE__*/_react.default.createElement(_quickSearch.ContainerResult, { key: uniqueKey, resultId: uniqueResultId, name: containerResult.name, href: containerResult.href, type: containerResult.analyticsType, avatarUrl: containerResult.avatarUrl, analyticsData: analyticsData, selectedIcon: selectedIcon }); } case _Result.ResultType.PersonResult: { var personResult = result; var presenceMessage = features.complexSearchExtensionsEnabled ? /*#__PURE__*/_react.default.createElement(LightSubtextWrapper, null, personResult.presenceMessage) : personResult.presenceMessage; return /*#__PURE__*/_react.default.createElement(_quickSearch.PersonResult, { key: uniqueKey, resultId: uniqueResultId, name: personResult.name, href: personResult.href, type: personResult.analyticsType, avatarUrl: personResult.avatarUrl, mentionName: personResult.mentionName, presenceMessage: presenceMessage, analyticsData: analyticsData, selectedIcon: selectedIcon, target: "_blank" }); } case _Result.ResultType.JiraIssueAdvancedSearch: { return /*#__PURE__*/_react.default.createElement(_quickSearch.ResultBase, { href: result.href, resultId: "jira-advanced-issue-search", text: /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _messages.messages.jira_view_all_issues), icon: /*#__PURE__*/_react.default.createElement(_search.default, { size: "medium", label: "View all issues" }), type: _Result.AnalyticsType.LinkPostQueryAdvancedSearchJira, key: uniqueKey, elemAfter: /*#__PURE__*/_react.default.createElement(_Return.default, null) }); } default: { // Make the TS compiler verify that all enums have been matched var _nonExhaustiveMatch = resultType; throw new Error("Non-exhaustive match for result type: ".concat(_nonExhaustiveMatch)); } } }); } }]); return ResultList; }(_react.default.Component); var UnwrappedResultList = ResultList; exports.UnwrappedResultList = UnwrappedResultList; var _default = (0, _FeaturesProvider.injectFeatures)(ResultList); exports.default = _default;