@atlaskit/global-search
Version:
A cross-product search component (batteries included)
212 lines (196 loc) • 9.73 kB
JavaScript
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
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; }
import * as Rusha from 'rusha';
import { sanitizeSearchQuery, sanitizeContainerId, DEFAULT_GAS_CHANNEL, DEFAULT_GAS_ATTRIBUTES, DEFAULT_GAS_SOURCE } from './analytics-util';
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: DEFAULT_GAS_SOURCE,
attributes: _objectSpread(_objectSpread({}, extraAtrributes), DEFAULT_GAS_ATTRIBUTES)
};
if (nonPrivacySafeAttributes) {
_payload.nonPrivacySafeAttributes = nonPrivacySafeAttributes;
}
event.update(_payload).fire(DEFAULT_GAS_CHANNEL);
}
};
export 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));
}
export function fireExperimentExposureEvent(abTest, searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'exposed', 'quickSearchExperiment', '', 'operational', _objectSpread({
searchSessionId: searchSessionId,
abTest: abTest
}, abTest));
}
var getQueryAttributes = function getQueryAttributes(query) {
var sanitizedQuery = 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: sanitizeSearchQuery(query)
};
};
export function fireTextEnteredEvent(query, searchSessionId, queryVersion, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'entered', 'text', 'globalSearchInputBar', 'track', _objectSpread(_objectSpread({
queryId: null,
queryVersion: queryVersion
}, getQueryAttributes(query)), {}, {
searchSessionId: searchSessionId
}), getNonPrivacySafeAttributes(query));
}
export function fireDismissedEvent(searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'dismissed', 'globalSearchDrawer', '', 'ui', {
searchSessionId: searchSessionId
});
}
export function firePostQueryShownEvent(resultsDetails, timings, searchSessionId, query, filtersApplied, createAnalyticsEvent, abTest, referralContextIdentifiers) {
var event = createAnalyticsEvent({});
var elapsedMs = timings.elapsedMs,
otherPerformanceTimings = _objectWithoutProperties(timings, ["elapsedMs"]);
var payload = {
action: 'shown',
actionSubject: 'searchResults',
actionSubjectId: 'postQuerySearchResults',
eventType: 'ui',
source: DEFAULT_GAS_SOURCE,
attributes: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, getQueryAttributes(query)), {}, {
filtersApplied: filtersApplied,
postQueryRequestDurationMs: elapsedMs,
searchSessionId: searchSessionId,
referralContextIdentifiers: stripUGC(referralContextIdentifiers)
}, otherPerformanceTimings), resultsDetails), DEFAULT_GAS_ATTRIBUTES), abTest)
};
event.update(payload).fire(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: sanitizeContainerId(eventData.containerId),
resultCount: eventData.resultCount,
experimentId: eventData.experimentId,
isRecentResult: eventData.isRecentResult
};
};
var hash = function hash(str) {
return Rusha.createHash().update(str).digest('hex');
};
export 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)
}));
}
export 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)
}));
}
export 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)
}));
}
export function fireShowMoreButtonClickEvent(searchSessionId, currentSize, totalResultSize, buttonIdentifier, pageSize, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'clicked', 'button', buttonIdentifier, 'ui', {
searchSessionId: searchSessionId,
currentSize: currentSize,
totalResultSize: totalResultSize,
pageSize: pageSize
});
}
export function fireMoreFiltersButtonClickEvent(searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'clicked', 'button', 'showMoreFilters', 'ui', {
searchSessionId: searchSessionId
});
}
export function fireSpaceFilterShownEvent(searchSessionId, createAnalyticsEvent) {
fireGasEvent(createAnalyticsEvent, 'shown', 'filter', 'spaceFilterButton', 'ui', {
searchSessionId: searchSessionId
});
}
export 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
}));
}
export 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
}));
}