/// <reference path="../../tracking/IPlugin.ts" /> /// <reference path="../../tracking/PluginManager.ts" /> /// <reference path="../../util/ArrayUtils.ts" /> /// <reference path="../event/AbstractEvent.ts" /> /// <reference path="../event/ProductAddToCartEvent.ts" /> /// <reference path="../event/ProductBuyEvent.ts" /> /// <reference path="../event/ProductViewEvent.ts" /> var econda; (function (econda) { var recengine; (function (recengine) { var history; (function (history) { var TrackingPluginManager = econda.tracking.PluginManager; /** * Listen to tracking requests and write product events to {@link econda.recengine.history.VisitorHistory}. * See {@link econda.recengine.VisitorProfile} for documentation. * * Disable tracking: * econdaConfig.crosssellTrackEvents = false; * * If this config option is true or not set, this listener will be enabled. * * @class econda.recengine.history.TrackingListener */ var TrackingListener = (function () { function TrackingListener() { } /** * Get singleton instance of tracking listener. * @static */ TrackingListener.getInstance = function () { if (TrackingListener._instance === null) { TrackingListener._instance = new TrackingListener(); } return TrackingListener._instance; }; /** * Called on each tracking request */ TrackingListener.prototype.onRequest = function (emosProperties, cfg) { var events = this.createEventsFromTrackingData(emosProperties, cfg.getPidIndex()); for (var i = 0; i < events.length; i++) { econda['data'].visitor.getHistory().add(events[i]); } if (econda.util.ArrayUtils.isArray(emosProperties.arpprops)) { this.storeArpProps(emosProperties.arpprops); } }; TrackingListener.prototype.storeArpProps = function (arpProps) { for (var _i = 0, arpProps_1 = arpProps; _i < arpProps_1.length; _i++) { var arpProp = arpProps_1[_i]; var arpKey = arpProp[0]; var arpValue = arpProp[1]; econda['data'].visitor.setCustomProperty(arpKey, arpValue); } }; /** * Converts emos properties data to events * @private */ TrackingListener.prototype.createEventsFromTrackingData = function (emosProperties, pidIndex) { var events = []; if (typeof emosProperties.ec_Event === 'object') { for (var i = 0; i < emosProperties.ec_Event.length; i++) { var e = this.createEventFromEcEventItem(emosProperties.ec_Event[i], pidIndex); if (e) { events.push(e); } } } return events; }; /** * Converts a single product event from emos tracking properties to recengine event. * @private */ TrackingListener.prototype.createEventFromEcEventItem = function (ecEvent, pidIndex) { var createEvent = function (ecEventType, eventConfig) { if (eventConfig === void 0) { eventConfig = null; } var event = null; switch (String(ecEventType).toLowerCase()) { case 'view': event = new econda.recengine.event.ProductViewEvent(eventConfig); break; case 'c_add': event = new econda.recengine.event.ProductAddToCartEvent(eventConfig); break; case 'buy': event = new econda.recengine.event.ProductBuyEvent(eventConfig); break; } return event; }; var event = null; if (typeof ecEvent.type !== 'undefined') { // { type: 'view', pid: ID, ... } event = createEvent(ecEvent.type, { product: { id: ecEvent.pid || null, sku: ecEvent.sku || null } }); } else if (typeof ecEvent[1] !== 'undefined') { // ['view', ID, NAME, PREIS, KATEGORIE, ANZAHL, VARIANTE1, VARIANTE2, VARIANTE3] event = createEvent(ecEvent[0], { product: { id: ecEvent[pidIndex], sku: null } }); } return event; }; /** * Register instance of listener at tracking plug-in manager * @static */ TrackingListener.enable = function () { TrackingPluginManager.registerPlugin(TrackingListener.getInstance()); }; /** * Unregister listener at tracking plug-in manager * @static */ TrackingListener.disable = function () { TrackingPluginManager.unregisterPlugin(TrackingListener.getInstance()); }; TrackingListener._instance = null; return TrackingListener; }()); history.TrackingListener = TrackingListener; // auto enable tracking for events if (typeof econdaConfig.crosssellTrackEvents === 'undefined' || econdaConfig.crosssellTrackEvents == true) { TrackingListener.enable(); } })(history = recengine.history || (recengine.history = {})); })(recengine = econda.recengine || (econda.recengine = {})); })(econda || (econda = {}));