/**
* @memberof Initiators/Analytics
* @constructor TagManager
* @param {Object} args - all arguments
* @example
* const tagManager = new TagManager({});
*/
export default class TagManager {
args = null;
constructor(args) {
window.dataLayer = window.dataLayer || [];
this.args = args;
}
/**
* @method TagManager#onClickBanner
* @memberof Initiators/Analytics
* @description Tag manager event click banner
* @example
* const tagManager = new TagManager({});
* tagManager.onClickBanner();
*/
onClickBanner() {
const previousLayers = window.dataLayer.filter((layer) => {
if (typeof layer.ecommerce === 'undefined') return false;
if (typeof layer.ecommerce.promoClick === 'undefined') return false;
if (typeof layer.ecommerce.promoClick.promotions === 'undefined') return false;
const promotions = Array.isArray(layer.ecommerce.promoClick.promotions)
&& layer.ecommerce.promoClick.promotions
.filter(promotion => promotion.id === this.args.name);
return !!promotions.length;
});
if (previousLayers.length) return;
window.dataLayer.push({
event: 'promotionClick',
ecommerce: {
promoClick: {
promotions: [{
id: this.args.name, // Название рекламы http://prntscr.com/iioa7j
name: 'JS Banner',
creative: this.args.link, // URL на который ведет баннер или Start Chat
position: 'slot1',
}],
},
},
});
}
/**
* @method TagManager#onShowBanner
* @memberof Initiators/Analytics
* @description Tag manager event show banner
* @example
* const tagManager = new TagManager({});
* tagManager.onShowBanner();
*/
onShowBanner() {
const previousLayers = window.dataLayer.filter((layer) => {
if (typeof layer.ecommerce === 'undefined') return false;
if (typeof layer.ecommerce.promoView === 'undefined') return false;
if (typeof layer.ecommerce.promoView.promotions === 'undefined') return false;
const promotions = Array.isArray(layer.ecommerce.promoView.promotions)
&& layer.ecommerce.promoView.promotions
.filter(promotion => promotion.id === this.args.name);
return !!promotions.length;
});
if (previousLayers.length) return;
window.dataLayer.push({
event: 'promotionView',
ecommerce: {
promoView: {
promotions: [{
id: this.args.name, // Название рекламы
name: 'JS Banner',
creative: this.args.link, // URL на который ведет баннер или Start Chat
position: 'slot1',
}],
},
},
});
}
}