{"version":3,"file":"./modules/Coupon-CouponWithT.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/HeaderIconsSubmenu/HeaderIconsSubmenu.ts","webpack:///./modules/Coupon/CouponWithState.ts","webpack:///./modules/Coupon/CouponWithT.ts","webpack:///./modules/Coupon/Coupon.ts","webpack:///./modules/HeaderIconsSubmenu/index.ts"],"sourcesContent":["import LayerTiny from '../LayerTiny';\r\nimport { hasClass, removeClass, createElementFromString } from '../../helpers/DOMHelpers';\r\nimport { getSubmenuItem } from '../../libs/markUpCreator';\r\n\r\nexport default class HeaderIconsSubmenu {\r\n private wrapper: HTMLElement;\r\n private layer: LayerTiny;\r\n\r\n constructor(public element: HTMLElement, submenuItems: NavSubmenuItem[]) {\r\n this.wrapper = this.element.parentElement;\r\n this.layer = new LayerTiny(this.wrapper, { layerModifierClasses: 'nx-layer--popup' });\r\n\r\n this.init(submenuItems);\r\n }\r\n\r\n protected init(submenuItems: NavSubmenuItem[]): HeaderIconsSubmenu {\r\n this.layer.insertContent(this.getPopUp(submenuItems));\r\n\r\n this.element.addEventListener('click', e => this.onElementClick(e));\r\n\r\n return this;\r\n }\r\n\r\n protected onElementClick(e: Event): void {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.element.classList.toggle('nx-submenu--open');\r\n\r\n if (hasClass(this.element, 'nx-submenu--open')) {\r\n document.addEventListener('click', e => this.onBodyClick(e));\r\n this.layer.open();\r\n } else this.layer.close();\r\n }\r\n\r\n protected onBodyClick(e: Event): void {\r\n const target = e.target;\r\n const currentActionItem = target.closest('.nx-header-icons__link');\r\n\r\n if (!currentActionItem || currentActionItem === this.element) this.closeLayer();\r\n };\r\n\r\n protected closeLayer(): void {\r\n removeClass(this.element, 'nx-submenu--open')\r\n document.removeEventListener('click', e => this.onBodyClick(e));\r\n this.layer.close();\r\n }\r\n\r\n protected getPopUp(submenuItems: NavSubmenuItem[]): HTMLElement {\r\n return createElementFromString(`\r\n
\r\n

\r\n \r\n
\r\n `);\r\n }\r\n};\r\n\r\n","import { map, filter, first } from 'rxjs/operators';\r\n\r\nimport { isNotUndefined } from '../../helpers/helperFunctions';\r\nimport Coupon from './Coupon';\r\nimport { ClassWithState } from '../../store';\r\n\r\nconst moduleSelector = '[data-module=\"Coupon\"]';\r\n\r\nexport default class CouponWithState extends ClassWithState(Coupon) {\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new CouponWithState(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(element: HTMLElement, options: CouponsOptions = {}) {\r\n super(element, options);\r\n\r\n this.state$.pipe(\r\n map(store => store.circleNav.navStructure),\r\n filter(isNotUndefined),\r\n map(navStructure => navStructure.ActionMenu),\r\n map(actionMenu => actionMenu.filter(i => i.Id === 'account').map(i => i.Submenu)[0]),\r\n first(),\r\n ).subscribe(submenu => {\r\n this.submenuStructure = submenu;\r\n this.init();\r\n });\r\n }\r\n}","import CouponWithState from './CouponWithState';\r\nimport ClassWithTracking from \"../../ClassWithTracking\";\r\n\r\nconst moduleSelector = '[data-module=\"Coupon\"]';\r\n\r\nexport default class CouponWithTracking extends ClassWithTracking(CouponWithState) {\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new CouponWithTracking(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(element: HTMLElement, options: CouponsOptions = {}) {\r\n super(element, options);\r\n }\r\n\r\n protected checkCouponType() {\r\n if (this.couponWrapper.classList.contains(this.options.elementSelector + '--locked')) {\r\n this.element.addEventListener('click', () => {\r\n this.pushTrackingData();\r\n }, true);\r\n }\r\n\r\n super.checkCouponType();\r\n }\r\n\r\n protected pushCouponToArray(): void {\r\n this.pushTrackingData();\r\n\r\n super.pushCouponToArray();\r\n }\r\n\r\n private pushTrackingData() {\r\n if (window.NiveaX.IsUAEnabled) {\r\n this.dataLayer.push({\r\n event: \"ga_event\",\r\n eventCategory: 'Coupons',\r\n eventAction: 'Download',\r\n eventLabel: this.couponWrapper.dataset.couponType,\r\n eventNonInteraction: false\r\n });\r\n }\r\n }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n new CouponWithTracking.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n new CouponWithTracking.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n CouponWithTracking.setup(moduleSelector);\r\n}","import { createElementFromString } from '../../helpers/DOMHelpers';\r\nimport { getOptions, parseJSONSafe } from '../../helpers/helperFunctions';\r\nimport HeaderIconsSubmenu from '../HeaderIconsSubmenu';\r\nimport LayerTiny from '../LayerTiny';\r\n\r\nconst moduleSelector = '[data-module=\"Coupon\"]';\r\n\r\nexport default class Coupon {\r\n public element: HTMLElement;\r\n protected options: CouponsOptions;\r\n private couponsArray: Array;\r\n protected couponWrapper: HTMLLinkElement;\r\n private couponID: string;\r\n private couponUrl: string;\r\n private useHrefToFetch: boolean;\r\n protected submenuStructure: NavSubmenuItem[] = [];\r\n private layer: LayerTiny;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new Coupon(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(element: HTMLElement, options: CouponsOptions = {}) {\r\n this.element = element;\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), options));\r\n this.couponWrapper = this.element.querySelector(`.${this.options.wrapperSelector}`);\r\n this.couponID = this.couponWrapper.dataset.couponId;\r\n this.couponUrl = this.couponWrapper.href;\r\n this.useHrefToFetch = this.couponWrapper.dataset.fetchUrl === '' ? true : false;\r\n this.layer = new LayerTiny(this.couponWrapper, { layerModifierClasses: 'nx-layer--popup' });\r\n\r\n this.initCouponsArray();\r\n if (this.checkIfRedeemed(this.couponID)) this.lockThisRedeemedCoupon();\r\n }\r\n\r\n protected init(): Coupon {\r\n this.checkCouponType();\r\n\r\n return this;\r\n }\r\n\r\n protected getRedeemedCoupons(): string {\r\n return localStorage.getItem(this.options.localStorageKey) ? localStorage.getItem(this.options.localStorageKey) : 'false';\r\n }\r\n\r\n protected initCouponsArray(): Array {\r\n if (this.getRedeemedCoupons() === 'false') {\r\n this.couponsArray = [];\r\n } else {\r\n this.couponsArray = parseJSONSafe(this.getRedeemedCoupons());\r\n };\r\n return this.couponsArray;\r\n }\r\n\r\n protected checkCouponType() {\r\n if (this.couponWrapper.classList.contains(this.options.elementSelector + '--locked')) {\r\n this.initLogInRegisterAction(this.couponWrapper, this.submenuStructure);\r\n } else {\r\n this.element.querySelector('.nx-coupon-teaser__link-wrapper')?.addEventListener('click', (e) => this.useHrefToFetch ? this.fetchCoupon(e, this.couponUrl) : this.pushCouponToArray());\r\n }\r\n }\r\n\r\n // Fetch Coupon from external source\r\n protected fetchCoupon(e: Event, url: string) {\r\n e.preventDefault();\r\n if (this.element.classList.contains(this.options.elementSelector + '--redeemed')) return;\r\n fetch(url, {credentials: 'include'})\r\n .then(response => response.json())\r\n .then((response) => {\r\n if (response.printUrl) {\r\n this.fetchedCouponSuccess(response.printUrl);\r\n } else {\r\n this.fetchedCouponError(response.errorMessage);\r\n }\r\n })\r\n .catch((e) => console.error(`Request failed:/\\n${e}`));;\r\n }\r\n\r\n protected fetchedCouponSuccess(url: string) {\r\n this.pushCouponToArray();\r\n window.open(url, '_blank');\r\n }\r\n\r\n protected fetchedCouponError(errorMessage: string) {\r\n this.layer.insertContent(this.getPopUpContent(errorMessage));\r\n this.layer.open();\r\n }\r\n\r\n protected getPopUpContent(errorMessage: string): HTMLElement {\r\n return createElementFromString(`\r\n
\r\n
${errorMessage}
\r\n \r\n
\r\n `);\r\n }\r\n\r\n // Local Storage\r\n protected pushCouponToArray(): void {\r\n this.initCouponsArray();\r\n\r\n if (!this.checkIfRedeemed(this.couponID)) {\r\n this.couponsArray.push(this.couponID);\r\n this.saveRedeemedCouponsToLocalStorage()\r\n .lockThisRedeemedCoupon();\r\n };\r\n }\r\n\r\n protected saveRedeemedCouponsToLocalStorage(): Coupon {\r\n localStorage.setItem(this.options.localStorageKey, JSON.stringify(this.couponsArray));\r\n return this;\r\n }\r\n\r\n protected lockThisRedeemedCoupon(): Coupon {\r\n this.element.classList.add(this.options.elementSelector + '--redeemed');\r\n return this;\r\n }\r\n\r\n protected checkIfRedeemed(couponId: string): boolean {\r\n return this.couponsArray.includes(couponId);\r\n }\r\n\r\n protected initLogInRegisterAction(element: HTMLElement, submenu: NavSubmenuItem[]): void {\r\n new HeaderIconsSubmenu(element, submenu);\r\n }\r\n\r\n protected getDefaultOptions(): CouponsOptions {\r\n return {\r\n elementSelector: 'nx-coupons',\r\n wrapperSelector: 'nx-coupon-teaser__link-wrapper',\r\n contentSelector: 'nx-coupon-teaser__content',\r\n localStorageKey: 'CouponsRedeemed',\r\n };\r\n }\r\n}","import HeaderIconsSubmenu from './HeaderIconsSubmenu';\r\nexport default HeaderIconsSubmenu;"],"names":["HeaderIconsSubmenu","constructor","element","submenuItems","this","wrapper","parentElement","layer","layerModifierClasses","init","insertContent","getPopUp","addEventListener","e","onElementClick","preventDefault","stopPropagation","classList","toggle","document","onBodyClick","open","close","currentActionItem","target","closest","closeLayer","removeEventListener","map","si","join","CouponWithState","setup","selector","Array","from","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","options","super","state$","pipe","store","circleNav","navStructure","ActionMenu","actionMenu","i","Id","Submenu","subscribe","submenu","submenuStructure","moduleSelector","CouponWithTracking","checkCouponType","couponWrapper","contains","elementSelector","pushTrackingData","pushCouponToArray","window","NiveaX","IsUAEnabled","dataLayer","push","event","eventCategory","eventAction","eventLabel","couponType","eventNonInteraction","Coupon","Object","assign","getDefaultOptions","querySelector","wrapperSelector","couponID","couponId","couponUrl","href","useHrefToFetch","fetchUrl","initCouponsArray","checkIfRedeemed","lockThisRedeemedCoupon","getRedeemedCoupons","localStorage","getItem","localStorageKey","couponsArray","initLogInRegisterAction","fetchCoupon","url","fetch","credentials","then","response","json","printUrl","fetchedCouponSuccess","fetchedCouponError","errorMessage","catch","console","error","getPopUpContent","saveRedeemedCouponsToLocalStorage","setItem","JSON","stringify","add","includes","contentSelector"],"sourceRoot":""}