{"version":3,"file":"couponWidgetControllerChunk.js?v=23.134.0+20261102.30.bbbf8652390b5ce306040b1cece1df0dd99fac01&h=406453d39eb057c91211","mappings":"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","sources":["webpack://site-client-side/./ClientApp/components/couponWidget/couponWidgetController.ts"],"sourcesContent":["type Coupon = {\n PrimaryImage: string;\n Title: string;\n Description: string;\n CampaignID: string;\n EligibleBrands?: {\n BrandName: string;\n }[];\n EligibleCategories?: {\n CategoryId: string;\n }[];\n EligibleSubcategories?: {\n SubCategoryId: string;\n }[];\n EligibleProducts?: {\n ProductId: string;\n }[];\n};\n\ntype ProductDetail = {\n ProductId: string;\n CategoryId: string;\n SubCategoryId: string;\n Brand: string;\n};\n\nclass HearthAndHomeCoupon {\n private readonly element: HTMLElement;\n\n private readonly defaultCoupon: Coupon = {\n PrimaryImage: null,\n Title: null,\n Description: null,\n CampaignID: null,\n };\n\n public constructor(element: HTMLElement) {\n this.element = element;\n }\n\n public initialize() {\n this.getCoupons();\n }\n\n public getCoupons() {\n const id = this.element.getAttribute(\"id\");\n const url = this.element.getAttribute(\"url\");\n\n $.post(url, {\n SiteKey: id,\n HHTConfig: {\n SiteKey: id,\n Implementation: \"Catalog\",\n },\n }).then(\n function (response) {\n const coupons = response.Coupons\n ? (response.Coupons as Coupon[])\n : new Array();\n const coupon = this.getEligibleCoupon(coupons);\n this.createHtml(coupon);\n }.bind(this)\n );\n }\n\n public getEligibleCoupon(coupons: Coupon[]): Coupon | null {\n if (!Array.isArray(coupons) || coupons.length === 0) {\n return null;\n }\n\n // Try to get product details from the Quote modal on the PDP\n let product: ProductDetail | undefined;\n const settingsElement = document.getElementById(\n \"fireplaceQuoteModalSettings\"\n );\n if (settingsElement) {\n product = JSON.parse(settingsElement.innerText)?.fireplaceJsonData\n ?.productDetail;\n }\n if (!product) {\n console.error(\n \"No fireplace product info found. Can't show a valid coupon.\"\n );\n return null;\n }\n\n const eligibleCoupons = coupons.filter((c) => {\n if (Array.isArray(c.EligibleProducts) && c.EligibleProducts.length > 0) {\n return c.EligibleProducts.some(\n (p) => p.ProductId === product.ProductId\n );\n }\n\n if (\n Array.isArray(c.EligibleBrands) &&\n c.EligibleBrands.length > 0 &&\n !c.EligibleBrands.some(\n (p) => p.BrandName.toLowerCase() === product.Brand.toLowerCase()\n )\n ) {\n return false;\n }\n if (\n Array.isArray(c.EligibleCategories) &&\n c.EligibleCategories.length > 0 &&\n !c.EligibleCategories.some((p) => p.CategoryId === product.CategoryId)\n ) {\n return false;\n }\n if (\n Array.isArray(c.EligibleSubcategories) &&\n c.EligibleSubcategories.length > 0 &&\n !c.EligibleSubcategories.some(\n (p) => p.SubCategoryId === product.SubCategoryId\n )\n ) {\n return false;\n }\n return true;\n });\n\n return eligibleCoupons.length > 0 ? eligibleCoupons[0] : null;\n }\n\n public createHtml(coupon: Coupon | null) {\n /*\n * DEV-25606: No default image was given so we'll grab the first one from the slider\n */\n const slide = document.querySelector(\n \"#rtl-slider-product .rtl-slider-slide\"\n ) as HTMLElement;\n if (slide) {\n this.defaultCoupon.PrimaryImage = slide.dataset.imgSrc;\n }\n coupon = coupon ?? this.defaultCoupon;\n const modalId = \"its-lit-coupon-modal\";\n const headElement = document.getElementsByTagName(\"head\")[0];\n const css = document.createElement(\"style\");\n const taggingAttributes = ` \n data-dotagging-event='cta_interaction'\n data-dotagging-event-action='click'\n data-dotagging-event-action-result='open'\n data-dotagging-event-owner='dealeron'\n data-dotagging-element-order='0'\n data-dotagging-element-type='item_details'\n data-dotagging-element-subtype='cta_button'`;\n const html = `
\n
\n
\n \"Product \n
\n
\n

${\n coupon.Title\n }

\n

${coupon.Description}

\n \n \n
\n
\n
`;\n\n css.innerHTML = `\n @media only screen and (min-width: 768px) { \n #${modalId} .modal-content { \n margin-top: 10vh; \n } \n }\n \n #${modalId} .modal-header {\n background: linear-gradient(175deg,rgba(0,0,0,.4),rgba(0,0,0,.9)), url('static/dealer-${window.DlronGlobal_DealerId}/images/demo12.jpg') no-repeat center / cover;\n padding: 3em 2em;\n color: white;\n text-align: center;\n border-radius: 5px 5px 0 0;\n }\n \n #${modalId} .modal-header hr {\n width: 40px;\n margin: 1em auto;\n }\n \n #${modalId} #progressbar {\n overflow: hidden;\n }\n \n #${modalId} #progressbar li .bg-cta { background: #e87033 !important; }\n \n #${modalId} #progressbar li {\n list-style-type: none;\n width: 100%;\n float: left;\n position: relative;\n }\n \n #${modalId} #progressbar li a {\n text-transform: uppercase;\n letter-spacing: 1px;\n font-size: 12px;\n color: #fff;\n }\n \n #${modalId} #progressbar li a span {\n width: 24px;\n height: 24px;\n line-height: 24px;\n display: block;\n font-size: 12px;\n color: #333;\n background: white;\n border-radius: 25px;\n margin: 0 auto 10px auto;\n }\n \n #${modalId} #progressbar li a span::after {\n content:\"\"\\f040\"\";\n font-family: 'fontawesome';\n }\n \n #${modalId} #progressbar li a span.bg-cta {\n color: white;\n }\n \n #${modalId} #progressbar li a span.bg-cta::after {\n content:\"\"\\f00c\"\";\n font-family: 'fontawesome';\n }\n \n #${modalId} #progressbar li::after {\n content: '';\n width: 75%;\n height: 2px;\n background: white;\n position: absolute;\n left: 0;\n transform: translateX(-50%);\n top: 11px;\n opacity: .1;\n z-index: 1;\n transition: all .3s ease;\n }\n \n #${modalId} #progressbar li.edit-success::after {\n opacity: 1;\n background-color: #e87033;\n }\n \n #${modalId} #progressbar li:first-child::after {\n content: none;\n }`;\n\n this.element.innerHTML = html;\n this.setupOfferDetailsModal(coupon);\n if (headElement) {\n headElement.appendChild(css);\n }\n }\n\n public setupOfferDetailsModal(coupon) {\n const modal = document.createElement(\"div\");\n modal.innerHTML = `\n
\n
\n
\n
\n \n

${coupon.Description}

\n
\n
\n ${coupon.Disclaimer}\n
\n
\n \n
\n
\n
\n
\n `;\n this.element.appendChild(modal);\n }\n}\n\nexport default class CouponWidgetController {\n private readonly element: HTMLElement;\n public id: string;\n public program: string;\n public title: string;\n public imageUrl: string;\n public description: string;\n public disclaimer: string;\n public expires: string;\n public allSpecialsUrl: string;\n\n public constructor(element: HTMLElement) {\n this.element = element;\n this.id = this.element.getAttribute(\"id\");\n this.program = this.element.getAttribute(\"program\") || \"\";\n this.title = this.element.getAttribute(\"title\");\n this.imageUrl = this.element.getAttribute(\"imageurl\");\n this.description = this.element.getAttribute(\"description\");\n this.disclaimer = this.element.getAttribute(\"disclaimer\");\n this.expires = this.element.getAttribute(\"expires\");\n this.allSpecialsUrl = this.element.getAttribute(\"allspecialsurl\");\n this.initialize();\n }\n\n private initialize() {\n if (this.program?.toLowerCase() === \"hht\") {\n const coupon = new HearthAndHomeCoupon(this.element);\n coupon.initialize();\n } else {\n this.loadDefaultCoupon();\n }\n }\n\n public loadDefaultCoupon() {\n this.element.innerHTML = `\n
\n
\n
\n \"Coupon\n
\n

\n ${this.title}\n

\n
\n
\n \n
\n \n View All Offers\n \n \n Expires: ${\n this.expires\n }\n \n
\n

\n ${this.disclaimer}\n

\n \n Print\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \"Ford\"\n

\n ${this.title}\n

\n
\n
\n

${this.description}

\n

Expires: ${\n this.expires\n }

\n

${this.disclaimer}

\n
\n
\n
\n \n
\n
\n
\n
`;\n this.addPrintListeners();\n }\n\n public shouldShow(value: string) {\n if (!value || value.length === 0) {\n return \"hidden\";\n }\n }\n\n public addPrintListeners() {\n const printActions = this.element.querySelectorAll(\"[data-print]\");\n if (printActions !== null) {\n for (let x = 0; x < printActions.length; x++) {\n printActions[x].addEventListener(\"click\", this.print);\n }\n }\n }\n\n public print(event: Event) {\n const id = (event.target as HTMLElement).dataset.print,\n target = `#${id}-modal .modal-content`,\n clone = $(target)[0].cloneNode(true),\n printSection: HTMLDivElement = document.createElement(\"div\");\n printSection.id = \"printSection\";\n document.body.appendChild(printSection);\n printSection.innerHTML = \"\";\n printSection.appendChild(clone);\n window.print();\n printSection.remove();\n }\n}\n"],"names":["HearthAndHomeCoupon","element","defaultCoupon","PrimaryImage","Title","Description","CampaignID","this","initialize","getCoupons","id","getAttribute","url","$","post","SiteKey","HHTConfig","Implementation","then","response","coupons","Coupons","Array","coupon","getEligibleCoupon","createHtml","bind","isArray","length","product","settingsElement","document","getElementById","JSON","parse","innerText","fireplaceJsonData","productDetail","console","error","eligibleCoupons","filter","c","EligibleProducts","some","p","ProductId","EligibleBrands","BrandName","toLowerCase","Brand","EligibleCategories","CategoryId","EligibleSubcategories","SubCategoryId","slide","querySelector","dataset","imgSrc","modalId","headElement","getElementsByTagName","css","createElement","html","innerHTML","window","DlronGlobal_DealerId","setupOfferDetailsModal","appendChild","modal","Disclaimer","CouponWidgetController","program","title","imageUrl","description","disclaimer","expires","allSpecialsUrl","loadDefaultCoupon","shouldShow","addPrintListeners","value","printActions","querySelectorAll","x","addEventListener","print","event","target","clone","cloneNode","printSection","body","remove"],"sourceRoot":""}