@atlaskit/mention
Version:
A React component used to display user profiles in a list for 'Mention' functionality
95 lines (94 loc) • 3.01 kB
JavaScript
import { OPERATIONAL_EVENT_TYPE, UI_EVENT_TYPE } from '@atlaskit/analytics-gas-types';
import { ELEMENTS_CHANNEL } from '../_constants';
import { ComponentNames, isSpecialMentionText } from '../types';
const packageName = "@atlaskit/mention";
const packageVersion = "24.2.6";
export const SLI_EVENT_TYPE = 'sli';
export const SMART_EVENT_TYPE = 'smart';
export const fireAnalyticsMentionTypeaheadEvent = props => (action, duration, userIds = [], query) => {
if (props.createAnalyticsEvent) {
const eventPayload = {
action,
actionSubject: ComponentNames.TYPEAHEAD,
attributes: {
packageName,
packageVersion,
componentName: ComponentNames.MENTION,
duration: Math.round(duration),
userIds,
queryLength: query ? query.length : 0
},
eventType: OPERATIONAL_EVENT_TYPE
};
const analyticsEvent = props.createAnalyticsEvent(eventPayload);
analyticsEvent.fire(ELEMENTS_CHANNEL);
}
};
export const fireAnalyticsMentionEvent = createEvent => (actionSubject, action, text, id, accessLevel) => {
const payload = {
action,
actionSubject,
eventType: UI_EVENT_TYPE,
attributes: {
packageName,
packageVersion,
componentName: ComponentNames.MENTION,
accessLevel,
isSpecial: isSpecialMentionText(text),
userId: id
}
};
const event = createEvent(payload);
event.fire(ELEMENTS_CHANNEL);
return event;
};
export const fireSliAnalyticsEvent = props => (actionSubject, action) => {
if (props.createAnalyticsEvent) {
const eventPayload = buildSliPayload(actionSubject, action);
props.createAnalyticsEvent(eventPayload).fire(ELEMENTS_CHANNEL);
}
};
export const buildSliPayload = (actionSubject, action, attributes) => {
const eventPayload = {
action,
actionSubject,
eventType: OPERATIONAL_EVENT_TYPE,
attributes: {
packageName,
packageVersion,
componentName: ComponentNames.MENTION,
...attributes
}
};
return eventPayload;
};
export const fireAnalyticsMentionHydrationEvent = props => (action, userId, fromCache, duration) => {
if (props.createAnalyticsEvent) {
const eventPayload = {
action,
actionSubject: ComponentNames.MENTION,
actionSubjectId: 'hydration',
attributes: {
packageName,
packageVersion,
componentName: ComponentNames.MENTION,
userId,
fromCache,
duration: Math.round(duration)
},
eventType: OPERATIONAL_EVENT_TYPE
};
const analyticsEvent = props.createAnalyticsEvent(eventPayload);
analyticsEvent.fire(ELEMENTS_CHANNEL);
}
};
// OLD Analytics
const MENTION_ANALYTICS_PREFIX = 'atlassian.fabric.mention';
export const fireAnalytics = firePrivateAnalyticsEvent => (eventName, text, accessLevel) => {
if (firePrivateAnalyticsEvent) {
firePrivateAnalyticsEvent(`${MENTION_ANALYTICS_PREFIX}.${eventName}`, {
accessLevel,
isSpecial: isSpecialMentionText(text)
});
}
};