{"version":3,"file":"MiniBasketBanner.js","mappings":"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","sources":["webpack://casperComponentProvider/./src/Impression.ts","webpack://casperComponentProvider/./src/MiniBasketBanner.ts","webpack://casperComponentProvider/./src/components/Banner.ts"],"sourcesContent":["export default class Impression {\n  protected waitForImpression(elementId: string, start: number = Date.now()) {\n    setTimeout(this.checkImpression.bind(this), 333, start, elementId)\n  }\n  private checkImpression(start: number, elementId: string) {\n    const element = document.getElementById(elementId)\n    if (element && element.hasChildNodes()) {\n      // eslint-disable-next-line no-extra-semi\n      ;(window as any).gtmDataObject.push({\n        event: 'itemDisplay',\n        eventRaisedBy: 'FreeHTML',\n        eventAction: 'Scroll',\n        itemTypes: ['promotions'],\n        rootElement: element,\n      })\n    } else {\n      if (Date.now() - start < 3000) {\n        this.waitForImpression(elementId, start)\n      }\n    }\n  }\n}\n","import Banner, { BannerConfiguration } from './components/Banner'\nimport Impression from './Impression'\n\nconst uiSDK = ((window as any).ui = (window as any).ui || [])\n\nexport class MiniBasketBanner extends Impression {\n  constructor(\n    configuration: MiniBasketBannerConfiguration,\n    banner: BannerConfiguration\n  ) {\n    super()\n    const miniBasket: HTMLElement | null = document.querySelector(\n      '.MiniBasketDropdown > div'\n    )\n    if (miniBasket) {\n      this.observeDropDown(miniBasket, configuration, banner)\n    } else {\n      const headerContainer = document.querySelector(\n        \"div[id*='HeaderRespBlock']\"\n      )\n      if (headerContainer) {\n        new MutationObserver((mutation, observer) => {\n          if (mutation.length && mutation[0].addedNodes.length) {\n            const miniBasket: HTMLElement | null = headerContainer.querySelector(\n              '.MiniBasketDropdown > div'\n            )\n            if (miniBasket) {\n              this.observeDropDown(miniBasket, configuration, banner)\n              observer.disconnect()\n            }\n          }\n        }).observe(headerContainer, { childList: true, subtree: true })\n      }\n    }\n  }\n  observeDropDown(\n    miniBasket: HTMLElement,\n    configuration: MiniBasketBannerConfiguration,\n    banner: BannerConfiguration\n  ) {\n    new MutationObserver((mutation) => {\n      if (mutation.length && mutation[0].addedNodes.length) {\n        if (miniBasket.querySelector('.MiniBasketDropdown__wrapper')) {\n          this.push(configuration, banner)\n        } else {\n          const miniBasketDropdown = document.querySelector(\n            '.MiniBasketDropdown__dropdown'\n          )\n          if (miniBasketDropdown) {\n            new MutationObserver((_, observer) => {\n              this.push(configuration, banner)\n              observer.disconnect()\n            }).observe(miniBasketDropdown, { childList: true })\n          }\n        }\n      }\n    }).observe(miniBasket, { childList: true })\n  }\n  public push(\n    configuration: MiniBasketBannerConfiguration,\n    banner: BannerConfiguration\n  ) {\n    const existingBenefitMessage = document.querySelector('.BenefitMessage')\n    if (existingBenefitMessage) {\n      existingBenefitMessage.id = 'BenefitMessage'\n    } else {\n      const benefitMessage = document.createElement('div')\n      benefitMessage.id = 'BenefitMessage'\n      benefitMessage.className = 'BenefitMessage'\n      const headerNode = document.querySelector('.MiniBasketDropdown__header')\n      if (headerNode) {\n        headerNode.insertAdjacentElement('afterend', benefitMessage)\n      }\n    }\n\n    uiSDK.push({\n      configuration: {\n        props: {\n          bannerElements: [\n            new Banner('miniBasket', 'responsive_mini_basket_benefits', banner),\n          ],\n          shouldHaveBackgroundColor: true,\n        },\n        eCommerceData: {},\n        translations: {\n          'promotionbannersrespblock.a11y.title': configuration.title,\n        },\n      },\n      id: 'BenefitMessage',\n      module: 'PromotionBanner',\n    })\n    this.waitForImpression('BenefitMessage')\n    if ((window as any).formFactor.detect() === 'NARROW') {\n      const newBenefitMessage = document.getElementById('BenefitMessage')\n      if (newBenefitMessage) {\n        new MutationObserver((mutation, observer) => {\n          let newPromotionBanner\n          for (const mut of mutation) {\n            const addedNodes = mut.addedNodes\n            if (addedNodes.length) {\n              newPromotionBanner = addedNodes[0] as HTMLElement\n              if (newPromotionBanner.className === 'PromotionBanner') {\n                break\n              } else {\n                newPromotionBanner = null\n              }\n            }\n          }\n          if (newPromotionBanner) {\n            const promotionBannerLink = newPromotionBanner.querySelector(\n              '.Banner__link'\n            )\n            if (promotionBannerLink) {\n              new MutationObserver((mutation2, observer2) => {\n                if (mutation2.length === 2) {\n                  promotionBannerLink.id = banner.tracking.id + '_link'\n                  uiSDK.push({\n                    configuration: {\n                      props: {\n                        policy: 'small',\n                        src: banner.image,\n                        width: '100%',\n                      },\n                      eCommerceData: {},\n                    },\n                    id: banner.tracking.id + '_link',\n                    module: 'ResponsiveImage',\n                  })\n                  observer2.disconnect()\n                }\n              }).observe(promotionBannerLink, { childList: true })\n            }\n            observer.disconnect()\n          }\n        }).observe(newBenefitMessage, { childList: true })\n      }\n    }\n  }\n}\n\ninterface MiniBasketBannerConfiguration {\n  title: string\n}\n","export default class Banner {\n  public backgroundColor?: string\n  public lightbox?: BannerLightbox\n  public linkElement: BannerLink\n  public media: BannerMedia\n  public meta: {\n    tracking: BannerTracking\n  }\n  constructor(\n    contentSlot: string,\n    creative: string,\n    {\n      url,\n      button,\n      image,\n      backgroundColor,\n      tracking,\n      lightbox,\n    }: BannerConfiguration\n  ) {\n    this.linkElement = {\n      name: button,\n      target: 'SAMEWINDOW',\n      url,\n    }\n    this.media = {\n      altText: button,\n      url: image,\n    }\n    this.meta = {\n      tracking: {\n        click: tracking,\n        contentSlot,\n        creative,\n        impression: tracking,\n      },\n    }\n    this.lightbox = lightbox\n    this.backgroundColor = backgroundColor\n  }\n}\n\nexport interface BannerConfiguration {\n  backgroundColor?: string\n  lightbox?: BannerLightbox\n  button?: string\n  url: string\n  image: string\n  tracking: Tracking\n}\ninterface BannerLink {\n  name?: string\n  target: string\n  url: string\n}\ninterface BannerMedia {\n  altText?: string\n  url: string\n}\ninterface BannerTracking {\n  click: Tracking\n  contentSlot: string\n  creative: string\n  impression: Tracking\n}\ninterface BannerLightbox {\n  linkLabel: string\n  title: string\n  content: string\n}\ninterface Tracking {\n  id: string\n  name: string\n}\n"],"names":["Impression","waitForImpression","start","Date","setTimeout","this","checkImpression","bind","element","document","window","event","eventRaisedBy","eventAction","itemTypes","rootElement","uiSDK","MiniBasketBanner","miniBasket","headerContainer","mutation","observer","childList","subtree","observeDropDown","miniBasketDropdown","existingBenefitMessage","benefitMessage","headerNode","configuration","props","bannerElements","shouldHaveBackgroundColor","eCommerceData","translations","title","id","module","newBenefitMessage","addedNodes","newPromotionBanner","promotionBannerLink","mutation2","banner","policy","src","width","observer2","Banner","url","button","image","backgroundColor","tracking","lightbox","name","target","altText","click","contentSlot","creative","impression"],"sourceRoot":""}