Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/tracking / dist / cjs / src / core / handlers.js
Size: Mime:
'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