Home Reference Source Test Repository

src/core/events/trackers/analytics.js

import isJson from "../../utils/is_json";
import isDev from "../../utils/is_dev";
import gaEventMap from "./ga_event_map";

/**
 * Track an event with our analytics library
 * @param {Object} options An object with event data
 */
export default function({ name, data } = {}) {
  /* global utag */
  data = (isJson(data) ? JSON.parse(data) : data) || "";

  let mappedEvent,
      gaEventData = {
        category: "Destinations Next",
        action: name,
        label: isJson(data) ? JSON.stringify(data) : data
      };

  if (mappedEvent = gaEventMap[name]) {
    for (let name in mappedEvent) {
      gaEventData[name] = mappedEvent[name];
    }
  } else {
    mappedEvent = gaEventData;
  }

  let utagEvent = Object.keys(gaEventData).reduce((memo, key) => {
    memo["ga_event_" + key] = mappedEvent[key] || gaEventData[key];
    return memo;
  }, {});

  if (isDev()) {
    console.log(`utag: ${JSON.stringify(utagEvent)}`);
  } else if (
    typeof window.utag !== "undefined" && 
    typeof window.utag.link === "function") {
    window.utag.link(utagEvent);
  } else {
    window.trackJs.console.log(`utag: not loaded yet`);
  }
};