@comparaonline/event-tracker
Version:
This library it's an interface between any frontend application and some event tracking platforms, currently Snowplow and Tag Manager.
59 lines (58 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.trackToABTasty = trackToABTasty;
var _constants = require("../constants");
var _eventNames = require("../constants/eventNames");
function trackToABTasty(event) {
if (typeof window.abtasty !== 'object') {
console.warn("abtasty wasn't initialized, failed to track an event push");
return;
}
if (typeof window.abtasty.send !== 'function') {
console.warn("Can't track events to abtasty, failed to track an event push");
return;
}
const eventData = MAP_EVENT_TO_PARSER[event.name]?.(event) || parseEvent(event);
const eventName = MAP_EVENT_NAME_TO_ABTASITY_EVENT[event.name] || 'event';
window.abtasty.send(eventName, eventData);
}
const MAP_EVENT_NAME_TO_ABTASITY_EVENT = {
[_eventNames.EVENT_NAME.TRANSACTION]: 'transaction'
};
const MAP_EVENT_TO_PARSER = {
[_eventNames.EVENT_NAME.TRANSACTION]: parseTransaction,
[_eventNames.EVENT_NAME.FORM_STEP_RENDER]: parseFormStepRender
};
function parseEvent(event) {
return {
ec: 'Action Tracking',
ea: event.name
};
}
function parseTransaction(event) {
const data = event.data;
return {
tid: data.orderId,
ta: data.type,
tr: data.price,
tt: data.tax,
tc: data.currency,
tcc: data.couponCode,
pm: data.paymentMethod,
icn: data.itemCount || 1
};
}
function parseFormStepRender(event) {
const {
accordion_name: accordionName,
business_unit: businessUnit,
country_code: countryCode
} = event.data;
const BU = `${_constants.SHORT_BUSINESS_UNIT[businessUnit]}${countryCode}`.toUpperCase();
return {
ec: 'Action Tracking',
ea: `${BU} - Render ${accordionName}`
};
}