@mrporter/inseason-analytics
Version:
In Season Analytics Module
137 lines (100 loc) • 4.48 kB
JavaScript
;
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;
}