@atlaskit/global-search
Version:
A cross-product search component (batteries included)
296 lines (233 loc) • 13.2 kB
JavaScript
"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;