{"version":3,"sources":["webpack:///./src/client/default/js/components/tooltipComponent.js","webpack:///./src/client/default/js/base/baseComponent.js"],"names":["TooltipComponent","_baseComponent","element","_this","_classCallCheck","_callSuper","wasMobile","eventFired","isHovering","hasFocus","hoverTimeout","$options","alwaysclickable","window","isMobile","handleClickTooltip","handleClickLink","isDesktop","handleHoverForDatalayer","_inherits","_createClass","key","get","_defineProperty","this","CUSTOM_MESSAGES","BREAKPOINTER","BREAKPOINT_CHANGE","onBreakpointChange","TOOLTIP","EXTERNAL_CLICK_TOOLTIP","handleExternalClick","showTooltip","disableHover","CLICK_TOOLTIP","BLUR_TOOLTIP","value","_this2","tooltipLinks","$el","querySelectorAll","length","forEach","link","addEventListener","pushEventDatalayer","elementIsPromoTooltip","classList","contains","tooltipIsNotOpenOnMobile","promoName","getAttribute","dataLayer","_element$closest","addToCartButton","closest","querySelector","push","event","action","_this3","infoButton","$on","debounce","e","setTimeout","pushPromoModalOpenToDatalayer","setAttribute","clearTimeout","_document$querySelect","_document$querySelect2","_link$closest","_link$closest$querySe","page","document","linkText","innerText","tooltipSpan","tooltipText","getComputedStyle","getPropertyValue","eventCategory","eventAction","replace","eventLabel","undefined","$off","EVENTS_ID","ext","time","_this4","click","clickablewhendisabled","currentTarget","target","tagName","preventDefault","stopImmediatePropagation","CLASSES","preventhide","closeonclick","add","ariaPressed","hideTimeout","remove","params","targetId","id","showTime","baseComponent","BaseComponent","_BaseGiaComponent","_componentElement","_checkMessages","compOptions","options","_objectSpread","dataset","Object","keys","filter","entry","includes","optionValue","cleanEntry","cleanOptionKey","JSON","parse","convertType","deepFreeze","events","cb","arguments","elements","Bean","on","stopPropagation","one","off","fire","container","message","_loading","EMIT","LOADER_EVENTS","show","body","error","icon","hide","option","optionReturn","str","concat","charAt","toLocaleLowerCase","slice","BaseGiaComponent"],"mappings":"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","file":"js/component-tooltipComponent-js.chunks.js","sourcesContent":["import baseComponent from '../base/baseComponent';\nimport { debounce } from 'underscore';\n\nexport default class TooltipComponent extends baseComponent {\n  get Messages() {\n    return {\n      [this.CUSTOM_MESSAGES.BREAKPOINTER.BREAKPOINT_CHANGE]: this.onBreakpointChange,\n      [this.CUSTOM_MESSAGES.TOOLTIP.EXTERNAL_CLICK_TOOLTIP]: this.handleExternalClick\n    };\n  }\n\n  get CLASSES() {\n    return {\n      showTooltip: 'show-tooltip',\n      disableHover: 'disable-tooltip-hover'\n    };\n  }\n\n  get EVENTS_ID() {\n    return {\n      CLICK_TOOLTIP: 'click.tooltip',\n      BLUR_TOOLTIP: 'blur.tooltip'\n    };\n  }\n\n  constructor(element) {\n    super(element);\n    this.wasMobile = false;\n    this.eventFired = false;\n    this.isHovering = false;\n    this.hasFocus = false;\n    this.hoverTimeout;\n\n    if (this.$options.alwaysclickable) {\n      this.wasMobile = true;\n      this.handleClickTooltip();\n    } else {\n      if (window.isMobile()) {\n        this.wasMobile = true;\n        this.handleClickTooltip();\n      }\n    }\n    this.handleClickLink();\n    if (window.isDesktop()) {\n      this.handleHoverForDatalayer();\n    }\n  }\n\n  handleClickLink() {\n    let tooltipLinks = this.$el.querySelectorAll('a');\n    if (tooltipLinks.length > 0) {\n      tooltipLinks.forEach((link) => {\n        link.addEventListener('click', () => {\n          this.pushEventDatalayer(link);\n        });\n      });\n    }\n  }\n\n  pushPromoModalOpenToDatalayer(element) {\n    let elementIsPromoTooltip = element && element.classList.contains('promo-bundle-tooltip');\n    let tooltipIsNotOpenOnMobile = element && !element.classList.contains('show-tooltip');\n    let promoName = element && element.getAttribute('data-option-promo-name');\n    if (window.dataLayer && elementIsPromoTooltip && ((window.isMobile() && tooltipIsNotOpenOnMobile) || (!window.isMobile() && !this.eventFired))) {\n      this.eventFired = true; //Block execution of event if already fired (i.e. for click event)\n      const addToCartButton = element.closest('.product.tile')?.querySelector('div[data-option-promotioninfo]');\n      promoName = promoName ? promoName : addToCartButton ? addToCartButton.getAttribute('data-option-promotioninfo') : '';\n      window.dataLayer.push({\n        event: 'promotion_modal_open',\n        action: promoName\n      });\n    }\n  }\n\n  handleHoverForDatalayer() {\n    let infoButton = this.$el.querySelector('.info-button');\n    // Listener per l'hover (mouseenter)\n    this.$on(\n      'mouseenter',\n      debounce((e) => {\n        if (!this.hasFocus && !this.isHovering) {\n          this.hoverTimeout = setTimeout(() => {\n            this.pushPromoModalOpenToDatalayer(this.$el);\n            this.isHovering = true;\n          }, 500);\n        }\n      }, 500)\n    );\n    this.$on('mouseenter', (e) => {\n      if (infoButton) infoButton.setAttribute('aria-expanded', true);\n    });\n\n    // Listener per il focus\n    this.$on(\n      'focus',\n      debounce((e) => {\n        if (!this.hasFocus) {\n          this.pushPromoModalOpenToDatalayer(this.$el);\n          this.hasFocus = true;\n        }\n      }, 500)\n    );\n\n    // Listener per mouseleave per resettare il flag di hover\n    this.$on('mouseleave', (e) => {\n      this.isHovering = false; // Resetta il flag di hover\n      clearTimeout(this.hoverTimeout); // Annulla il timer se il mouse esce prima dei 500ms\n\n      if (!this.hasFocus) {\n        this.eventFired = false;\n      }\n      if (infoButton) infoButton.setAttribute('aria-expanded', false);\n    });\n    this.$on('blur', (e) => {\n      this.hasFocus = false;\n      this.eventFired = false;\n    });\n  }\n\n  pushEventDatalayer(link) {\n    if (window.dataLayer) {\n      let page = document.querySelector('body')?.classList.contains('minicartLayer') ? 'minicart' : document.querySelector('body')?.classList[0];\n      let linkText = link.innerText;\n      let tooltipSpan = link.closest('span');\n      let tooltipText = link.closest('.tooltip')?.querySelector('.tooltip-text')?.innerText || '';\n      if (tooltipSpan && getComputedStyle(tooltipSpan, ':before').getPropertyValue('content') !== 'none') {\n        tooltipText = getComputedStyle(tooltipSpan, ':before').getPropertyValue('content');\n      }\n      window.dataLayer.push({\n        event: 'gaEvent',\n        eventCategory: 'Tooltip Info',\n        eventAction: tooltipText && linkText ? tooltipText.replace(/['\"]+/g, '') + ' - ' + linkText : '',\n        eventLabel: page\n      });\n    }\n  }\n\n  onBreakpointChange() {\n    if ((this.wasMobile && window.isMobile()) || this.wasMobile == undefined || this.$options.alwaysclickable) {\n      return;\n    }\n    this.wasMobile = false;\n    this.$off(this.EVENTS_ID.CLICK_TOOLTIP);\n    this.$off(this.EVENTS_ID.BLUR_TOOLTIP);\n    if (window.isMobile()) {\n      this.handleClickTooltip();\n    } else {\n      this.handleHoverForDatalayer();\n    }\n  }\n\n  handleClickTooltip(ext, time) {\n    if (ext) {\n      this.$el.click();\n    }\n\n    this.$on(this.EVENTS_ID.CLICK_TOOLTIP, (e) => {\n      if ((this.$options.clickablewhendisabled && e.currentTarget.classList.contains('disabled')) || !this.$options.clickablewhendisabled) {\n        if (e.target.tagName !== 'A') {\n          e.preventDefault();\n        }\n        e.stopImmediatePropagation();\n        this.pushPromoModalOpenToDatalayer(this.$el);\n\n        if (this.$el.classList.contains(this.CLASSES.showTooltip) && (!this.$options.preventhide || this.$options.closeonclick)) {\n          clearTimeout(this.hideTimeout);\n          this.$el.classList.remove(this.CLASSES.showTooltip);\n          this.$el.ariaPressed = false;\n        } else {\n          this.$el.classList.add(this.CLASSES.showTooltip);\n          this.$el.ariaPressed = true;\n          if (!this.$options.preventhide && !this.$options.closeonclick) {\n            this.hideTimeout = setTimeout(\n              () => {\n                this.$el.classList.remove(this.CLASSES.showTooltip);\n                this.$el.ariaPressed = false;\n              },\n              time ? time : '2500'\n            );\n          }\n        }\n      }\n    });\n    this.$on(this.EVENTS_ID.BLUR_TOOLTIP, (e) => {\n      clearTimeout(this.hideTimeout);\n      this.$el.classList.remove(this.CLASSES.showTooltip);\n    });\n\n    // if preventhide is true, allows to close tooltip by clicking anywhere on screen\n    if (this.$el.classList.contains(this.CLASSES.showTooltip) && this.$options.preventhide) {\n      document.querySelector('body').classList.add(this.CLASSES.disableHover);\n      window.addEventListener(window.isMobile() ? 'touchstart' : 'mousedown', (e) => {\n        if (this.$el.classList.contains(this.CLASSES.showTooltip)) {\n          this.$el.classList.remove(this.CLASSES.showTooltip);\n        }\n        document.querySelector('body').classList.remove(this.CLASSES.disableHover);\n      });\n    }\n  }\n\n  handleExternalClick(params) {\n    if (params && params.targetId == this.$options.id) {\n      let ext = true;\n      let time = params.showTime ? params.showTime : '';\n      this.handleClickTooltip(ext, time);\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":""}