@atlaskit/global-search
Version:
A cross-product search component (batteries included)
121 lines • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = tslib_1.__importStar(require("react"));
var ConfluenceQuickSearchContainer_1 = tslib_1.__importDefault(require("./confluence/ConfluenceQuickSearchContainer"));
var JiraQuickSearchContainer_1 = tslib_1.__importDefault(require("./jira/JiraQuickSearchContainer"));
var configureSearchClients_1 = tslib_1.__importDefault(require("../api/configureSearchClients"));
var MessagesIntlProvider_1 = tslib_1.__importDefault(require("./MessagesIntlProvider"));
var PrefetchedResultsProvider_1 = require("./PrefetchedResultsProvider");
var features_1 = require("../util/features");
var AbTestProvider_1 = require("./AbTestProvider");
var withFeedbackButton_1 = require("./feedback/withFeedbackButton");
var FeaturesProvider_1 = tslib_1.__importDefault(require("./FeaturesProvider"));
var DEFAULT_NOOP_LOGGER = {
safeInfo: function () { },
safeWarn: function () { },
safeError: function () { },
};
var ConfluenceContainerWithFeedback = withFeedbackButton_1.withFeedbackButton(ConfluenceQuickSearchContainer_1.default);
/**
* 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 = /** @class */ (function (_super) {
tslib_1.__extends(GlobalQuickSearchWrapper, _super);
function GlobalQuickSearchWrapper() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.onAdvancedSearch = function (e, entity, query, searchSessionId, spaces) {
if (spaces === void 0) { spaces = []; }
if (_this.props.onAdvancedSearch) {
var preventEventDefault_1 = false;
_this.props.onAdvancedSearch({
preventDefault: function () { return (preventEventDefault_1 = true); },
query: query,
category: entity,
originalEvent: e,
searchSessionId: searchSessionId,
spaces: spaces,
});
if (preventEventDefault_1 && e) {
e.preventDefault();
e.stopPropagation();
}
}
};
return _this;
}
GlobalQuickSearchWrapper.prototype.makeConfig = function () {
var config = {};
var _a = this.props, activityServiceUrl = _a.activityServiceUrl, searchAggregatorServiceUrl = _a.searchAggregatorServiceUrl, directoryServiceUrl = _a.directoryServiceUrl, confluenceUrl = _a.confluenceUrl, autocompleteUrl = _a.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;
};
GlobalQuickSearchWrapper.prototype.shouldComponentUpdate = function (nextProps, nextState) {
var _this = this;
return (Object.keys(tslib_1.__assign(tslib_1.__assign({}, nextProps), this.props))
.map(function (key) { return _this.props[key] !== nextProps[key]; })
.reduce(function (acc, value) { return acc || value; }, false) || this.state !== nextState);
};
GlobalQuickSearchWrapper.prototype.createFeatures = function (abTest) {
var _a = this.props, disableJiraPreQueryPeopleSearch = _a.disableJiraPreQueryPeopleSearch, enablePreQueryFromAggregator = _a.enablePreQueryFromAggregator, useUrsForBootstrapping = _a.useUrsForBootstrapping, isAutocompleteEnabled = _a.isAutocompleteEnabled, isNavAutocompleteEnabled = _a.isNavAutocompleteEnabled;
return features_1.createFeatures({
abTest: abTest,
useUrsForBootstrapping: !!useUrsForBootstrapping,
disableJiraPreQueryPeopleSearch: !!disableJiraPreQueryPeopleSearch,
enablePreQueryFromAggregator: !!enablePreQueryFromAggregator,
isAutocompleteEnabled: !!isAutocompleteEnabled,
isNavAutocompleteEnabled: !!isNavAutocompleteEnabled,
});
};
GlobalQuickSearchWrapper.prototype.renderSearchContainer = function (searchClients, abTest) {
var _a = this.props, linkComponent = _a.linkComponent, referralContextIdentifiers = _a.referralContextIdentifiers, logger = _a.logger, inputControls = _a.inputControls, appPermission = _a.appPermission, modelContext = _a.modelContext, showFeedbackCollector = _a.showFeedbackCollector, feedbackCollectorProps = _a.feedbackCollectorProps, confluenceUrl = _a.confluenceUrl, isJiraPeopleProfilesEnabled = _a.isJiraPeopleProfilesEnabled;
var commonProps = tslib_1.__assign(tslib_1.__assign({}, searchClients), { linkComponent: linkComponent, referralContextIdentifiers: referralContextIdentifiers, logger: logger || DEFAULT_NOOP_LOGGER, onAdvancedSearch: this.onAdvancedSearch });
if (this.props.context === 'confluence') {
if (showFeedbackCollector) {
return (
// Same as below but missing input controls which is injected by the feedback button
React.createElement(ConfluenceContainerWithFeedback, tslib_1.__assign({}, commonProps, feedbackCollectorProps, { modelContext: modelContext, confluenceUrl: confluenceUrl || '' })));
}
return (React.createElement(ConfluenceQuickSearchContainer_1.default, tslib_1.__assign({}, commonProps, feedbackCollectorProps, { modelContext: modelContext, inputControls: inputControls, confluenceUrl: confluenceUrl || '' })));
}
else if (this.props.context === 'jira') {
return (React.createElement(JiraQuickSearchContainer_1.default, tslib_1.__assign({}, commonProps, { appPermission: appPermission, isJiraPeopleProfilesEnabled: isJiraPeopleProfilesEnabled })));
}
else {
var errorMessage = "Invalid product type, product " + this.props.context + " is unsupported";
if (logger) {
logger.safeError(errorMessage);
}
throw new Error(errorMessage);
}
};
GlobalQuickSearchWrapper.prototype.render = function () {
var _this = this;
return (React.createElement(MessagesIntlProvider_1.default, null,
React.createElement(PrefetchedResultsProvider_1.GlobalSearchPreFetchContext.Consumer, null, function (prefetchedResults) {
var searchClients = configureSearchClients_1.default(_this.props.cloudId, _this.makeConfig(), _this.props.userId === null, prefetchedResults);
var context = _this.props.context;
return (React.createElement(AbTestProvider_1.ABTestProvider, { context: context, crossProductSearchClient: searchClients.crossProductSearchClient }, function (abTest) { return (React.createElement(FeaturesProvider_1.default, { features: _this.createFeatures(abTest) }, _this.renderSearchContainer(searchClients, abTest))); }));
})));
};
GlobalQuickSearchWrapper.defaultProps = {
logger: DEFAULT_NOOP_LOGGER,
};
return GlobalQuickSearchWrapper;
}(React.Component));
exports.default = GlobalQuickSearchWrapper;
//# sourceMappingURL=GlobalQuickSearchWrapper.js.map