{"version":3,"sources":["webpack:///./src/client/default/js/constants/searchConstants.js","webpack:///./src/client/default/js/components/loadMoreComponent.js","webpack:///./src/client/default/js/base/baseComponent.js"],"names":["deepFreeze","SEARCH_ELEMENTS","LOAD_MORE","FILTERS","loadMoreComponent","element","countTile","handleClick","infinityScroll","this","CUSTOM_MESSAGES","PROGRESSIVE_LOAD_PRODUCTS","updategrid","clickCta","size","$el","click","name","url","window","location","href","replace","regex","RegExp","results","exec","decodeURIComponent","srule","getParameterByName","query","concat","$options","start","join","$on","e","loadMore","isLoadingEnded","document","querySelector","infinity","footer","classList","add","hash","indexOf","place","IntersectionObserver","entries","observer","isIntersecting","queque","disconnect","rootMargin","threshold","observe","isInfinity","remove","appPostMessage","action","EMIT","LOAD_MORE_EVENTS","clicked","value","SEARCH_CONSTANTS","TRACKING_EVENTS","update","eventCategory","eventAction","nProduct","extraTile","firstRegion","secondRegion","querySelectorAll","length","innerHTML","baseComponent","BaseComponent","_componentElement","setAttribute","_checkMessages","compOptions","options","dataset","Object","keys","filter","entry","includes","forEach","optionValue","cleanEntry","cleanOptionKey","JSON","parse","convertType","getAttribute","events","cb","elements","Bean","on","stopPropagation","one","off","fire","container","message","_loading","LOADER_EVENTS","show","body","error","icon","setTimeout","hide","option","optionReturn","key","str","charAt","toLocaleLowerCase","slice","BaseGiaComponent"],"mappings":"yOAEeA,cAAW,CACxBC,gBAAiB,CACfC,UAAW,mBACXC,QAAS,oB,ieCDQC,E,gCAYnB,WAAYC,GAAS,yBACnB,cAAMA,GADa,qBAXZ,GAaP,EAAKC,YACL,EAAKC,cACL,EAAKC,iBAJc,E,kCAVrB,WACE,cACGC,KAAKC,gBAAgBC,0BAA0BC,WAAaH,KAAKI,Y,qBAItE,WACE,MAAO,K,sBAUT,YAAmB,IAARC,EAAQ,EAARA,KACTL,KAAKK,KAAOA,EACZL,KAAKM,IAAIC,U,gCAGX,SAAmBC,GAAkC,IAA5BC,EAA4B,uDAAtBC,OAAOC,SAASC,KAE7CJ,EAAOA,EAAKK,QAAQ,UAAW,QAC/B,IAAIC,EAAQ,IAAIC,OAAO,OAASP,EAAO,qBACrCQ,EAAUF,EAAMG,KAAKR,GACvB,OAAKO,EACAA,EAAQ,GACNE,mBAAmBF,EAAQ,GAAGH,QAAQ,MAAO,MAD5B,GADH,O,yBAKvB,WAAc,WACRM,EAAQnB,KAAKoB,mBAAmB,SAE9BC,EAAQ,GAAGC,OAAOH,EAAQ,SAAH,OAAYA,GAAU,KAArC,gBAAoDnB,KAAKuB,SAASC,OAAlE,aAAiFxB,KAAKuB,SAASlB,OAAQoB,KAAK,KAC1HzB,KAAK0B,IAAI,kBAAkB,SAACC,GAC1B,EAAKC,SAASP,Q,4BAIlB,WAAiB,WACXQ,EAAiBC,SAASC,cAAc,gBAc5C,GAAI/B,KAAKuB,SAASS,SAAU,CAC1B,IAAIC,EAASH,SAASC,cAAc,UAChCE,GACFA,EAAOC,UAAUC,IAAI,WAGpBN,IAA2D,GAAzCnB,OAAOC,SAASyB,KAAKC,QAAQ,UAAkBrC,KAAKuB,SAASS,UAAoC,cAAxBhC,KAAKuB,SAASe,OAC7F,IAAIC,sBAjBE,SAACC,EAASC,GAC/B,GAAKD,EAAQ,GAAGE,iBACX,EAAKC,OAAQ,CAChB,IAAIxB,EAAQ,EAAKC,mBAAmB,SAC9BC,EAAQ,GAAGC,OAAOH,EAAQ,SAAH,OAAYA,GAAU,KAArC,gBAAoD,EAAKI,SAASC,OAAlE,aAAiF,EAAKD,SAASlB,OAAQoB,KAAK,KAC1H,EAAKkB,QAAS,EACd,EAAKf,SAASP,GAAO,GACrBoB,EAASG,gBATK,CAAEC,WAAY,oBAAqBC,UAAW,CAAC,MAoBtDC,QAAQ/C,KAAKM,O,sBAI1B,SAASe,EAAO2B,GACVA,GACFlB,SAASC,cAAc,QAAQG,UAAUe,OAAO,eAElDC,YAAe,CAAEC,OAAQ,uBACzBnD,KAAKoD,KAAKpD,KAAKC,gBAAgBoD,iBAAiBC,QAAS,CACvDC,MAAOlC,EACPzB,QAAS4D,EAAiBhE,gBAAgBC,UAC1CY,KAAML,KAAKK,KACX2C,WAAYA,IAEa,aAAvBhD,KAAKuB,SAASe,OAChBtC,KAAKoD,KAAKpD,KAAKC,gBAAgBwD,gBAAgBC,OAAQ,CACrDC,cAAe,YACfC,YAAa,yB,uBAKnB,WACE,IAAIC,EAAW/B,SAASC,cAAc,sBACtC,GAAI8B,EAAU,CACZ,IAAIC,EAAY,EACZC,EAAcjC,SAASC,cAAc,8BACrCiC,EAAelC,SAASC,cAAc,+BACxBD,SAASmC,iBAAiB,+BAE1CH,GAAwBhC,SAASmC,iBAAiB,6BAA6BC,QAE7EH,GAAeA,EAAYhC,cAAc,mBAC3C+B,GAAwB,GAEtBE,GAAgBA,EAAaC,iBAAiB,mBAChDH,GAAwBE,EAAaC,iBAAiB,iBAAiBC,QAEzEL,EAASM,WAAarC,SAASC,cAAc,sBAAsBoC,UAAYL,O,GAzGtCM,M,g1BCI1BC,E,gCAmCnB,WAAYzE,GAAS,0BACnB,cAAMA,IACD0E,kBAAoB1E,EACzB,EAAK0E,kBAAkBC,aAAa,sBAAuB,QAC3D,EAAKC,iBAJc,E,6BA/BrB,WACE,OAAmCxE,KAAnC,oB,oBAGF,WACE,IAAMyE,EAAc,GACdC,E,iWAAU,CAAH,GAAQ1E,KAAKM,IAAIqE,SAY9B,OAXuBC,OAAOC,KAAKH,GAASI,QAAO,SAACC,GAAD,OAAWA,EAAMC,SAAS,aAC9DC,SAAQ,SAACF,GACtB,IACIG,EADEC,EAAad,EAAce,eAAeL,GAG9CG,EADER,EAAQK,GAAOC,SAAS,MAAQN,EAAQK,GAAOC,SAAS,KAC5CK,KAAKC,MAAMZ,EAAQK,GAAOlE,QAAQ,KAAM,MAExCwD,EAAckB,YAAYb,EAAQK,IAElDN,EAAYU,GAAcD,KAErB3F,YAAWkF,K,0BAGpB,WACE,OAAOzE,KAAKM,IAAIkF,aAAa,oB,iBAkD/B,SAAIC,EAAQC,GAAyC,IAArC9F,EAAqC,uDAA3BI,KAAKM,IAAKqF,EAAiB,uDAAN,KACxC/F,GAAY6F,GAAWC,IACvBC,EAMHC,IAAKC,GAAGjG,EAAS6F,EAAQE,GAAU,SAAChE,GAC9BA,GAAGA,EAAEmE,kBACTJ,EAAG/D,MAPLiE,IAAKC,GAAGjG,EAAS6F,GAAQ,SAAC9D,GACpBA,GAAGA,EAAEmE,kBACTJ,EAAG/D,S,kBAkBT,SAAK8D,EAAQC,GAAwB,IAApB9F,EAAoB,uDAAVI,KAAKM,IAC9BsF,IAAKG,IAAInG,EAAS6F,EAAQC,K,kBAU5B,SAAKD,GAA4B,IAApB7F,EAAoB,uDAAVI,KAAKM,IAC1BsF,IAAKI,IAAIpG,EAAS6F,K,mBAUpB,SAAMA,GAA4B,IAApB7F,EAAoB,uDAAVI,KAAKM,IAC3BsF,IAAKK,KAAKrG,EAAS6F,K,qBAUrB,SAAQS,EAAWC,GACjBnG,KAAKoG,UAAW,EAChBpG,KAAKoD,KAAKpD,KAAKC,gBAAgBoG,cAAcC,KAAM,CACjDJ,UAAWA,GAAapE,SAASyE,KACjCJ,QAASA,UAAW,S,wBAaxB,SAAWD,EAAWC,GAA8B,WAArBK,EAAqB,wDAANC,EAAM,uCAClDzG,KAAKoG,UAAW,EAChBM,YAAW,WACJ,EAAKN,UACR,EAAKhD,KAAK,EAAKnD,gBAAgBoG,cAAcM,KAAM,CACjDT,UAAWA,GAAapE,SAASyE,KACjCJ,UACAK,QACAC,WAGH,Q,0BAtHL,SAAmBG,GACjB,IAAIC,EACJ,OAAQD,GACN,IAAK,QACHC,GAAe,EACf,MACF,IAAK,OACHA,GAAe,EACf,MACF,IAAK,OACHA,EAAe,KACf,MACF,QACEA,EAAeD,EAInB,OAAOC,I,4BAGT,SAAsBC,GACpB,IAAMC,EAAMD,EAAIjG,QAAQ,SAAU,IAClC,gBAAUkG,EAAIC,OAAO,GAAGC,qBAAxB,OAA8CF,EAAIG,MAAM,Q,SAhEjBC","file":"js/component-loadMoreComponent-js.chunks.js","sourcesContent":["import deepFreeze from '../utilities/freeze';\n\nexport default deepFreeze({\n SEARCH_ELEMENTS: {\n LOAD_MORE: 'search:load:more',\n FILTERS: 'search:filters'\n }\n});\n","import baseComponent from '../base/baseComponent';\nimport SEARCH_CONSTANTS from '../constants/searchConstants';\nimport { appPostMessage } from '../utilities/postMessage';\n\nexport default class loadMoreComponent extends baseComponent {\n queque = false;\n get Messages() {\n return {\n [this.CUSTOM_MESSAGES.PROGRESSIVE_LOAD_PRODUCTS.updategrid]: this.clickCta\n };\n }\n\n get SELECTORS() {\n return {};\n }\n\n constructor(element) {\n super(element);\n this.countTile();\n this.handleClick();\n this.infinityScroll();\n }\n\n clickCta({ size }) {\n this.size = size;\n this.$el.click();\n }\n\n getParameterByName(name, url = window.location.href) {\n // eslint-disable-next-line no-useless-escape\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n handleClick() {\n let srule = this.getParameterByName('srule');\n\n const query = [].concat(srule ? `srule=${srule}` : null, `start=${this.$options.start}`, `sz=${this.$options.size}`).join('&');\n this.$on('click.LoadMore', (e) => {\n this.loadMore(query);\n });\n }\n\n infinityScroll() {\n let isLoadingEnded = document.querySelector('.js-infinity');\n\n let observerOpt = { rootMargin: '0px 0px 400px 0px', threshold: [0.1] };\n\n let observerCallback = (entries, observer) => {\n if (!entries[0].isIntersecting) return;\n if (!this.queque) {\n let srule = this.getParameterByName('srule');\n const query = [].concat(srule ? `srule=${srule}` : null, `start=${this.$options.start}`, `sz=${this.$options.size}`).join('&');\n this.queque = true;\n this.loadMore(query, true);\n observer.disconnect();\n }\n };\n if (this.$options.infinity) {\n let footer = document.querySelector('footer');\n if (footer) {\n footer.classList.add('d-none');\n }\n }\n if ((isLoadingEnded || window.location.hash.indexOf('size') == -1) && this.$options.infinity && this.$options.place !== 'Volantini') {\n let observer = new IntersectionObserver(observerCallback, observerOpt);\n observer.observe(this.$el);\n }\n }\n\n loadMore(query, isInfinity) {\n if (isInfinity) {\n document.querySelector('body').classList.remove('js-infinity');\n }\n appPostMessage({ action: 'prodottiSuccessivi' });\n this.EMIT(this.CUSTOM_MESSAGES.LOAD_MORE_EVENTS.clicked, {\n value: query,\n element: SEARCH_CONSTANTS.SEARCH_ELEMENTS.LOAD_MORE,\n size: this.size,\n isInfinity: isInfinity\n });\n if (this.$options.place == 'Volantini') {\n this.EMIT(this.CUSTOM_MESSAGES.TRACKING_EVENTS.update, {\n eventCategory: 'Volantini',\n eventAction: 'Prodotti Succesivi'\n });\n }\n }\n\n countTile() {\n var nProduct = document.querySelector('.number-of-product');\n if (nProduct) {\n var extraTile = 0;\n var firstRegion = document.querySelector('.experience-firstComponent');\n var secondRegion = document.querySelector('.experience-secondComponent');\n var highlighted = document.querySelectorAll('.content-item-highlighted');\n if (highlighted) {\n extraTile = extraTile - document.querySelectorAll('.content-item-highlighted').length;\n }\n if (firstRegion && firstRegion.querySelector('.product.tile')) {\n extraTile = extraTile + 1;\n }\n if (secondRegion && secondRegion.querySelectorAll('.product.tile')) {\n extraTile = extraTile + secondRegion.querySelectorAll('.product.tile').length;\n }\n nProduct.innerHTML = +document.querySelector('.number-of-product').innerHTML + extraTile;\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"],"sourceRoot":""}