208 lines
6.9 KiB
JavaScript
208 lines
6.9 KiB
JavaScript
import {
|
|
areAllSessionCookiesSet,
|
|
getDeviceIdValue,
|
|
getSessionIdValue,
|
|
getSessionKeyValue,
|
|
getUserIdValue,
|
|
regenerateUserId,
|
|
regenerateDeviceId,
|
|
setSessionIdIfUnset,
|
|
setSessionKeyIfUnset
|
|
} from '@/helpers/cookie-helper';
|
|
import applicationConfig from '@/constants/application-config';
|
|
import queryStrings from '@/constants/query-strings';
|
|
import { experimentSettings } from '@/constants/experiments';
|
|
import {
|
|
analyticsPageEvents,
|
|
GaCategories,
|
|
GaActions,
|
|
GaLabels,
|
|
GaEvents,
|
|
ValueToLogTypes
|
|
} from '@/constants/analytics';
|
|
import { useMainStore } from '@/store';
|
|
|
|
function pushToDataLayerIfDefined(data) {
|
|
if (window.dataLayer !== undefined) {
|
|
window.dataLayer.push(data);
|
|
}
|
|
}
|
|
|
|
function getValueToLog(value, valueToLogType) {
|
|
if (valueToLogType != null && valueToLogType === ValueToLogTypes.LAST_5) {
|
|
return value.slice(-5);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
export default {
|
|
methods: {
|
|
getPageNameByQueryString() {
|
|
const params = new URLSearchParams(location.search);
|
|
|
|
if (params.has(queryStrings.ISS_PAGE)) {
|
|
return params.get(queryStrings.ISS_PAGE);
|
|
}
|
|
return '';
|
|
},
|
|
logPageView(pageEvent) {
|
|
const currentPageName = this.getPageNameByQueryString();
|
|
const payload = {
|
|
userId: getDeviceIdValue(),
|
|
sessionKey: getSessionKeyValue(),
|
|
pageName: currentPageName,
|
|
sessionId: getSessionIdValue(),
|
|
action: '',
|
|
event: pageEvent,
|
|
shouldUseSessionId: false,
|
|
experimentsForUser: useMainStore().applicationUser.experiments
|
|
};
|
|
|
|
useMainStore().logPageView(payload);
|
|
},
|
|
|
|
logCustomEvent(category, action, label, value) {
|
|
const currentPageName = this.getPageNameByQueryString();
|
|
|
|
const payload = {
|
|
userId: getDeviceIdValue(),
|
|
sessionKey: getSessionKeyValue(),
|
|
pageName: currentPageName,
|
|
sessionId: getSessionIdValue(),
|
|
category,
|
|
action,
|
|
label,
|
|
value,
|
|
shouldUseSessionId: false,
|
|
experimentsForUser: useMainStore().applicationUser.experiments
|
|
};
|
|
|
|
useMainStore().logCustomEvent(payload);
|
|
},
|
|
|
|
pushEventToGA(category, action, label, pushToLogApp = false, valueToLogType = null) {
|
|
const currentPageName = this.getPageNameByQueryString();
|
|
const labelToLog = getValueToLog(label, valueToLogType);
|
|
|
|
const eventToBePushed = {
|
|
event: GaEvents.GENERIC_EVENT,
|
|
category,
|
|
action,
|
|
label: labelToLog,
|
|
value: undefined,
|
|
path: `/iss/?${queryStrings.ISS_PAGE}=${currentPageName}`
|
|
};
|
|
|
|
pushToDataLayerIfDefined(eventToBePushed);
|
|
|
|
if (pushToLogApp) {
|
|
this.logCustomEvent(category, action, labelToLog, undefined);
|
|
}
|
|
},
|
|
|
|
pushPageViewToGA() {
|
|
const currentPageName = this.getPageNameByQueryString();
|
|
const pageViewEvent = {
|
|
event: GaEvents.PAGE_VIEW_EVENT,
|
|
pagePath: `/iss/?${queryStrings.ISS_PAGE}=${currentPageName}`,
|
|
pageTitle: currentPageName
|
|
};
|
|
|
|
pushToDataLayerIfDefined(pageViewEvent);
|
|
|
|
this.logPageView(analyticsPageEvents.ENTRY);
|
|
},
|
|
|
|
pushValueToGA() {
|
|
pushToDataLayerIfDefined({
|
|
siteType: useMainStore().issConfig.siteType
|
|
});
|
|
},
|
|
|
|
pushExperimentsToDataLayer() {
|
|
const { experiments } = useMainStore().applicationUser;
|
|
experiments?.forEach((exp) => {
|
|
// Set Google Dimension Index based on experiment settings.
|
|
let googleDimensionIndex = 99;
|
|
|
|
if (exp.settings[experimentSettings.GOOGLE_CUSTOM_DIMENSION_INDEX] !== undefined) {
|
|
googleDimensionIndex = exp.settings[experimentSettings.GOOGLE_CUSTOM_DIMENSION_INDEX];
|
|
}
|
|
|
|
// Create object with dimension index and value.
|
|
const experimentWithDimension = {
|
|
[`experimentId_${googleDimensionIndex}`]: exp.universeId,
|
|
[`variationId_${googleDimensionIndex}`]: exp.variationId,
|
|
[`experimentName_${googleDimensionIndex}`]: exp.universeName,
|
|
[`variationName_${googleDimensionIndex}`]: exp.variationName,
|
|
[`customDimension_${googleDimensionIndex}`]:
|
|
`${exp.universeId}_${exp.variationId}_${exp.universeName}_${exp.variationName}`
|
|
};
|
|
|
|
// Push to the data layer with the Google Custom Dimension Index.
|
|
pushToDataLayerIfDefined(experimentWithDimension);
|
|
});
|
|
},
|
|
|
|
prependActionToMethod(object, method, actionToPrepend) {
|
|
const baseMethodName = method.name.startsWith('bound ')
|
|
? method.name.substring(6)
|
|
: method.name;
|
|
const baseMethod = object[baseMethodName];
|
|
object[baseMethodName] = function () {
|
|
actionToPrepend.apply(this, arguments);
|
|
return baseMethod.apply(object, arguments);
|
|
};
|
|
},
|
|
|
|
async initSession() {
|
|
regenerateDeviceId();
|
|
regenerateUserId();
|
|
|
|
const deviceId = getDeviceIdValue(); // cookieNames.DXDEV
|
|
const userId = getUserIdValue(); // cookieNames.ISS_USER_ID
|
|
const sid = getSessionIdValue(); // cookieNames.SESSION_ID
|
|
// const skey = getSessionKeyValue();
|
|
const referrer = applicationConfig.CURRENT_ENVIRONMENT !== 'Localhost' ? document.referrer : null;
|
|
const payload = {
|
|
deviceId,
|
|
referrer,
|
|
sessionId: sid,
|
|
userId,
|
|
userAgent: navigator.userAgent
|
|
};
|
|
|
|
const response = await useMainStore().initializeSession(payload);
|
|
|
|
if (response?.data) {
|
|
if (response?.data.sessionKey) {
|
|
setSessionKeyIfUnset(response.data.sessionKey);
|
|
}
|
|
if (response?.data.sessionId) {
|
|
setSessionIdIfUnset(response.data.sessionId);
|
|
}
|
|
}
|
|
},
|
|
|
|
noSession() {
|
|
return !areAllSessionCookiesSet();
|
|
}
|
|
},
|
|
computed: {
|
|
analyticsPageEvents() {
|
|
return analyticsPageEvents;
|
|
},
|
|
GaCategories() {
|
|
return GaCategories;
|
|
},
|
|
GaActions() {
|
|
return GaActions;
|
|
},
|
|
GaLabels() {
|
|
return GaLabels;
|
|
},
|
|
ValueToLogTypes() {
|
|
return ValueToLogTypes;
|
|
}
|
|
}
|
|
};
|