@atlaskit/global-search
Version:
A cross-product search component (batteries included)
249 lines (217 loc) • 12 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.firePreQueryShownEvent = firePreQueryShownEvent;
exports.fireExperimentExposureEvent = fireExperimentExposureEvent;
exports.fireTextEnteredEvent = fireTextEnteredEvent;
exports.fireDismissedEvent = fireDismissedEvent;
exports.firePostQueryShownEvent = firePostQueryShownEvent;
exports.fireSelectedSearchResult = fireSelectedSearchResult;
exports.fireSelectedAdvancedSearch = fireSelectedAdvancedSearch;
exports.fireHighlightedSearchResult = fireHighlightedSearchResult;
exports.fireShowMoreButtonClickEvent = fireShowMoreButtonClickEvent;
exports.fireMoreFiltersButtonClickEvent = fireMoreFiltersButtonClickEvent;
exports.fireSpaceFilterShownEvent = fireSpaceFilterShownEvent;
exports.fireAutocompleteRenderedEvent = fireAutocompleteRenderedEvent;
exports.fireAutocompleteCompletedEvent = fireAutocompleteCompletedEvent;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var Rusha = _interopRequireWildcard(require("rusha"));
var _analyticsUtil = require("./analytics-util");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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 stripUGC(referralContextIdentifiers) {
if (referralContextIdentifiers) {
var searchReferrerId = referralContextIdentifiers.searchReferrerId,
currentContentId = referralContextIdentifiers.currentContentId,
currentContainerId = referralContextIdentifiers.currentContainerId;
return {
searchReferrerId: searchReferrerId,
currentContentId: currentContentId,
currentContainerId: currentContainerId
};
}
}
var fireGasEvent = function fireGasEvent(createAnalyticsEvent, action, actionSubject, actionSubjectId, eventType, extraAtrributes, nonPrivacySafeAttributes) {
if (createAnalyticsEvent) {
var event = createAnalyticsEvent({});
var _payload = {
action: action,
actionSubject: actionSubject,
actionSubjectId: actionSubjectId,
eventType: eventType,
source: _analyticsUtil.DEFAULT_GAS_SOURCE,
attributes: _objectSpread(_objectSpread({}, extraAtrributes), _analyticsUtil.DEFAULT_GAS_ATTRIBUTES)
};
if (nonPrivacySafeAttributes) {
_payload.nonPrivacySafeAttributes = nonPrivacySafeAttributes;
}
event.update(_payload).fire(_analyticsUtil.DEFAULT_GAS_CHANNEL);
}
};
function firePreQueryShownEvent(eventAttributes, elapsedMs, renderTimeMs, searchSessionId, createAnalyticsEvent, abTest, referralContextIdentifiers, retrievedFromAggregator) {
fireGasEvent(createAnalyticsEvent, 'shown', 'searchResults', 'preQuerySearchResults', 'ui', _objectSpread(_objectSpread({
preQueryRequestDurationMs: elapsedMs,
renderTimeMs: renderTimeMs,
searchSessionId: searchSessionId,
referralContextIdentifiers: stripUGC(referralContextIdentifiers)
}, eventAttributes), {}, {
retrievedFromAggregator: retrievedFromAggregator
}, abTest));
}
function fireExperimentExposureEvent(abTest, searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'exposed', 'quickSearchExperiment', '', 'operational', _objectSpread({
searchSessionId: searchSessionId,
abTest: abTest
}, abTest));
}
var getQueryAttributes = function getQueryAttributes(query) {
var sanitizedQuery = (0, _analyticsUtil.sanitizeSearchQuery)(query);
return {
queryLength: sanitizedQuery.length,
wordCount: sanitizedQuery.length > 0 ? sanitizedQuery.split(/\s/).length : 0,
queryHash: sanitizedQuery ? hash(sanitizedQuery) : '',
isNonZeroNumericQuery: !!+sanitizedQuery
};
};
var getNonPrivacySafeAttributes = function getNonPrivacySafeAttributes(query) {
return {
query: (0, _analyticsUtil.sanitizeSearchQuery)(query)
};
};
function fireTextEnteredEvent(query, searchSessionId, queryVersion, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'entered', 'text', 'globalSearchInputBar', 'track', _objectSpread(_objectSpread({
queryId: null,
queryVersion: queryVersion
}, getQueryAttributes(query)), {}, {
searchSessionId: searchSessionId
}), getNonPrivacySafeAttributes(query));
}
function fireDismissedEvent(searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'dismissed', 'globalSearchDrawer', '', 'ui', {
searchSessionId: searchSessionId
});
}
function firePostQueryShownEvent(resultsDetails, timings, searchSessionId, query, filtersApplied, createAnalyticsEvent, abTest, referralContextIdentifiers) {
var event = createAnalyticsEvent({});
var elapsedMs = timings.elapsedMs,
otherPerformanceTimings = (0, _objectWithoutProperties2.default)(timings, ["elapsedMs"]);
var payload = {
action: 'shown',
actionSubject: 'searchResults',
actionSubjectId: 'postQuerySearchResults',
eventType: 'ui',
source: _analyticsUtil.DEFAULT_GAS_SOURCE,
attributes: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, getQueryAttributes(query)), {}, {
filtersApplied: filtersApplied,
postQueryRequestDurationMs: elapsedMs,
searchSessionId: searchSessionId,
referralContextIdentifiers: stripUGC(referralContextIdentifiers)
}, otherPerformanceTimings), resultsDetails), _analyticsUtil.DEFAULT_GAS_ATTRIBUTES), abTest)
};
event.update(payload).fire(_analyticsUtil.DEFAULT_GAS_CHANNEL);
}
var transformSearchResultEventData = function transformSearchResultEventData(eventData) {
return {
resultContentId: eventData.resultId,
type: eventData.contentType,
sectionId: eventData.type,
sectionIndex: eventData.sectionIndex,
globalIndex: eventData.index,
indexWithinSection: eventData.indexWithinSection,
containerId: (0, _analyticsUtil.sanitizeContainerId)(eventData.containerId),
resultCount: eventData.resultCount,
experimentId: eventData.experimentId,
isRecentResult: eventData.isRecentResult
};
};
var hash = function hash(str) {
return Rusha.createHash().update(str).digest('hex');
};
function fireSelectedSearchResult(eventData, searchSessionId, referralContextIdentifiers, createAnalyticsEvent) {
var method = eventData.method,
newTab = eventData.newTab,
query = eventData.query,
queryVersion = eventData.queryVersion;
fireGasEvent(createAnalyticsEvent, 'selected', 'navigationItem', 'searchResult', 'track', _objectSpread(_objectSpread(_objectSpread({
queryVersion: queryVersion,
queryId: null
}, getQueryAttributes(query)), {}, {
trigger: method,
searchSessionId: searchSessionId,
newTab: newTab
}, transformSearchResultEventData(eventData)), {}, {
referralContextIdentifiers: stripUGC(referralContextIdentifiers)
}));
}
function fireSelectedAdvancedSearch(eventData, searchSessionId, referralContextIdentifiers, createAnalyticsEvent) {
var method = eventData.method,
newTab = eventData.newTab,
query = eventData.query,
queryVersion = eventData.queryVersion;
fireGasEvent(createAnalyticsEvent, 'selected', 'navigationItem', "advanced_".concat(eventData.resultId), 'track', _objectSpread(_objectSpread(_objectSpread({
trigger: method,
searchSessionId: searchSessionId,
newTab: newTab,
queryVersion: queryVersion,
queryId: null,
isLoading: eventData.isLoading
}, getQueryAttributes(query)), {}, {
wasOnNoResultsScreen: eventData.wasOnNoResultsScreen || false
}, transformSearchResultEventData(eventData)), {}, {
referralContextIdentifiers: stripUGC(referralContextIdentifiers)
}));
}
function fireHighlightedSearchResult(eventData, searchSessionId, referralContextIdentifiers, createAnalyticsEvent) {
var key = eventData.key;
fireGasEvent(createAnalyticsEvent, 'highlighted', 'navigationItem', 'searchResult', 'ui', _objectSpread(_objectSpread({
searchSessionId: searchSessionId
}, transformSearchResultEventData(eventData)), {}, {
key: key,
referralContextIdentifiers: stripUGC(referralContextIdentifiers)
}));
}
function fireShowMoreButtonClickEvent(searchSessionId, currentSize, totalResultSize, buttonIdentifier, pageSize, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'clicked', 'button', buttonIdentifier, 'ui', {
searchSessionId: searchSessionId,
currentSize: currentSize,
totalResultSize: totalResultSize,
pageSize: pageSize
});
}
function fireMoreFiltersButtonClickEvent(searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'clicked', 'button', 'showMoreFilters', 'ui', {
searchSessionId: searchSessionId
});
}
function fireSpaceFilterShownEvent(searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'shown', 'filter', 'spaceFilterButton', 'ui', {
searchSessionId: searchSessionId
});
}
function fireAutocompleteRenderedEvent(duration, searchSessionId, query, autocompleteText, queryVersion, fromCache, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'rendered', 'autocomplete', '', 'operational', _objectSpread(_objectSpread({
duration: duration,
searchSessionId: searchSessionId
}, getQueryAttributes(query)), {}, {
autocompleteTextHash: hash(autocompleteText),
queryVersion: queryVersion,
fromCache: fromCache
}), _objectSpread(_objectSpread({}, getNonPrivacySafeAttributes(query)), {}, {
autocompleteText: autocompleteText
}));
}
function fireAutocompleteCompletedEvent(searchSessionId, query, completedText, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'completed', 'autocomplete', '', 'ui', _objectSpread(_objectSpread({
searchSessionId: searchSessionId
}, getQueryAttributes(query)), {}, {
completedTextHash: hash(completedText)
}), _objectSpread(_objectSpread({}, getNonPrivacySafeAttributes(query)), {}, {
completedText: completedText
}));
}