{"version":3,"file":"./modules/Coupon-Coupon.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/HeaderIconsSubmenu/HeaderIconsSubmenu.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 { 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","Coupon","setup","selector","Array","from","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","options","submenuStructure","Object","assign","getDefaultOptions","couponWrapper","querySelector","wrapperSelector","couponID","couponId","couponUrl","href","useHrefToFetch","fetchUrl","initCouponsArray","checkIfRedeemed","lockThisRedeemedCoupon","checkCouponType","getRedeemedCoupons","localStorage","getItem","localStorageKey","couponsArray","contains","elementSelector","initLogInRegisterAction","fetchCoupon","pushCouponToArray","url","fetch","credentials","then","response","json","printUrl","fetchedCouponSuccess","fetchedCouponError","errorMessage","catch","console","error","window","getPopUpContent","push","saveRedeemedCouponsToLocalStorage","setItem","JSON","stringify","add","includes","submenu","contentSelector"],"sourceRoot":""}