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

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

var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
var getBasicAnalyticsData = require('./helpers/getBasicAnalyticsData.js');
var getDefaultTrackingFields = require('./helpers/getDefaultTrackingFields.js');

/**
 * Async function to push tracking data to Google Analytics' data layer
 * @see https://www.simoahava.com/gtm-tips/use-eventtimeout-eventcallback/
 *
 * @param {TrackingDefinitionData} trackingData The data that needs to be tracked
 * @return {Promise<boolean>}
 */

var pushToGTMDataLayer = function pushToGTMDataLayer(trackingData) {
  return new Promise(function (resolve, reject) {
    if (!window.ga) {
      reject(new Error('Google Analytics not loaded'));
    }

    if (!window.google_tag_manager) {
      reject(new Error('Google Tag Manager not loaded'));
    }

    try {
      return window.dataLayer.push(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, trackingData), {}, {
        eventCallback: resolve,
        // Resolve after 1s to avoid interrupting UX on lagged networks or in case GTM fails loading
        eventTimeout: 1000
      }));
    } catch (e) {
      console.error('Error calling pushToGTMDataLayer');
      reject(e);
    }
  });
};
/**
 * Async function to push event data to Google Analytics' data layer
 *
 * @param {TrackingDefinitionData} trackingData The data that needs to be tracked
 * @param {TrackingDefinitionOptions} [trackingOptions]
 * @param {string} [trackingOptions.pageType] - Will be pushed as `page.pageType` to the dataLayer
 * @param {string} [trackingOptions.event]
 * @param {Object} [trackingOptions.env]
 * @return {Promise<boolean>}
 */


var trackGa = function trackGa(trackingData) {
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
      pageType = _ref.pageType,
      event = _ref.event,
      _ref$env = _ref.env;

  _ref$env = _ref$env === void 0 ? {} : _ref$env;
  var nodeEnv = _ref$env.nodeEnv,
      doodleEnv = _ref$env.doodleEnv;
  return pushToGTMDataLayer(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, getBasicAnalyticsData.getBasicAnalyticsData(pageType, {
    nodeEnv: nodeEnv,
    doodleEnv: doodleEnv
  })), getDefaultTrackingFields.getDefaultTrackingFields(event)), trackingData));
};
/**
 * Async function to push identity data to Google Analytics' data layer
 *
 * @param {TrackingDefinitionData} trackingData The data that needs to be tracked
 * @return {Promise<boolean>}
 */


var identifyGa = function identifyGa(trackingData) {
  return pushToGTMDataLayer(trackingData);
};

exports.identifyGa = identifyGa;
exports.pushToGTMDataLayer = pushToGTMDataLayer;
exports.trackGa = trackGa;
//# sourceMappingURL=dispatcher.js.map