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 / getTrackingDefinition.js
Size: Mime:
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var constants = require('../constants.js');

var _DEFAULT_SERVICES;
/**
 * @constant DEFAULT_SERVICES
 * @private
 */

var DEFAULT_SERVICES = (_DEFAULT_SERVICES = {}, _rollupPluginBabelHelpers.defineProperty(_DEFAULT_SERVICES, constants.SERVICES.AMPLITUDE, true), _rollupPluginBabelHelpers.defineProperty(_DEFAULT_SERVICES, constants.SERVICES.DOODLE_DATA_LAYER, false), _rollupPluginBabelHelpers.defineProperty(_DEFAULT_SERVICES, constants.SERVICES.GA, true), _DEFAULT_SERVICES);
/**
 * Helper function to parse data tracking attributes into a trackingIntent
 *
 * @param {HTMLElement} el - An HTML element to inspect
 * @return {Object}
 */

var getTrackingIntentFromDOM = function getTrackingIntentFromDOM(el) {
  var _el$dataset = el.dataset,
      trackingOptions = _el$dataset.trackingOptions,
      track = _el$dataset.track,
      identify = _el$dataset.identify,
      page = _el$dataset.page;

  var trackingIntent = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, trackingOptions && {
    options: JSON.parse(trackingOptions)
  }), track && {
    track: JSON.parse(track)
  }), page && {
    page: JSON.parse(page)
  }), identify && {
    identify: JSON.parse(identify)
  });

  return trackingIntent;
};
/**
 * Helper function that returns an object that knows about the link behavior
 * and return them mapped to a trackingElBehavior object
 *
 * @param {HTMLElement} el - An HTML element to inspect
 * @return {{href: string, isSameTabLink: boolean}} - A representation of the element's click behavior
 */


var getTrackingElBehavior = function getTrackingElBehavior(el) {
  var href = el.getAttribute('href');
  var target = el.getAttribute('target');
  var trackingElBehavior = {
    href: href,
    isSameTabLink: Boolean(href ? target !== '_blank' : true)
  };
  return trackingElBehavior;
};
/**
 * Function to enhance a trackingIntent with defaults (e.g. destination services) and link behavior information
 *
 * 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
 *
 * Returns an empty object for absent input otherwise a trackingDefinition
 *
 * @param {Object} payload - A storage from where to extract the tracking definition
 * @param {TrackingIntent} [payload.trackingIntent] - The tracking intent passed to the API client
 * @param {HTMLElement} [payload.trackingEl] - An HTML element with tracking data attributes
 * @param {TrackingApiOptions} [options] - The API client's options
 * @return {?TrackingDefinition} - The tracking definition needed by handlers to dispatch calls
 */


var getTrackingDefinition = function getTrackingDefinition() {
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
      _ref$trackingIntent = _ref.trackingIntent,
      trackingIntent = _ref$trackingIntent === void 0 ? {} : _ref$trackingIntent,
      _ref$trackingEl = _ref.trackingEl,
      trackingEl = _ref$trackingEl === void 0 ? null : _ref$trackingEl;

  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var hasTrackingData = Object.keys(trackingIntent).length > 0;
  var _options$services = options.services,
      defaultServices = _options$services === void 0 ? DEFAULT_SERVICES : _options$services,
      _options$env = options.env;
  _options$env = _options$env === void 0 ? {} : _options$env;
  var doodleEnv = _options$env.doodleEnv,
      nodeEnv = _options$env.nodeEnv,
      svcDataLayerApi = _options$env.svcDataLayerApi;

  if (hasTrackingData) {
    var _trackingIntent$optio = trackingIntent.options,
        intentTrackingOptions = _trackingIntent$optio === void 0 ? {} : _trackingIntent$optio,
        intentTrackingData = _rollupPluginBabelHelpers.objectWithoutProperties(trackingIntent, ["options"]);

    var services = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, defaultServices), intentTrackingOptions.services);

    var trackingDefinition = {
      trackingData: intentTrackingData,
      trackingOptions: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
        services: services,
        env: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, doodleEnv && {
          doodleEnv: doodleEnv
        }), nodeEnv && {
          nodeEnv: nodeEnv
        }), svcDataLayerApi && {
          svcDataLayerApi: svcDataLayerApi
        })
      }, intentTrackingOptions), trackingEl && getTrackingElBehavior(trackingEl))
    };
    return trackingDefinition;
  }

  if (trackingEl) {
    var trackingIntentFromDataset = getTrackingIntentFromDOM(trackingEl);

    var _trackingIntentFromDa = trackingIntentFromDataset.options,
        _intentTrackingOptions = _trackingIntentFromDa === void 0 ? {} : _trackingIntentFromDa,
        _intentTrackingData = _rollupPluginBabelHelpers.objectWithoutProperties(trackingIntentFromDataset, ["options"]);

    var _services = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, defaultServices), _intentTrackingOptions.services); // eslint-disable-next-line no-unused-vars


    var _ = _intentTrackingOptions.services,
        intentOptionsWithoutServices = _rollupPluginBabelHelpers.objectWithoutProperties(_intentTrackingOptions, ["services"]);

    var _trackingDefinition = {
      trackingData: _intentTrackingData,
      trackingOptions: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
        services: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, _intentTrackingOptions.services), _services)
      }, intentOptionsWithoutServices), getTrackingElBehavior(trackingEl))
    };
    return _trackingDefinition;
  }

  return null;
};

exports.getTrackingDefinition = getTrackingDefinition;
exports.getTrackingElBehavior = getTrackingElBehavior;
exports.getTrackingIntentFromDOM = getTrackingIntentFromDOM;
//# sourceMappingURL=getTrackingDefinition.js.map