UNPKG

@atlaskit/global-search

Version:

A cross-product search component (batteries included)

225 lines (192 loc) 10.3 kB
import _extends from "@babel/runtime/helpers/extends"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; import _inherits from "@babel/runtime/helpers/inherits"; import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; 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) { _defineProperty(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 = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(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; } } import React from 'react'; import ConfluenceQuickSearchContainer from './confluence/ConfluenceQuickSearchContainer'; import JiraQuickSearchContainer from './jira/JiraQuickSearchContainer'; import configureSearchClients from '../api/configureSearchClients'; import MessagesIntlProvider from './MessagesIntlProvider'; import { GlobalSearchPreFetchContext } from './PrefetchedResultsProvider'; import { createFeatures as _createFeatures } from '../util/features'; import { ABTestProvider } from './AbTestProvider'; import { withFeedbackButton } from './feedback/withFeedbackButton'; import FeaturesProvider from './FeaturesProvider'; var DEFAULT_NOOP_LOGGER = { safeInfo: function safeInfo() {}, safeWarn: function safeWarn() {}, safeError: function safeError() {} }; var ConfluenceContainerWithFeedback = withFeedbackButton(ConfluenceQuickSearchContainer); /** * Component that exposes the public API for global quick search. Its only purpose is to offer a simple, user-friendly API to the outside and hide the implementation detail of search clients etc. */ var GlobalQuickSearchWrapper = /*#__PURE__*/function (_React$Component) { _inherits(GlobalQuickSearchWrapper, _React$Component); var _super = _createSuper(GlobalQuickSearchWrapper); function GlobalQuickSearchWrapper() { var _this; _classCallCheck(this, GlobalQuickSearchWrapper); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty(_assertThisInitialized(_this), "onAdvancedSearch", function (e, entity, query, searchSessionId) { var spaces = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; if (_this.props.onAdvancedSearch) { var preventEventDefault = false; _this.props.onAdvancedSearch({ preventDefault: function preventDefault() { return preventEventDefault = true; }, query: query, // query entered by the user category: entity, originalEvent: e, searchSessionId: searchSessionId, spaces: spaces }); if (preventEventDefault && e) { e.preventDefault(); e.stopPropagation(); } } }); return _this; } _createClass(GlobalQuickSearchWrapper, [{ key: "makeConfig", value: function makeConfig() { var config = {}; var _this$props = this.props, activityServiceUrl = _this$props.activityServiceUrl, searchAggregatorServiceUrl = _this$props.searchAggregatorServiceUrl, directoryServiceUrl = _this$props.directoryServiceUrl, confluenceUrl = _this$props.confluenceUrl, autocompleteUrl = _this$props.autocompleteUrl; if (activityServiceUrl) { config.activityServiceUrl = activityServiceUrl; } if (searchAggregatorServiceUrl) { config.searchAggregatorServiceUrl = searchAggregatorServiceUrl; } if (directoryServiceUrl) { config.directoryServiceUrl = directoryServiceUrl; } if (confluenceUrl) { config.confluenceUrl = confluenceUrl; } if (autocompleteUrl) { config.autocompleteUrl = autocompleteUrl; } return config; } }, { key: "shouldComponentUpdate", value: function shouldComponentUpdate(nextProps, nextState) { var _this2 = this; return Object.keys(_objectSpread(_objectSpread({}, nextProps), this.props)).map(function (key) { return _this2.props[key] !== nextProps[key]; }).reduce(function (acc, value) { return acc || value; }, false) || this.state !== nextState; } }, { key: "createFeatures", value: function createFeatures(abTest) { var _this$props2 = this.props, disableJiraPreQueryPeopleSearch = _this$props2.disableJiraPreQueryPeopleSearch, enablePreQueryFromAggregator = _this$props2.enablePreQueryFromAggregator, useUrsForBootstrapping = _this$props2.useUrsForBootstrapping, isAutocompleteEnabled = _this$props2.isAutocompleteEnabled, isNavAutocompleteEnabled = _this$props2.isNavAutocompleteEnabled; return _createFeatures({ abTest: abTest, useUrsForBootstrapping: !!useUrsForBootstrapping, disableJiraPreQueryPeopleSearch: !!disableJiraPreQueryPeopleSearch, enablePreQueryFromAggregator: !!enablePreQueryFromAggregator, isAutocompleteEnabled: !!isAutocompleteEnabled, isNavAutocompleteEnabled: !!isNavAutocompleteEnabled }); } }, { key: "renderSearchContainer", value: function renderSearchContainer(searchClients, abTest) { var _this$props3 = this.props, linkComponent = _this$props3.linkComponent, referralContextIdentifiers = _this$props3.referralContextIdentifiers, logger = _this$props3.logger, inputControls = _this$props3.inputControls, appPermission = _this$props3.appPermission, modelContext = _this$props3.modelContext, showFeedbackCollector = _this$props3.showFeedbackCollector, feedbackCollectorProps = _this$props3.feedbackCollectorProps, confluenceUrl = _this$props3.confluenceUrl, isJiraPeopleProfilesEnabled = _this$props3.isJiraPeopleProfilesEnabled; var commonProps = _objectSpread(_objectSpread({}, searchClients), {}, { linkComponent: linkComponent, referralContextIdentifiers: referralContextIdentifiers, logger: logger || DEFAULT_NOOP_LOGGER, onAdvancedSearch: this.onAdvancedSearch }); if (this.props.context === 'confluence') { if (showFeedbackCollector) { return ( /*#__PURE__*/ // Same as below but missing input controls which is injected by the feedback button React.createElement(ConfluenceContainerWithFeedback, _extends({}, commonProps, feedbackCollectorProps, { modelContext: modelContext, confluenceUrl: confluenceUrl || '' })) ); } return /*#__PURE__*/React.createElement(ConfluenceQuickSearchContainer, _extends({}, commonProps, feedbackCollectorProps, { modelContext: modelContext, inputControls: inputControls, confluenceUrl: confluenceUrl || '' })); } else if (this.props.context === 'jira') { return /*#__PURE__*/React.createElement(JiraQuickSearchContainer, _extends({}, commonProps, { appPermission: appPermission, isJiraPeopleProfilesEnabled: isJiraPeopleProfilesEnabled })); } else { var errorMessage = "Invalid product type, product ".concat(this.props.context, " is unsupported"); if (logger) { logger.safeError(errorMessage); } throw new Error(errorMessage); } } }, { key: "render", value: function render() { var _this3 = this; return /*#__PURE__*/React.createElement(MessagesIntlProvider, null, /*#__PURE__*/React.createElement(GlobalSearchPreFetchContext.Consumer, null, function (prefetchedResults) { var searchClients = configureSearchClients(_this3.props.cloudId, _this3.makeConfig(), _this3.props.userId === null, prefetchedResults); var context = _this3.props.context; return /*#__PURE__*/React.createElement(ABTestProvider, { context: context, crossProductSearchClient: searchClients.crossProductSearchClient }, function (abTest) { return /*#__PURE__*/React.createElement(FeaturesProvider, { features: _this3.createFeatures(abTest) }, _this3.renderSearchContainer(searchClients, abTest)); }); })); } }]); return GlobalQuickSearchWrapper; }(React.Component); _defineProperty(GlobalQuickSearchWrapper, "defaultProps", { logger: DEFAULT_NOOP_LOGGER }); export { GlobalQuickSearchWrapper as default };