{"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":"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","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":""}