UNPKG

@mrporter/inseason-analytics

Version:

In Season Analytics Module

137 lines (100 loc) 4.48 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); exports.init = init; exports.trackEvent = trackEvent; exports.trackPage = trackPage; exports.createPageObject = createPageObject; var _importAnalytics = require('./importAnalytics'); var _importAnalytics2 = _interopRequireDefault(_importAnalytics); var _readDataAttributes = require('./readDataAttributes'); var _readDataAttributes2 = _interopRequireDefault(_readDataAttributes); var _waitForUserProp = require('./waitForUserProp'); var _waitForUserProp2 = _interopRequireDefault(_waitForUserProp); var _DataObjectUtils = require('./DataObjectUtils'); var _querystring = require('querystring'); var _querystring2 = _interopRequireDefault(_querystring); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var production = process && process.env && process.env.NODE_ENV === 'production'; var analytics = void 0; if (typeof window !== 'undefined' && !window.digitalData) { window.digitalData = {}; } function init() { analytics = (0, _readDataAttributes2.default)().then(function (attributes) { var business = attributes.business; if (!business) { throw new Error('Expected "data-business" attribute in "body" element'); } (0, _DataObjectUtils.setPage)(createPageObject(attributes)); return Promise.all([(0, _importAnalytics2.default)('https://www.net-a-porter.com/webanalytics/' + business + 'analytics-v2.js'), (0, _waitForUserProp2.default)()]).then(function (_ref) { var _ref2 = _slicedToArray(_ref, 1), webAnalytics = _ref2[0]; return webAnalytics; }); }).catch(printWarning); } function trackEvent(eventData) { if (!analytics) { init(); } return analytics.then(function (_ref3) { var trackEvent = _ref3.trackEvent; if (!window.digitalData.event) { window.digitalData.event = []; } window.digitalData.event.push(eventData); if (!production) { console.info('Analytics: Event', eventData); } trackEvent(eventData); }).catch(printWarning); } function trackPage() { if (!analytics) { init(); } return analytics.then(function (_ref4) { var trackPage = _ref4.trackPage; var _window$digitalData = window.digitalData, event = _window$digitalData.event, data = _objectWithoutProperties(_window$digitalData, ['event']); if (!production) { console.info('Analytics: Page View', data); } return trackPage(data); }).catch(printWarning); } function createPageObject(_ref5) { var business = _ref5.business, language = _ref5.language, country = _ref5.country, region = _ref5.region, currency = _ref5.currency; var search = window.location.search; var query = _querystring2.default.parse(search.substr(1)); return { pageInfo: { sysEnv: 'website', language: language, geoRegion: country && country.toLowerCase(), referringURL: document.referrer }, attributes: { businessName: business, region: region, currencyCode: currency && currency.toLowerCase(), externalCampaign: query['cm_mmc'], internalCampaign: query['cm_sp'] } }; } function printWarning(error) { if (!production) { console.error(error); } return error; }