UNPKG

analytics-plugin-google-tag-manager

Version:

Google tag manager plugin for 'analytics' module

152 lines (129 loc) 4.21 kB
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } /* global dataLayer */ var config$1 = { debug: false, containerId: null // assumesPageview: true, /** * Google tag manager plugin * @link https://getanalytics.io/plugins/google-tag-manager/ * @link https://developers.google.com/tag-manager/ * @param {object} pluginConfig - Plugin settings * @param {string} pluginConfig.containerId - The Container ID uniquely identifies the GTM Container. * @return {object} Analytics plugin * @example * * googleTagManager({ * containerId: 'GTM-123xyz' * }) */ }; function googleTagManager$1() { var pluginConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // Allow for userland overides of base methods return { NAMESPACE: 'google-tag-manager', config: _objectSpread({}, config$1, pluginConfig), initialize: function initialize(_ref) { var config = _ref.config; var containerId = config.containerId; if (!containerId) { throw new Error('No google tag manager containerId defined'); } if (!scriptLoaded()) { /* eslint-disable */ (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', containerId); /* eslint-enable */ } }, page: function page(_ref2) { var payload = _ref2.payload, options = _ref2.options, instance = _ref2.instance; if (typeof dataLayer !== 'undefined') { dataLayer.push(payload.properties); } }, track: function track(_ref3) { var payload = _ref3.payload, options = _ref3.options, config = _ref3.config; if (typeof dataLayer !== 'undefined') { var anonymousId = payload.anonymousId, userId = payload.userId, properties = payload.properties, category = payload.category; var formattedPayload = properties; if (userId) { formattedPayload.userId = userId; } if (anonymousId) { formattedPayload.anonymousId = anonymousId; } if (!category) { formattedPayload.category = 'All'; } if (config.debug) { console.log('gtag push', _objectSpread({ event: payload.event }, formattedPayload)); } dataLayer.push(_objectSpread({ event: payload.event }, formattedPayload)); } }, loaded: function loaded() { var hasDataLayer = !!(window.dataLayer && Array.prototype.push !== window.dataLayer.push); return scriptLoaded() && hasDataLayer; } }; } function scriptLoaded() { var scripts = document.getElementsByTagName('script'); return !!Object.keys(scripts).filter(function (key) { var src = scripts[key].src; return src.match(/googletagmanager\.com\/gtm\.js/); }).length; } /* This module will shake out unused code and work in browser and node 🎉 */ var index = googleTagManager$1; export default index;