{"version":3,"sources":["webpack:///./src/client/default/js/components/citrusTrackingComponent.js","webpack:///./src/client/default/js/base/baseComponent.js","webpack:///./src/client/default/js/libs/Axios.js"],"names":["CitrusTrackingComponent","element","handleTrackingObserver","clickableElements","$el","querySelectorAll","selfTarget","length","classList","contains","forEach","addEventListener","e","preventDefault","trackClick","currentTarget","this","observer","IntersectionObserver","intersectionRatio","trackImpression","then","unobserve","threshold","observe","a","get","$options","endpoint","params","type","citrusAdId","citrusId","data","console","log","error","target","href","window","location","BaseComponent","_componentElement","setAttribute","_checkMessages","compOptions","options","dataset","Object","keys","filter","entry","includes","optionValue","cleanEntry","cleanOptionKey","JSON","parse","replace","convertType","deepFreeze","getAttribute","events","cb","elements","Bean","on","stopPropagation","one","off","fire","container","message","_loading","EMIT","CUSTOM_MESSAGES","LOADER_EVENTS","show","document","body","icon","setTimeout","hide","option","optionReturn","key","str","charAt","toLocaleLowerCase","slice","BaseGiaComponent","axios","Axios","create","transformRequest","headers","skiptransform","entries","formData","FormData","value","append","recaptchaToken","googleRecaptchaAction","googleRecaptchaClientSide","Promise","resolve","reject","grecaptcha","ready","execute","action","token","defaults","common","interceptors","request","use","config","googleRecaptchaToken","response","commonInterface","CommonInterface","pushState","replaceState","history","redirectUrl","hrefUrl","paybackParam","isPaybackPopupActive","indexOf","trialParam","subscriptionTrialModalNotEligibleAfterLogin","fromEntries","res","notificationPush","showNotification","pushPromoPre","orderedPush","sort","promoA","promoB","rank","notifications","pushPromoPost","CancelToken","post","all","spread"],"mappings":"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","file":"js/component-citrusTrackingComponent-js.chunks.js","sourcesContent":["import BaseComponent from '../base/baseComponent';\nimport { get } from '../libs/Axios';\n\nexport default class CitrusTrackingComponent extends BaseComponent {\n constructor(element) {\n super(element);\n this.handleTrackingObserver();\n let clickableElements = this.$el.querySelectorAll('a, .js-citrus-track');\n let selfTarget = false;\n if ((!clickableElements || clickableElements.length == 0) && this.$el.classList.contains('js-citrus-track')) {\n clickableElements = this.$el;\n selfTarget = true;\n }\n if (clickableElements && clickableElements.length > 0) {\n clickableElements.forEach((element) => {\n element.addEventListener('click', (e) => {\n e.preventDefault();\n this.trackClick(e.currentTarget);\n });\n });\n } else if (clickableElements && selfTarget) {\n clickableElements.addEventListener('click', (e) => {\n e.preventDefault();\n this.trackClick(e.currentTarget);\n });\n }\n }\n\n handleTrackingObserver() {\n if (!this.$el) return;\n this.observer = new IntersectionObserver(\n ([e]) => {\n if (e.intersectionRatio >= 0.5) {\n this.trackImpression().then(this.observer.unobserve(this.$el));\n }\n },\n { threshold: [0.5] }\n );\n\n this.observer.observe(this.$el);\n }\n\n async trackImpression() {\n try {\n const { data } = await get(this.$options.endpoint, {\n params: {\n type: 'I',\n citrusAdId: this.$options.citrusId\n }\n });\n if (data) {\n console.log(data);\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n async trackClick(target) {\n try {\n const { data } = await get(this.$options.endpoint, {\n params: {\n type: 'C',\n citrusAdId: this.$options.citrusId\n }\n });\n if (data) {\n console.log(data);\n }\n if (target.href) window.location = target.href;\n } catch (err) {\n console.error(err);\n }\n }\n}\n","/* eslint-disable new-cap */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable no-underscore-dangle */\n\nimport Bean from 'bean';\nimport deepFreeze from '../utilities/freeze';\nimport BaseGiaComponent from './baseGiaComponent';\n\nexport default class BaseComponent extends BaseGiaComponent {\n /**\n * @returns {HTMLElement}\n */\n get $el() {\n return /** @type {HTMLElement} */ (this._componentElement);\n }\n\n get $options() {\n const compOptions = {};\n const options = { ...this.$el.dataset };\n const optionsEntires = Object.keys(options).filter((entry) => entry.includes('option'));\n optionsEntires.forEach((entry) => {\n const cleanEntry = BaseComponent.cleanOptionKey(entry);\n let optionValue;\n if (options[entry].includes('{') && options[entry].includes('}')) {\n optionValue = JSON.parse(options[entry].replace(/'/g, '\"'));\n } else {\n optionValue = BaseComponent.convertType(options[entry]);\n }\n compOptions[cleanEntry] = optionValue;\n });\n return deepFreeze(compOptions);\n }\n\n get COMPONENT_NAME() {\n return this.$el.getAttribute('data-component');\n }\n\n /**\n *\n * constructor\n *\n * @param {Element} element\n */\n constructor(element) {\n super(element);\n this._componentElement = element;\n this._componentElement.setAttribute('data-component-init', 'true');\n this._checkMessages();\n }\n\n static convertType(option) {\n let optionReturn;\n switch (option) {\n case 'false':\n optionReturn = false;\n break;\n case 'true':\n optionReturn = true;\n break;\n case 'null':\n optionReturn = null;\n break;\n default:\n optionReturn = option;\n break;\n }\n\n return optionReturn;\n }\n\n static cleanOptionKey(key) {\n const str = key.replace('option', '');\n return `${str.charAt(0).toLocaleLowerCase()}${str.slice(1)}`;\n }\n\n /**\n *\n * $on\n *\n * @param {String} events\n * @param {Function} cb\n * @param {Element} [element = this.$el]\n * @param {Array|String|Element} [elements = null]\n */\n $on(events, cb, element = this.$el, elements = null) {\n if (!element || !events || !cb) return;\n if (!elements) {\n Bean.on(element, events, (e) => {\n if (e) e.stopPropagation();\n cb(e);\n });\n } else {\n Bean.on(element, events, elements, (e) => {\n if (e) e.stopPropagation();\n cb(e);\n });\n }\n }\n\n /**\n *\n * $one\n *\n * @param {String} events\n * @param {Function} cb\n * @param {Element} [element = this.$el]\n */\n $one(events, cb, element = this.$el) {\n Bean.one(element, events, cb);\n }\n\n /**\n *\n * $off\n *\n * @param {String} events\n * @param {Element} [element = this.$el]\n */\n $off(events, element = this.$el) {\n Bean.off(element, events);\n }\n\n /**\n *\n * $fire\n *\n * @param {String} events\n * @param {Element} [element = this.$el]\n */\n $fire(events, element = this.$el) {\n Bean.fire(element, events);\n }\n\n /**\n *\n * Activate loader\n *\n * @param {HTMLElement} [container]\n * @param {String} [message]\n */\n loading(container, message) {\n this._loading = true;\n this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.show, {\n container: container || document.body,\n message: message ?? null\n });\n }\n\n /**\n *\n * Deactivate loader\n *\n * @param {HTMLElement} [container]\n * @param {String} [message]\n * @param {Boolean} [error=false]\n * @param {String} [icon]\n */\n endLoading(container, message, error = false, icon) {\n this._loading = false;\n setTimeout(() => {\n if (!this._loading) {\n this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.hide, {\n container: container || document.body,\n message,\n error,\n icon\n });\n }\n }, 400);\n }\n}\n","import Axios from 'axios';\nimport CommonInterface from '../base/commonInterface';\nimport CustomMessages from '../constants/customMessages';\n\n\nconst axios = Axios.create({\n transformRequest: [function (data, headers) {\n if (headers && headers.skiptransform) {\n delete headers.skiptransform;\n return data;\n }\n if (data && Object.entries(data)) {\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n formData.append(key, value);\n }\n return formData;\n }\n }],\n});\n\nconst recaptchaToken = async ({ googleRecaptchaAction, googleRecaptchaClientSide }) => new Promise((resolve, reject) => {\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(googleRecaptchaClientSide, { action: googleRecaptchaAction }).then((token) => {\n resolve(token);\n });\n });\n});\n\naxios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n// Add a request interceptor\naxios.interceptors.request.use(async (config) => {\n // Do something before request is sent\n if (config.data && config.data.googleRecaptchaAction && config.data.googleRecaptchaClientSide && window.grecaptcha) {\n const token = await recaptchaToken(config.data);\n config.data.googleRecaptchaToken = token;\n return config;\n }\n return config;\n}, function (error) {\n // Do something with request error\n return Promise.reject(error);\n});\n\n// Add a response interceptor\naxios.interceptors.response.use(function (response) {\n let commonInterface = new CommonInterface();\n if (response.data && response.data.pushState || response.data.replaceState) {\n response.data.pushState && history.pushState({}, '', response.data.pushState);\n response.data.replaceState && history.replaceState({}, '', response.data.replaceState);\n if (response.data.redirectUrl) {\n setTimeout(() => {\n location.href = response.data.redirectUrl;\n }, 500);\n }\n }\n else if (response.data && response.data.redirectUrl) {\n let hrefUrl=response.data.redirectUrl;\n let paybackParam = '';\n if (response.data.isPaybackPopupActive) {\n paybackParam = hrefUrl.indexOf('?') > -1 ? '&isPaybackPopupActive=true' : '?isPaybackPopupActive=true';\n }\n hrefUrl =hrefUrl+paybackParam;\n let trialParam = '';\n if (response.data.subscriptionTrialModalNotEligibleAfterLogin) {\n trialParam = hrefUrl.indexOf('?') > -1 ? '&subscriptionTrialModalNotEligibleAfterLogin=true' : '?subscriptionTrialModalNotEligibleAfterLogin=true';\n } \n location.href = hrefUrl+trialParam;\n }\n if (response.data && response.data.error) {\n if(response.config.data instanceof FormData) {\n response.config.data = Object.fromEntries(response.config.data);\n response.config.headers['Content-Type'] = \"application/json\"\n }\n commonInterface.EMIT(`error.${response.data.error}`, {res: response});\n }\n\n if (response.data && response.data.notificationPush && response.data.notificationPush.showNotification) {\n commonInterface.EMIT(`notification:push`, response.data.notificationPush);\n }\n\n if (response.data && response.data.pushPromoPre && response.data.pushPromoPre.length > 0) {\n const orderedPush = response.data.pushPromoPre.sort(function(promoA, promoB) {\n return promoA.rank > promoB.rank ? -1 : promoB.rank > promoA.rank ? 1 : 0;\n });\n commonInterface.EMIT(`notification:pushFirstAvailable`, { notifications: orderedPush });\n }\n \n if (response.data && response.data.pushPromoPost) {\n commonInterface.EMIT(`notification:pushall`, response.data.pushPromoPost);\n }\n\n\n // Any status code that lie within the range of 2xx cause this function to trigger\n // Do something with response data\n return response;\n}, function (error) {\n if (error.response?.data && error.response?.data?.redirectUrl) {\n location.href = error.response.data.redirectUrl;\n }\n\n // Any status codes that falls outside the range of 2xx cause this function to trigger\n // Do something with response error\n return Promise.reject(error);\n});\n\nexport const { CancelToken } = Axios;\n\nexport const {\n get, post, all, spread, request\n} = axios;\n"],"sourceRoot":""}