Repository URL to install this package:
|
Version:
3.3.0-rc.1 ▾
|
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var errors = require('../helpers/errors.js');
var dispatchers = require('./dispatchers.js');
var getters = require('./getters.js');
/**
* Handler for tracking, a private function called both for imperative and declarative tracking
*
* It may be called either with a trackingIntent or with a trackingEl, which carries tracking data attributes
* In case both are passed trackingIntent is preferred
*
* @private
* @param {Object} payload - An object with the interface accepted by getTrackingDefinition
* @param {TrackingIntent} [payload.trackingIntent] - The payload must contain either a tracking intent...
* @param {HTMLElement} [payload.trackingEl] - ...or, alternatively, an HTML element to inspect
* @param {MouseEvent} [payload.event] - An optional click event to be cancelled in case of same tab links
* @param {TrackingApiOptions} [apiClientOptions] - The API client's options
* @param {string[]} [consents] - The currently active consents.
* @return {Promise<boolean>} - Whether all destination services were tracked succesfully
*/
var handleTrack = /*#__PURE__*/function () {
var _ref = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _ref2,
trackingIntent,
trackingEl,
event,
apiClientOptions,
consents,
trackingDefinition,
_trackingDefinition$t,
href,
isSameTabLink,
dispatchersResults,
isAllTrackingSuccessful,
_args = arguments;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_ref2 = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, trackingIntent = _ref2.trackingIntent, trackingEl = _ref2.trackingEl, event = _ref2.event;
apiClientOptions = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
consents = _args.length > 2 && _args[2] !== undefined ? _args[2] : [];
trackingDefinition = getters.getTrackingDefinition({
trackingIntent: trackingIntent,
trackingEl: trackingEl
}, apiClientOptions, consents);
_trackingDefinition$t = trackingDefinition.trackingOptions, href = _trackingDefinition$t.href, isSameTabLink = _trackingDefinition$t.isSameTabLink;
if (!isSameTabLink) {
_context.next = 13;
break;
}
// Event is optional, e.g. when tracking imperatively from a saga we do not need to cancel the DOM event
if (event) {
// For link tags (<a>) we hijack the browser redirect behavior to ensure tracking is complete before redirecting
event.preventDefault();
}
_context.next = 9;
return dispatchers.dispatchTrack(trackingDefinition);
case 9:
dispatchersResults = _context.sent;
// TODO: WEB-5197 allow consumers to inject their router navigator function
// otherwise we break their SPA behavior forcing full page reloads for tracked links
if (href) {
// href is null when making imperative tracking. so for example when tracking custom buttons, or clicks on divs,
// any needed redirection is entirely in the consumer's responsibility
window.location.assign(href);
}
_context.next = 14;
break;
case 13:
// If the link opens in a new tab, we do not need to await the dispatch promise resolution
dispatchers.dispatchTrack(trackingDefinition);
case 14:
isAllTrackingSuccessful = errors.handleDispatchErrors(dispatchersResults, apiClientOptions.errorHandler);
return _context.abrupt("return", isAllTrackingSuccessful);
case 16:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function handleTrack() {
return _ref.apply(this, arguments);
};
}();
/**
* Handler for user identification, a private function called both for imperative and declarative tracking
*
* @private
* @param {Object} [payload] - An object with the interface accepted by getTrackingDefinition
* @param {TrackingIntent} [payload.trackingIntent] - The payload must contain either a tracking intent...
* @param {HTMLElement} [payload.trackingEl] - ...or, alternatively, an HTML element to inspect
* @param {TrackingApiOptions} [apiClientOptions] - The API client's options
* @param {string[]} [consents] - The currently active consents.
* @return {Promise<boolean>} - Whether all destination services were tracked succesfully
*/
var handleIdentify = /*#__PURE__*/function () {
var _ref3 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
var _ref4,
trackingIntent,
trackingEl,
apiClientOptions,
consents,
trackingDefinition,
dispatchersResults,
isAllTrackingSuccessful,
_args2 = arguments;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_ref4 = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}, trackingIntent = _ref4.trackingIntent, trackingEl = _ref4.trackingEl;
apiClientOptions = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
consents = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : [];
trackingDefinition = getters.getTrackingDefinition({
trackingIntent: trackingIntent,
trackingEl: trackingEl
}, apiClientOptions, consents);
_context2.next = 6;
return dispatchers.dispatchIdentify(trackingDefinition);
case 6:
dispatchersResults = _context2.sent;
isAllTrackingSuccessful = errors.handleDispatchErrors(dispatchersResults, apiClientOptions.errorHandler);
return _context2.abrupt("return", isAllTrackingSuccessful);
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function handleIdentify() {
return _ref3.apply(this, arguments);
};
}();
/**
* Handler for page identification, a private function called both for imperative and declarative tracking
*
* @private
* @param {Object} [payload] - An object with the interface accepted by getTrackingDefinition
* @param {TrackingIntent} [payload.trackingIntent] - The payload must contain either a tracking intent...
* @param {HTMLElement} [payload.trackingEl] - ...or, alternatively, an HTML element to inspect
* @param {TrackingApiOptions} [apiClientOptions] - The API client's options
* @param {string[]} [consents] - The currently active consents.
* @return {Promise<boolean>} - Whether all destination services were tracked succesfully
*/
var handlePage = /*#__PURE__*/function () {
var _ref5 = _rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
var _ref6,
trackingIntent,
trackingEl,
apiClientOptions,
consents,
trackingDefinition,
dispatchersResults,
isAllTrackingSuccessful,
_args3 = arguments;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_ref6 = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, trackingIntent = _ref6.trackingIntent, trackingEl = _ref6.trackingEl;
apiClientOptions = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};
consents = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : [];
trackingDefinition = getters.getTrackingDefinition({
trackingIntent: trackingIntent,
trackingEl: trackingEl
}, apiClientOptions, consents);
_context3.next = 6;
return dispatchers.dispatchPage(trackingDefinition);
case 6:
dispatchersResults = _context3.sent;
isAllTrackingSuccessful = errors.handleDispatchErrors(dispatchersResults, apiClientOptions.errorHandler);
return _context3.abrupt("return", isAllTrackingSuccessful);
case 9:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return function handlePage() {
return _ref5.apply(this, arguments);
};
}();
exports.handleIdentify = handleIdentify;
exports.handlePage = handlePage;
exports.handleTrack = handleTrack;
//# sourceMappingURL=handlers.js.map