{"version":3,"sources":["webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/product-attribute/product-attribute.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/product-attribute/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/add-alert-message/add-alert-message.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/add-alert-message/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/create-message-string/create-message-string.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/create-message-string/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/api-error-handler/api-error-handler.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/api-error-handler/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/error-handler/error-handler.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/error-handler/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/replace.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/screen-dimensions/screen-dimensions.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/screen-dimensions/index.js","webpack:///./cartridges/app_designholding_flos/cartridge/client/default/js/components/product-attribute/product-attribute.js","webpack:///./cartridges/app_designholding_flos/cartridge/client/default/js/components/product-attribute/index.js"],"names":["JS_HOOK_PRODUCT_DETAIL_WRAPPER","JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER","JS_HOOK_PRODUCT_PRICE_WRAPPER","JS_HOOK_PRODUCT_BADGES_WRAPPER","JS_HOOK_PRODUCT_DELIVERY_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER","JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER","JS_HOOK_PRODUCT_ID","JS_HOOK_PRODUCT_TITLE","JS_HOOK_PRODUCT_SUBTITLE","JS_HOOK_PRODUCT_DESIGNERS","JS_HOOK_PRODUCT_ACCORDIONS","JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP","JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE","JS_HOOK_ADD_TO_CART_BUTTON","JS_HOOK_ADD_TO_CART_BUTTON_LABEL","JS_HOOK_OUT_OF_STOCK_BUTTON","JS_HOOK_SEO_TEXT","JS_HOOK_PRODUCT_BREADCRUMB","JS_HOOK_PRODUCT_INCLUDED_BULB","JS_HOOK_PRODUCT_SAMPLES","JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL","JS_HOOK_PRODUCT_STOCK","JS_HOOK_MODAL","JS_HOOK_SWATCH_RADIO","JS_HOOK_COLOR_SWATCH","JS_HOOK_LINKED_PRODUCTS_SLIDER","JS_HOOK_RELATED_SLIDER","JS_HOOK_PRODUCT_DETAIL_BLOCK","PRODUCT_DETAIL_CLASS","JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA","JS_HOOK_PRODUCT_ADD_TO_CART_DATA","JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA","DISABLED","SLIDER_HIDDEN","ProductAttribute","constructor","element","setUI","bindEvents","updateHistory","url","Events","$trigger","data","state","productChange","shouldShowAddToCart","available","readyToOrder","updatePrices","priceHtml","price","replace","updateBadges","badgesHtml","badges","updateDelivery","deliveryHtml","delivery","updateImageGallery","imageGridHtml","imageGallery","updateProductID","id","pid","updateProductTitle","productName","document","title","updateProductSubTitle","productSubTitle","updateProductDesigners","designersHtml","updateProductAccordions","accordionsHtml","updateSeoText","longDescription","updateAttributesDesktop","variationAttributesDesktopHtml","attributes","updateAttributesMobile","variationAttributesMobileHtml","updateProductBreadcrumb","breadcrumbHtml","updateIncludedBulb","includedBulbHtml","updateProductSamples","productSamplesHtml","updateProductAddedToCartModal","addedToCartModalHtml","updateProductStock","productStockHtml","updateSparePartsAnchor","sparePartsAnchorHtml","updateSparePartsList","sparePartsListHtml","updateSparePartsSlider","sparePartsSliderHtml","updateSparePartsViewProductButton","sparePartsViewProductHtml","updateDesignersContentArea","designersContentArea","designersContentAreaHook","querySelector","updateProductDetailBlock","productDetailBlock","updateLinkedProductsSlider","linkedProductsSliderHtml","linkedProducts","ajaxProductTiles","querySelectorAll","promises","forEach","ajaxProductTile","productTileUrl","dataset","promise","API","get","then","response","innerHTML","catch","error","console","info","push","Promise","all","moduleInit","async","updateSidebarBlock","getPromoPage","pdpSidebarBlockId","sidebarBlockWrapperDataset","sidebarUrl","updatePdpSlider","product","relatedSlider","recommendedSlider","crossSelling","crossSellingProductRecommendations","classList","show","rebindEvents","bindModals","bindSelectEvents","bindSwatchEvents","bindRadioEvents","initModules","updateGTMAddToCartGA","productAddToCartGTMDataHTML","addToCartDataElement","outerHTML","updateGTMAddToCartGAModalButtonData","addTocartGAData","addToCartModalDataElements","index","length","addToCartModalDataElement","gtmObj","gtmAddToCart","ga4Obj","gtmAddToCartGA","updateGTMViewItemData","viewItemData","window","ga4Data","JSON","parse","ecommerce","ui","selects","swatches","radios","productDetail","addToCartButtons","addToCartButtonLabels","outOfStockButtons","updateButtonLabel","buttonLabel","label","innerText","updateButton","button","setAttribute","removeAttribute","select","addEventListener","e","onChangeHandler","radio","swatch","onClickHandler","productDetailWrapper","modals","modal","modalId","location","reload","getContent","getContentSuccess","errorHandler","updateHtml","masterName","updateBundleIds","productBundleIds","productDetails","bundledProductIds","baseProductId","recommendedBulbsObj","gtmViewItem","Error","selectedProductUrl","ScreenDimensions","isTabletLandscapeAndBigger","target","body","offset","nodeName","options","selectedIndex","parentElement","JS_HOOK_MESSAGE","JS_HOOK_CONTENT","addAlertMessage","message","hook","type","scroll","selector","status","el","content","variantClass","className","contains","add","remove","focus","createMessageString","errors","errorHtml","apiErrorHandler","redirectUrl","href","serverErrors","errorMessage","responseJSON","fullReplace","item","toString","installMediaQueryWatcher","mediaQuery","layoutChangedCallback","mql","matchMedia","addListener","event","matches","media","MEDIA_QUERIES","reference","breakpoint","screenHeight","height","screenWidth","width","RafThrottle","set","namespace","fn","updateWidth","mqObject","innerWidth","innerHeight","JS_HOOK_HELP_ME_CHOOSE_BUTTON","ON_ORDER_SECTION","ADD_TO_CART_SECTION","setAddToCartButton","onOrderSections","section","addToCartSections","helpMeChooseButtons","setGoToStoreButton","setDiscontinuedButton","availability","onOrder","discontinued"],"mappings":"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","file":"js/ProductAttribute.js","sourcesContent":["import API from '@utilities/api'\nimport { body } from '@utilities/dom-elements'\nimport errorHandler from '@utilities/errors/error-handler'\nimport Events from '@utilities/events'\nimport moduleInit from '@utilities/module-init'\nimport replace from '@utilities/replace'\nimport ScreenDimensions from '@utilities/screen-dimensions'\n\nconst JS_HOOK_PRODUCT_DETAIL_WRAPPER = '[js-hook-product-detail]'\nconst JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER = '[js-hook-image-gallery-wrapper]'\nconst JS_HOOK_PRODUCT_PRICE_WRAPPER = '[js-product-price-wrapper]'\nconst JS_HOOK_PRODUCT_BADGES_WRAPPER = '[js-product-badges-wrapper]'\nconst JS_HOOK_PRODUCT_DELIVERY_WRAPPER = '[js-hook-product-delivery-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER = '[js-hook-spare-parts-anchor-link-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER = '[js-hook-spare-parts-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER = '[js-hook-spare-parts-slider-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER = '[js-hook-spare-parts-viewproduct-wrapper]'\nconst JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER = '[js-hook-sidebar-block-wrapper]'\nconst JS_HOOK_PRODUCT_ID = '[js-hook-product-id]'\nconst JS_HOOK_PRODUCT_TITLE = '[js-hook-product-attribute-title]'\nconst JS_HOOK_PRODUCT_SUBTITLE = '[js-hook-product-attribute-subtitle]'\nconst JS_HOOK_PRODUCT_DESIGNERS = '[js-hook-product-designers]'\nconst JS_HOOK_PRODUCT_ACCORDIONS = '[js-hook-product-accordions]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP = '[js-hook-product-attribute-desktop]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE = '[js-hook-product-attribute-mobile]'\nconst JS_HOOK_ADD_TO_CART_BUTTON = '[js-hook-add-to-cart]'\nconst JS_HOOK_ADD_TO_CART_BUTTON_LABEL = '[js-hook-button-label]'\nconst JS_HOOK_OUT_OF_STOCK_BUTTON = '[js-hook-out-of-stock-button]'\nconst JS_HOOK_SEO_TEXT = '[js-hook-seo-text]'\nconst JS_HOOK_PRODUCT_BREADCRUMB = '[js-hook-product-breadcrumb]'\nconst JS_HOOK_PRODUCT_INCLUDED_BULB = '[js-hook-product-included-bulb]'\nconst JS_HOOK_PRODUCT_SAMPLES = '[js-hook-product-samples-wrapper]'\nconst JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL = '[js-hook-added-to-cart-modal]'\nconst JS_HOOK_PRODUCT_STOCK = '[js-hook-product-stock-wrapper]'\nconst JS_HOOK_MODAL = '[js-hook-modal]'\nconst JS_HOOK_SWATCH_RADIO = '[js-hook-swatch-radio]'\nconst JS_HOOK_COLOR_SWATCH = '[js-hook-color-swatch]'\nconst JS_HOOK_LINKED_PRODUCTS_SLIDER = '[js-hook-linked-products-slider]'\nconst JS_HOOK_RELATED_SLIDER = '[js-hook-related-slider]'\nconst JS_HOOK_PRODUCT_DETAIL_BLOCK = '[js-hook-product-detail-block]'\nconst PRODUCT_DETAIL_CLASS = '.c-product-detail'\nconst JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA = '[js-hook-product-designers-content-area]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_DATA = '[js-hook-product-add-to-cart-data]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA = '[add-to-cart-modal-data]'\n\nconst DISABLED = 'disabled'\nconst SLIDER_HIDDEN = 'slider--hidden'\n\nclass ProductAttribute {\n constructor(element) {\n this.element = element\n\n this.setUI()\n this.bindEvents()\n }\n\n static updateHistory(url) {\n Events.$trigger('history::push', {\n data: {\n url,\n state: {\n productChange: true,\n },\n },\n })\n }\n\n /**\n * @param available is map from product object. False or true\n * @param readyToOrder is map from product object. Default value false\n */\n static shouldShowAddToCart(available, readyToOrder = false) {\n return available && readyToOrder\n }\n\n static updatePrices({ priceHtml: price }) {\n replace(price, JS_HOOK_PRODUCT_PRICE_WRAPPER)\n }\n\n static updateBadges({ badgesHtml: badges }) {\n replace(badges, JS_HOOK_PRODUCT_BADGES_WRAPPER)\n }\n\n static updateDelivery({ deliveryHtml: delivery }) {\n replace(delivery, JS_HOOK_PRODUCT_DELIVERY_WRAPPER)\n }\n\n static updateImageGallery({ imageGridHtml: imageGallery }) {\n replace(imageGallery, JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER, true)\n }\n\n static updateProductID({ id: pid }) {\n replace(pid, `${JS_HOOK_PRODUCT_ID}`)\n }\n\n static updateProductTitle(productName) {\n replace(productName, `${JS_HOOK_PRODUCT_TITLE}`)\n document.title = productName\n }\n\n static updateProductSubTitle(productSubTitle) {\n replace(productSubTitle, `${JS_HOOK_PRODUCT_SUBTITLE}`)\n }\n\n static updateProductDesigners({ designersHtml }) {\n replace(designersHtml, `${JS_HOOK_PRODUCT_DESIGNERS}`)\n }\n\n static updateProductAccordions({ accordionsHtml }) {\n replace(accordionsHtml, `${JS_HOOK_PRODUCT_ACCORDIONS}`)\n }\n\n static updateSeoText({ longDescription }) {\n replace(longDescription, `${JS_HOOK_SEO_TEXT}`)\n }\n\n static updateAttributesDesktop({ variationAttributesDesktopHtml: attributes }) {\n replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP}`)\n }\n\n static updateAttributesMobile({ variationAttributesMobileHtml: attributes }) {\n replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE}`)\n }\n\n static updateProductBreadcrumb({ breadcrumbHtml }) {\n replace(breadcrumbHtml, `${JS_HOOK_PRODUCT_BREADCRUMB}`)\n }\n\n static updateIncludedBulb({ includedBulbHtml }) {\n replace(includedBulbHtml, `${JS_HOOK_PRODUCT_INCLUDED_BULB}`)\n }\n\n static updateProductSamples({ productSamplesHtml }) {\n replace(productSamplesHtml, `${JS_HOOK_PRODUCT_SAMPLES}`)\n }\n\n static updateProductAddedToCartModal({ addedToCartModalHtml }) {\n replace(addedToCartModalHtml, `${JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL}`)\n }\n\n static updateProductStock({ productStockHtml }) {\n replace(productStockHtml, `${JS_HOOK_PRODUCT_STOCK}`)\n }\n\n static updateSparePartsAnchor({ sparePartsAnchorHtml }) {\n replace(sparePartsAnchorHtml, JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER)\n }\n\n static updateSparePartsList({ sparePartsListHtml }) {\n replace(sparePartsListHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER}`)\n }\n\n static updateSparePartsSlider({ sparePartsSliderHtml }) {\n replace(sparePartsSliderHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER}`)\n }\n\n static updateSparePartsViewProductButton({ sparePartsViewProductHtml }) {\n replace(sparePartsViewProductHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER}`)\n }\n\n static updateDesignersContentArea({ designersContentArea }) {\n const designersContentAreaHook = document.querySelector(JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA)\n if (designersContentAreaHook) {\n replace(designersContentArea, `${JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA}`)\n }\n }\n\n static updateProductDetailBlock({ productDetailBlock }) {\n replace(productDetailBlock, `${JS_HOOK_PRODUCT_DETAIL_BLOCK}`)\n }\n\n static updateLinkedProductsSlider({ linkedProductsSliderHtml }) {\n const linkedProducts = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n\n if (linkedProducts) {\n replace(linkedProductsSliderHtml, `${JS_HOOK_LINKED_PRODUCTS_SLIDER}`)\n\n const ajaxProductTiles = [...linkedProducts.querySelectorAll('.ajax-product-tile')]\n\n if (ajaxProductTiles) {\n const promises = []\n\n ajaxProductTiles.forEach((ajaxProductTile) => {\n const { productTileUrl } = ajaxProductTile.dataset\n\n if (productTileUrl) {\n const promise = API.get(productTileUrl)\n .then((response) => {\n if (response.data) ajaxProductTile.innerHTML = response.data\n })\n .catch((error) => {\n console.info(error)\n })\n\n promises.push(promise)\n }\n })\n\n Promise.all(promises)\n .then(() => {\n moduleInit.async('[js-hook-basic-slider]', () =>\n import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n )\n })\n .catch((error) => {\n console.info(error)\n })\n } else {\n moduleInit.async('[js-hook-basic-slider]', () =>\n import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n )\n }\n }\n }\n\n static updateSidebarBlock(data) {\n replace(data, `${JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER}`)\n }\n\n static getPromoPage({ pdpSidebarBlockId }) {\n const sidebarBlockWrapperDataset = document.querySelector(JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER)\n if (sidebarBlockWrapperDataset) {\n const { sidebarUrl } = sidebarBlockWrapperDataset.dataset\n\n if (pdpSidebarBlockId) {\n API.get(sidebarUrl + pdpSidebarBlockId)\n .then((response) => {\n ProductAttribute.updateSidebarBlock(response.data)\n })\n .catch((error) => {\n console.info(error)\n ProductAttribute.updateSidebarBlock('')\n })\n } else {\n ProductAttribute.updateSidebarBlock('')\n }\n }\n }\n\n static updatePdpSlider(product) {\n const relatedSlider = document.querySelector(JS_HOOK_RELATED_SLIDER)\n const recommendedSlider = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n const crossSelling = product.crossSellingProductRecommendations\n\n if (recommendedSlider && relatedSlider) {\n recommendedSlider.classList[crossSelling.show ? 'remove' : 'add'](SLIDER_HIDDEN)\n relatedSlider.classList[crossSelling.show ? 'add' : 'remove'](SLIDER_HIDDEN)\n }\n }\n\n rebindEvents() {\n // Fire Event to Update Images\n Events.$trigger('lazyimage::update')\n\n Events.$trigger('in-view::update')\n Events.$trigger('events::dom-reinit')\n Events.$trigger('scroll-to::reinit-elements')\n\n this.bindModals()\n\n this.bindSelectEvents()\n this.bindSwatchEvents()\n this.bindRadioEvents()\n }\n\n static initModules() {\n moduleInit.async('[js-hook-product-attribute]', () =>\n import(/* webpackChunkName: \"js/ProductAttribute\" */ '@components/product-attribute'),\n )\n\n moduleInit.async('[js-hook-custom-select-box]', () =>\n import(/* webpackChunkName: \"js/CustomSelectBox\" */ '@components/custom-select-box'),\n )\n\n moduleInit.async('[js-hook-accordion]', () =>\n import(/* webpackChunkName: \"js/Accordion\" */ '@components/accordion'),\n )\n\n moduleInit.async('[js-hook-high-res-image-gallery]', () =>\n import(/* webpackChunkName: \"js/HighResImageGallery\" */ '@components/high-res-image-gallery'),\n )\n\n moduleInit.async('[js-hook-image-zoom]', () =>\n import(/* webpackChunkName: \"js/ImageZoom\" */ '@components/image-zoom'),\n )\n\n moduleInit.async('[js-hook-image-modal]', () =>\n import(/* webpackChunkName: \"js/ImageModal\" */ '@components/image-modal'),\n )\n\n moduleInit.async('[js-hook-product-sample-modal-toggle]', () =>\n import(\n /* webpackChunkName: \"js/ProductSampleModalToggle\" */ '@components/product-sample-modal-toggle'\n ),\n )\n\n moduleInit.async('[js-hook-product-sample-form]', () =>\n import(/* webpackChunkName: \"js/ProductSampleForm\" */ '@components/product-sample-form'),\n )\n\n moduleInit.async('[js-hook-add-to-cart]', () =>\n import(/* webpackChunkName: \"js/AddToCart\" */ '@components/add-to-cart'),\n )\n\n moduleInit.async('[js-hook-toggle]', () =>\n import(/* webpackChunkName: \"js/Toggle\" */ '@components/toggle'),\n )\n }\n\n static updateGTMAddToCartGA(productAddToCartGTMDataHTML) {\n if (productAddToCartGTMDataHTML) {\n const addToCartDataElement = document.querySelector(JS_HOOK_PRODUCT_ADD_TO_CART_DATA)\n\n if (addToCartDataElement) addToCartDataElement.outerHTML = productAddToCartGTMDataHTML\n }\n }\n\n static updateGTMAddToCartGAModalButtonData(addTocartGAData) {\n if (addTocartGAData) {\n const addToCartModalDataElements = document.querySelectorAll(\n JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA,\n )\n\n if (addToCartModalDataElements) {\n for (let index = 0; index < addToCartModalDataElements.length; index++) {\n const addToCartModalDataElement = addToCartModalDataElements[index]\n\n addToCartModalDataElement.dataset.gtmObj = addTocartGAData.gtmAddToCart\n addToCartModalDataElement.dataset.ga4Obj = addTocartGAData.gtmAddToCartGA\n }\n }\n }\n }\n\n static updateGTMViewItemData(viewItemData) {\n if (viewItemData) {\n window.ga4Data = JSON.parse(viewItemData)\n\n Events.$trigger('gtm::push', { data: { ecommerce: null } })\n Events.$trigger('gtm::push', { data: window.ga4Data })\n }\n }\n\n setUI() {\n this.ui = {\n selects: [...this.element.querySelectorAll('select')],\n swatches: [...this.element.querySelectorAll(JS_HOOK_COLOR_SWATCH)],\n radios: [...this.element.querySelectorAll(JS_HOOK_SWATCH_RADIO)],\n productDetail: document.querySelector(PRODUCT_DETAIL_CLASS),\n addToCartButtons: [...document.querySelectorAll(JS_HOOK_ADD_TO_CART_BUTTON)],\n addToCartButtonLabels: [\n ...document.querySelectorAll(\n `${JS_HOOK_ADD_TO_CART_BUTTON} ${JS_HOOK_ADD_TO_CART_BUTTON_LABEL}`,\n ),\n ],\n outOfStockButtons: [...document.querySelectorAll(JS_HOOK_OUT_OF_STOCK_BUTTON)],\n }\n }\n\n updateButtonLabel({ buttonLabel }) {\n this.ui.addToCartButtonLabels.forEach((label) => {\n label.innerText = buttonLabel\n })\n }\n\n updateButton({ id, available, readyToOrder }) {\n this.ui.addToCartButtons.forEach((button) => {\n button.setAttribute('data-pid', id)\n\n if (ProductAttribute.shouldShowAddToCart(available, readyToOrder)) {\n button.removeAttribute(DISABLED)\n } else {\n button.setAttribute(DISABLED, true)\n }\n })\n }\n\n bindSelectEvents() {\n this.ui.selects.forEach((select) => {\n select.addEventListener('change', (e) => this.onChangeHandler(e))\n })\n }\n\n bindRadioEvents() {\n this.ui.radios.forEach((radio) => {\n radio.addEventListener('change', (e) => this.onChangeHandler(e))\n })\n }\n\n bindSwatchEvents() {\n this.ui.swatches.forEach((swatch) => {\n swatch.addEventListener('click', (e) => this.onClickHandler(e))\n })\n }\n\n // eslint-disable-next-line class-methods-use-this\n bindModals() {\n const productDetailWrapper = document.querySelector(JS_HOOK_PRODUCT_DETAIL_WRAPPER)\n\n if (!productDetailWrapper) return\n\n const modals = [...productDetailWrapper.querySelectorAll(JS_HOOK_MODAL)]\n\n modals.forEach((modal) => {\n const modalId = modal.id\n\n Events.$trigger('modal::bind', { data: modalId })\n })\n }\n\n /**\n * Binds events\n */\n bindEvents() {\n this.bindSelectEvents()\n this.bindSwatchEvents()\n this.bindRadioEvents()\n\n window.addEventListener('popstate', () => {\n // todo: extend updateHTML to variant selects + reinit events\n // instead of reloading page\n // this.getContent(document.location.href);\n window.location.reload()\n })\n }\n\n getContent(url) {\n Events.$trigger('loader::show')\n\n API.get(url)\n .then((response) => this.getContentSuccess(response.data))\n .catch((error) => errorHandler(error))\n }\n\n updateHtml(product, productAddToCartGTMDataHTML) {\n if (product.masterName) {\n ProductAttribute.updateProductTitle(product.masterName)\n ProductAttribute.updateProductSubTitle(product.productName)\n } else {\n ProductAttribute.updateProductTitle(product.productName)\n }\n\n ProductAttribute.updateImageGallery(product)\n ProductAttribute.updatePrices(product)\n ProductAttribute.updateBadges(product)\n ProductAttribute.updateDelivery(product)\n ProductAttribute.updateProductID(product)\n ProductAttribute.updateProductDesigners(product)\n ProductAttribute.updateProductAccordions(product)\n ProductAttribute.updateSeoText(product)\n ProductAttribute.updateAttributesDesktop(product)\n ProductAttribute.updateAttributesMobile(product)\n ProductAttribute.updateProductBreadcrumb(product)\n ProductAttribute.updateIncludedBulb(product)\n ProductAttribute.updateProductSamples(product)\n ProductAttribute.updateProductAddedToCartModal(product)\n ProductAttribute.updateProductStock(product)\n ProductAttribute.updateSparePartsAnchor(product)\n ProductAttribute.updateSparePartsList(product)\n ProductAttribute.updateSparePartsSlider(product)\n ProductAttribute.updateSparePartsViewProductButton(product)\n ProductAttribute.updateLinkedProductsSlider(product)\n ProductAttribute.updateDesignersContentArea(product)\n ProductAttribute.updateProductDetailBlock(product)\n\n ProductAttribute.updatePdpSlider(product)\n\n ProductAttribute.getPromoPage(product)\n\n ProductAttribute.updateGTMAddToCartGA(productAddToCartGTMDataHTML)\n\n this.updateButtonLabel(product)\n this.updateButton(product)\n\n this.setUI()\n\n // Bind events again to new DOM elements\n this.rebindEvents()\n ProductAttribute.initModules()\n\n Events.$trigger('loader::hide')\n }\n\n // eslint-disable-next-line class-methods-use-this\n updateBundleIds(productBundleIds, product) {\n if (productBundleIds) {\n const productDetails = document.querySelector(PRODUCT_DETAIL_CLASS)\n productDetails.dataset.bundledProductIds = productBundleIds\n productDetails.dataset.baseProductId = `${product.id || ''}`\n Events.$trigger('product::specsheet')\n }\n }\n\n getContentSuccess(data) {\n const { product } = data\n const { productAddToCartGTMDataHTML } = data\n const { recommendedBulbsObj } = data\n const { gtmViewItem } = data\n const { bundledProductIds } = data\n\n if (!product) {\n throw new Error('No product data found')\n }\n\n ProductAttribute.updateHistory(product.selectedProductUrl)\n this.updateHtml(product, productAddToCartGTMDataHTML)\n this.updateBundleIds(bundledProductIds, product)\n\n ProductAttribute.updateGTMAddToCartGAModalButtonData(recommendedBulbsObj)\n ProductAttribute.updateGTMViewItemData(gtmViewItem)\n\n if (!ScreenDimensions.isTabletLandscapeAndBigger) {\n Events.$trigger('scroll-to::scroll', {\n data: {\n target: body,\n offset: 0,\n },\n })\n }\n }\n\n onChangeHandler(e) {\n let data = e.target.dataset\n if (e.target.nodeName === 'SELECT') {\n data = e.target.options[e.target.selectedIndex].dataset\n }\n\n if (!data.url) return\n\n this.getContent(data.url)\n }\n\n onClickHandler(e) {\n const data = e.target.parentElement.dataset;\n if (!data.url) return\n\n this.getContent(data.url)\n }\n}\n\nexport default ProductAttribute\n","/**\n * @shelf-version: 1.1.0\n */\n\nimport ProductAttribute from './product-attribute';\n\nexport default ProductAttribute;\n","import Events from '@utilities/events'\n\nconst JS_HOOK_MESSAGE = '[js-hook-message]'\nconst JS_HOOK_CONTENT = '[js-hook-alert-content]'\n\n/**\n * Add alert message to page\n *\n * @param {String} message - the message string to show\n * @param {String} hook - [js-hook-message] or custom hook\n * @param {String} type - success, warning or error type\n */\nconst addAlertMessage = function ({ message, hook, type, scroll = false }) {\n const selector = hook || JS_HOOK_MESSAGE\n const status = type || 'error'\n\n const el = document.querySelector(selector)\n\n if (!el) return\n const content = el.querySelector(JS_HOOK_CONTENT)\n content.innerHTML = message\n\n // Add classes and show\n const variantClass = `alert--${status}`;\n el.className = el.className.replace(/(?:^|\\W)alert--(\\w+)(?!\\w)/g, ` ${variantClass}`)\n if(!el.classList.contains(variantClass)) el.classList.add(variantClass)\n el.classList.remove('u-hidden')\n el.removeAttribute('aria-hidden')\n el.focus()\n\n // Scroll to alert\n if (!el.classList.contains('is--relative') && !scroll) return\n Events.$trigger('scroll-to::scroll', {\n data: {\n target: el,\n offset: 130,\n },\n })\n}\nexport default addAlertMessage\n","import addAlertMessage from './add-alert-message'\n\nexport default addAlertMessage\n","const createMessageString = function (errors) {\n let errorHtml = ''\n errors.forEach((error) => {\n errorHtml += `<p>${error}</p>`\n })\n return errorHtml\n}\nexport default createMessageString\n","import createMessageString from './create-message-string'\n\nexport default createMessageString\n","import createMessageString from '@utilities/errors/create-message-string'\nimport addAlertMessage from '../add-alert-message'\n\n/**\n * Process API error\n *\n * @param {Object|String} error - error message\n * @param {string} selector - error message selector\n */\nconst apiErrorHandler = function (error, selector) {\n if (!error) return\n const { redirectUrl } = error\n if (redirectUrl) {\n window.location.href = redirectUrl\n } else if (error.serverErrors && error.serverErrors.length) {\n addAlertMessage({\n message: createMessageString(error.serverErrors),\n hook: selector,\n type: 'error',\n scroll: 'true'\n })\n } else {\n const errorMessage = error.errorMessage || error.message || error.responseJSON\n if (!errorMessage) return\n addAlertMessage({ message: errorMessage, hook: selector, type: 'error', scroll: 'true' })\n }\n}\n\nexport default apiErrorHandler\n","import apiErrorHandler from './api-error-handler'\n\nexport default apiErrorHandler\n","import idx from 'idx'\nimport Events from '@utilities/events'\nimport apiErrorHandler from '../api-error-handler'\n\n/**\n * Process errors from API or JS errors\n *\n * @param {Object} error - error message\n */\nconst errorHandler = function (error) {\n Events.$trigger('loader::hide')\n const data = idx(error, (_) => _.response.data)\n if (data) {\n apiErrorHandler(data)\n } else {\n throw new Error(`JAVASCRIPT ERROR: ${error}`)\n }\n}\n\nexport default errorHandler\n","import errorHandler from './error-handler'\n\nexport default errorHandler\n","/**\n * Replace content of DOM elements\n * @param {Object} content - DOM element\n * @param {String} selector - selector to replace with content\n * @param {Boolean} fullReplace - flag indicating whether the element should be replaced in its entirety\n * \n * @return {Void}\n */\nconst replace = function(content, selector, fullReplace) {\n const el = [...document.querySelectorAll(selector)];\n\n el.forEach(item => {\n if (fullReplace) {\n item.outerHTML = content.toString() || '';\n } else {\n item.innerHTML = content.toString() || '';\n }\n });\n};\nexport default replace;\n","import RafThrottle from '@utilities/raf-throttle'\n\nconst installMediaQueryWatcher = (mediaQuery, layoutChangedCallback) => {\n const mql = window.matchMedia(mediaQuery)\n mql.addListener((event) => layoutChangedCallback(event.matches, event.media))\n layoutChangedCallback(mql.matches, mql.media)\n}\n\nconst MEDIA_QUERIES = [\n {\n reference: 'isMobile',\n breakpoint: 320,\n },\n {\n reference: 'isMobilePlus',\n breakpoint: 480,\n },\n {\n reference: 'isTabletPortrait',\n breakpoint: 768,\n },\n {\n reference: 'isTabletLandscape',\n breakpoint: 1024,\n },\n {\n reference: 'isLaptop',\n breakpoint: 1240,\n },\n {\n reference: 'isDesktop',\n breakpoint: 1600,\n },\n {\n reference: 'isWidescreen',\n breakpoint: 1920,\n },\n]\n\nclass ScreenDimensions {\n get screenHeight() {\n return this.height\n }\n\n get screenWidth() {\n return this.width\n }\n\n constructor() {\n RafThrottle.set([\n {\n element: window,\n event: 'resize',\n namespace: 'ScreenDimensionsWidthChange',\n fn: () => this.updateWidth(),\n },\n ])\n\n MEDIA_QUERIES.forEach((mqObject, index) => {\n const { breakpoint } = mqObject\n\n installMediaQueryWatcher(`(min-width: ${breakpoint}px)`, (matches) => {\n this[`${mqObject.reference}AndBigger`] = matches\n })\n\n if (!index) {\n installMediaQueryWatcher(`(max-width: ${breakpoint}px)`, (matches) => {\n this[mqObject.reference] = matches\n })\n } else if (MEDIA_QUERIES[index + 1]) {\n installMediaQueryWatcher(\n `(min-width: ${breakpoint}px) and (max-width: ${\n MEDIA_QUERIES[index + 1].breakpoint - 1\n }px)`,\n (matches) => {\n this[mqObject.reference] = matches\n },\n )\n } else {\n installMediaQueryWatcher(`(min-width: ${breakpoint}px)`, (matches) => {\n this[mqObject.reference] = matches\n })\n }\n })\n\n this.updateWidth()\n }\n\n updateWidth() {\n // eslint-disable-next-line\n ;(this.width = window.innerWidth), (this.height = window.innerHeight)\n }\n}\n\nexport default new ScreenDimensions()\n","/**\n * @shelf-version: 1.1.0\n */\n\nimport ScreenDimensions from './screen-dimensions'\n\nexport default ScreenDimensions\n","import API from '@utilities/api'\nimport { body } from '@utilities/dom-elements'\nimport errorHandler from '@utilities/errors/error-handler'\nimport Events from '@utilities/events'\nimport moduleInit from '@utilities/module-init'\nimport replace from '@utilities/replace'\nimport ScreenDimensions from '@utilities/screen-dimensions'\n\nconst JS_HOOK_PRODUCT_DETAIL_WRAPPER = '[js-hook-product-detail]'\nconst JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER = '[js-hook-image-gallery-wrapper]'\nconst JS_HOOK_PRODUCT_PRICE_WRAPPER = '[js-hook-price]'\nconst JS_HOOK_PRODUCT_BADGES_WRAPPER = '[js-product-badges-wrapper]'\nconst JS_HOOK_PRODUCT_DELIVERY_WRAPPER = '[js-hook-product-delivery-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER = '[js-hook-spare-parts-anchor-link-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER = '[js-hook-spare-parts-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER = '[js-hook-spare-parts-slider-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER = '[js-hook-spare-parts-viewproduct-wrapper]'\nconst JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER = '[js-hook-sidebar-block-wrapper]'\nconst JS_HOOK_PRODUCT_ID = '[js-hook-product-id]'\nconst JS_HOOK_PRODUCT_TITLE = '[js-hook-product-attribute-title]'\nconst JS_HOOK_PRODUCT_SUBTITLE = '[js-hook-product-attribute-subtitle]'\nconst JS_HOOK_PRODUCT_DESIGNERS = '[js-hook-product-designers]'\nconst JS_HOOK_PRODUCT_ACCORDIONS = '[js-hook-product-accordions]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP = '[js-hook-product-attribute-desktop]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE = '[js-hook-product-attribute-mobile]'\nconst JS_HOOK_ADD_TO_CART_BUTTON = '[js-hook-add-to-cart]'\nconst JS_HOOK_ADD_TO_CART_BUTTON_LABEL = '[js-hook-button-label]'\nconst JS_HOOK_OUT_OF_STOCK_BUTTON = '[js-hook-out-of-stock-button]'\nconst JS_HOOK_HELP_ME_CHOOSE_BUTTON = '[js-hook-help-me-choose-button]'\nconst JS_HOOK_SEO_TEXT = '[js-hook-seo-text]'\nconst JS_HOOK_PRODUCT_BREADCRUMB = '[js-hook-product-breadcrumb]'\nconst JS_HOOK_PRODUCT_INCLUDED_BULB = '[js-hook-product-included-bulb]'\nconst JS_HOOK_PRODUCT_SAMPLES = '[js-hook-product-samples-wrapper]'\nconst JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL = '[js-hook-added-to-cart-modal]'\nconst JS_HOOK_PRODUCT_STOCK = '[js-hook-product-stock-wrapper]'\nconst JS_HOOK_MODAL = '[js-hook-modal]'\nconst JS_HOOK_SWATCH_RADIO = '[js-hook-swatch-radio]'\nconst JS_HOOK_COLOR_SWATCH = '[js-hook-color-swatch]'\nconst JS_HOOK_LINKED_PRODUCTS_SLIDER = '[js-hook-linked-products-slider]'\nconst JS_HOOK_RELATED_SLIDER = '[js-hook-related-slider]'\nconst JS_HOOK_PRODUCT_DETAIL_BLOCK = '[js-hook-product-detail-block]'\nconst PRODUCT_DETAIL_CLASS = '.c-product-detail'\nconst JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA = '[js-hook-product-designers-content-area]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_DATA = '[js-hook-product-add-to-cart-data]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA = '[add-to-cart-modal-data]'\n// const JS_HOOK_STICKY_BUTTON = '[js-hook-product-detail-sticky-button]';\n\nconst SLIDER_HIDDEN = 'slider--hidden'\nconst ON_ORDER_SECTION = '.fl-onorder-section';\nconst ADD_TO_CART_SECTION = '.fl-addtocart-section';\n\nclass ProductAttribute {\n constructor(element) {\n this.element = element\n\n this.setUI()\n this.bindEvents()\n }\n\n static updateHistory(url) {\n Events.$trigger('history::push', {\n data: {\n url,\n state: {\n productChange: true,\n },\n },\n })\n }\n\n /**\n * @param available is map from product object. False or true\n * @param readyToOrder is map from product object. Default value false\n */\n static shouldShowAddToCart(available, readyToOrder = false) {\n return available && readyToOrder\n }\n\n static updatePrices({ priceHtml: price }) {\n replace(price, JS_HOOK_PRODUCT_PRICE_WRAPPER)\n }\n\n static updateBadges({ badgesHtml: badges }) {\n replace(badges, JS_HOOK_PRODUCT_BADGES_WRAPPER)\n }\n\n static updateDelivery({ deliveryHtml: delivery }) {\n replace(delivery, JS_HOOK_PRODUCT_DELIVERY_WRAPPER)\n }\n\n static updateImageGallery({ imageGridHtml: imageGallery }) {\n replace(imageGallery, JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER, true)\n }\n\n static updateProductID({ id: pid }) {\n replace(pid, `${JS_HOOK_PRODUCT_ID}`)\n }\n\n static updateProductTitle(productName) {\n replace(productName, `${JS_HOOK_PRODUCT_TITLE}`)\n document.title = productName\n }\n\n static updateProductSubTitle(productSubTitle) {\n replace(productSubTitle, `${JS_HOOK_PRODUCT_SUBTITLE}`)\n }\n\n static updateProductDesigners({ designersHtml }) {\n replace(designersHtml, `${JS_HOOK_PRODUCT_DESIGNERS}`)\n }\n\n static updateProductAccordions({ accordionsHtml }) {\n replace(accordionsHtml, `${JS_HOOK_PRODUCT_ACCORDIONS}`)\n }\n\n static updateSeoText({ longDescription }) {\n replace(longDescription, `${JS_HOOK_SEO_TEXT}`)\n }\n\n static updateAttributesDesktop({ variationAttributesDesktopHtml: attributes }) {\n replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP}`)\n }\n\n static updateAttributesMobile({ variationAttributesMobileHtml: attributes }) {\n replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE}`)\n }\n\n static updateProductBreadcrumb({ breadcrumbHtml }) {\n replace(breadcrumbHtml, `${JS_HOOK_PRODUCT_BREADCRUMB}`)\n }\n\n static updateIncludedBulb({ includedBulbHtml }) {\n replace(includedBulbHtml, `${JS_HOOK_PRODUCT_INCLUDED_BULB}`)\n }\n\n static updateProductSamples({ productSamplesHtml }) {\n replace(productSamplesHtml, `${JS_HOOK_PRODUCT_SAMPLES}`)\n }\n\n static updateProductAddedToCartModal({ addedToCartModalHtml }) {\n replace(addedToCartModalHtml, `${JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL}`)\n }\n\n static updateProductStock({ productStockHtml }) {\n replace(productStockHtml, `${JS_HOOK_PRODUCT_STOCK}`)\n }\n\n static updateSparePartsAnchor({ sparePartsAnchorHtml }) {\n replace(sparePartsAnchorHtml, JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER)\n }\n\n static updateSparePartsList({ sparePartsListHtml }) {\n replace(sparePartsListHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER}`)\n }\n\n static updateSparePartsSlider({ sparePartsSliderHtml }) {\n replace(sparePartsSliderHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER}`)\n }\n\n static updateSparePartsViewProductButton({ sparePartsViewProductHtml }) {\n replace(sparePartsViewProductHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER}`)\n }\n\n static updateDesignersContentArea({ designersContentArea }) {\n const designersContentAreaHook = document.querySelector(JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA)\n if (designersContentAreaHook) {\n replace(designersContentArea, `${JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA}`)\n }\n }\n\n static updateProductDetailBlock({ productDetailBlock }) {\n replace(productDetailBlock, `${JS_HOOK_PRODUCT_DETAIL_BLOCK}`)\n }\n\n static updateLinkedProductsSlider({ linkedProductsSliderHtml }) {\n const linkedProducts = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n\n if (linkedProducts) {\n replace(linkedProductsSliderHtml, `${JS_HOOK_LINKED_PRODUCTS_SLIDER}`)\n\n const ajaxProductTiles = [...linkedProducts.querySelectorAll('.ajax-product-tile')]\n\n if (ajaxProductTiles) {\n const promises = []\n\n ajaxProductTiles.forEach((ajaxProductTile) => {\n const { productTileUrl } = ajaxProductTile.dataset\n\n if (productTileUrl) {\n const promise = API.get(productTileUrl)\n .then((response) => {\n if (response.data) ajaxProductTile.innerHTML = response.data\n })\n .catch((error) => {\n console.info(error)\n })\n\n promises.push(promise)\n }\n })\n\n Promise.all(promises)\n .then(() => {\n moduleInit.async('[js-hook-basic-slider]', () =>\n import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n )\n })\n .catch((error) => {\n console.info(error)\n })\n } else {\n moduleInit.async('[js-hook-basic-slider]', () =>\n import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n )\n }\n }\n }\n\n static updateSidebarBlock(data) {\n replace(data, `${JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER}`)\n }\n\n static getPromoPage({ pdpSidebarBlockId }) {\n const sidebarBlockWrapperDataset = document.querySelector(JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER)\n if (sidebarBlockWrapperDataset) {\n const { sidebarUrl } = sidebarBlockWrapperDataset.dataset\n\n if (pdpSidebarBlockId) {\n API.get(sidebarUrl + pdpSidebarBlockId)\n .then((response) => {\n ProductAttribute.updateSidebarBlock(response.data)\n })\n .catch((error) => {\n console.info(error)\n ProductAttribute.updateSidebarBlock('')\n })\n } else {\n ProductAttribute.updateSidebarBlock('')\n }\n }\n }\n\n static updatePdpSlider(product) {\n const relatedSlider = document.querySelector(JS_HOOK_RELATED_SLIDER)\n const recommendedSlider = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n const crossSelling = product.crossSellingProductRecommendations\n\n if (recommendedSlider && relatedSlider) {\n recommendedSlider.classList[crossSelling.show ? 'remove' : 'add'](SLIDER_HIDDEN)\n relatedSlider.classList[crossSelling.show ? 'add' : 'remove'](SLIDER_HIDDEN)\n }\n }\n\n setAddToCartButton(id) {\n this.ui.onOrderSections.forEach((section) => {\n section.classList.add('d-none');\n });\n this.ui.addToCartSections.forEach((section) => {\n section.classList.remove('d-none');\n });\n this.ui.helpMeChooseButtons.forEach((section) => {\n section.classList.remove('d-none');\n });\n this.ui.addToCartButtons.forEach((button) => {\n button.setAttribute('data-pid', id)\n });\n }\n\n setGoToStoreButton() {\n this.ui.onOrderSections.forEach((section) => {\n section.classList.remove('d-none');\n });\n this.ui.helpMeChooseButtons.forEach((section) => {\n section.classList.add('d-none');\n });\n this.ui.addToCartSections.forEach((section) => {\n section.classList.add('d-none');\n });\n }\n\n setDiscontinuedButton() {\n this.ui.onOrderSections.forEach((section) => {\n section.classList.add('d-none');\n });\n this.ui.helpMeChooseButtons.forEach((section) => {\n section.classList.add('d-none');\n });\n this.ui.addToCartSections.forEach((section) => {\n section.classList.add('d-none');\n });\n }\n\n rebindEvents() {\n // Fire Event to Update Images\n Events.$trigger('lazyimage::update')\n\n Events.$trigger('in-view::update')\n Events.$trigger('events::dom-reinit')\n Events.$trigger('scroll-to::reinit-elements')\n\n this.bindModals()\n\n this.bindSelectEvents()\n this.bindSwatchEvents()\n this.bindRadioEvents()\n }\n\n static initModules() {\n moduleInit.async('[js-hook-product-attribute]', () =>\n import(/* webpackChunkName: \"js/ProductAttribute\" */ '@components/product-attribute'),\n )\n\n moduleInit.async('[js-hook-custom-select-box]', () =>\n import(/* webpackChunkName: \"js/CustomSelectBox\" */ '@components/custom-select-box'),\n )\n\n moduleInit.async('[js-hook-accordion]', () =>\n import(/* webpackChunkName: \"js/Accordion\" */ '@components/accordion'),\n )\n\n moduleInit.async('[js-hook-high-res-image-gallery]', () =>\n import(/* webpackChunkName: \"js/HighResImageGallery\" */ '@components/high-res-image-gallery'),\n )\n\n moduleInit.async('[js-hook-image-zoom]', () =>\n import(/* webpackChunkName: \"js/ImageZoom\" */ '@components/image-zoom'),\n )\n\n moduleInit.async('[js-hook-image-modal]', () =>\n import(/* webpackChunkName: \"js/ImageModal\" */ '@components/image-modal'),\n )\n\n moduleInit.async('[js-hook-product-sample-modal-toggle]', () =>\n import(\n /* webpackChunkName: \"js/ProductSampleModalToggle\" */ '@components/product-sample-modal-toggle'\n ),\n )\n\n moduleInit.async('[js-hook-product-sample-form]', () =>\n import(/* webpackChunkName: \"js/ProductSampleForm\" */ '@components/product-sample-form'),\n )\n\n moduleInit.async('[js-hook-add-to-cart]', () =>\n import(/* webpackChunkName: \"js/AddToCart\" */ '@components/add-to-cart'),\n )\n\n moduleInit.async('[js-hook-go-to-stores]', () =>\n import(/* webpackChunkName: \"js/GoToStore\" */ '@components/go-to-stores'),\n )\n\n moduleInit.async('[js-hook-toggle]', () =>\n import(/* webpackChunkName: \"js/Toggle\" */ '@components/toggle'),\n )\n }\n\n static updateGTMAddToCartGA(productAddToCartGTMDataHTML) {\n if (productAddToCartGTMDataHTML) {\n const addToCartDataElement = document.querySelector(JS_HOOK_PRODUCT_ADD_TO_CART_DATA)\n\n if (addToCartDataElement) addToCartDataElement.outerHTML = productAddToCartGTMDataHTML\n }\n }\n\n static updateGTMAddToCartGAModalButtonData(addTocartGAData) {\n if (addTocartGAData) {\n const addToCartModalDataElements = document.querySelectorAll(\n JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA,\n )\n\n if (addToCartModalDataElements) {\n for (let index = 0; index < addToCartModalDataElements.length; index++) {\n const addToCartModalDataElement = addToCartModalDataElements[index]\n\n addToCartModalDataElement.dataset.gtmObj = addTocartGAData.gtmAddToCart\n addToCartModalDataElement.dataset.ga4Obj = addTocartGAData.gtmAddToCartGA\n }\n }\n }\n }\n\n static updateGTMViewItemData(viewItemData) {\n if (viewItemData) {\n window.ga4Data = JSON.parse(viewItemData)\n\n Events.$trigger('gtm::push', { data: { ecommerce: null } })\n Events.$trigger('gtm::push', { data: window.ga4Data })\n }\n }\n\n setUI() {\n this.ui = {\n selects: [...this.element.querySelectorAll('select')],\n swatches: [...this.element.querySelectorAll(JS_HOOK_COLOR_SWATCH)],\n radios: [...this.element.querySelectorAll(JS_HOOK_SWATCH_RADIO)],\n productDetail: document.querySelector(PRODUCT_DETAIL_CLASS),\n addToCartSections: [...document.querySelectorAll(ADD_TO_CART_SECTION)],\n onOrderSections: [...document.querySelectorAll(ON_ORDER_SECTION)],\n addToCartButtons: [...document.querySelectorAll(JS_HOOK_ADD_TO_CART_BUTTON)],\n addToCartButtonLabels: [\n ...document.querySelectorAll(\n `${JS_HOOK_ADD_TO_CART_BUTTON} ${JS_HOOK_ADD_TO_CART_BUTTON_LABEL}`,\n ),\n ],\n helpMeChooseButtons: [...document.querySelectorAll(JS_HOOK_HELP_ME_CHOOSE_BUTTON)],\n outOfStockButtons: [...document.querySelectorAll(JS_HOOK_OUT_OF_STOCK_BUTTON)],\n }\n }\n\n updateButtonLabel({ buttonLabel }) {\n this.ui.addToCartButtonLabels.forEach((label) => {\n label.innerText = buttonLabel\n });\n }\n\n updateButton({ id, available, availability }) {\n if (available) {\n this.setAddToCartButton(id)\n } else if (availability.onOrder) {\n this.setGoToStoreButton()\n } else if (availability.discontinued) {\n this.setDiscontinuedButton()\n }\n }\n\n bindSelectEvents() {\n this.ui.selects.forEach((select) => {\n select.addEventListener('change', (e) => this.onChangeHandler(e))\n })\n }\n\n bindRadioEvents() {\n this.ui.radios.forEach((radio) => {\n radio.addEventListener('change', (e) => this.onChangeHandler(e))\n })\n }\n\n bindSwatchEvents() {\n this.ui.swatches.forEach((swatch) => {\n swatch.addEventListener('click', (e) => this.onClickHandler(e))\n })\n }\n\n // eslint-disable-next-line class-methods-use-this\n bindModals() {\n const productDetailWrapper = document.querySelector(JS_HOOK_PRODUCT_DETAIL_WRAPPER)\n\n if (!productDetailWrapper) return\n\n const modals = [...productDetailWrapper.querySelectorAll(JS_HOOK_MODAL)]\n\n modals.forEach((modal) => {\n const modalId = modal.id\n\n Events.$trigger('modal::bind', { data: modalId })\n })\n }\n\n /**\n * Binds events\n */\n bindEvents() {\n this.bindSelectEvents()\n this.bindSwatchEvents()\n this.bindRadioEvents()\n\n window.addEventListener('popstate', () => {\n // todo: extend updateHTML to variant selects + reinit events\n // instead of reloading page\n // this.getContent(document.location.href);\n window.location.reload()\n })\n }\n\n getContent(url) {\n Events.$trigger('loader::show')\n\n API.get(url)\n .then((response) => this.getContentSuccess(response.data))\n .catch((error) => errorHandler(error))\n }\n\n updateHtml(product, productAddToCartGTMDataHTML) {\n if (product.masterName) {\n ProductAttribute.updateProductTitle(product.masterName)\n ProductAttribute.updateProductSubTitle(product.productName)\n } else {\n ProductAttribute.updateProductTitle(product.productName)\n }\n\n ProductAttribute.updateImageGallery(product)\n ProductAttribute.updatePrices(product)\n ProductAttribute.updateBadges(product)\n ProductAttribute.updateDelivery(product)\n ProductAttribute.updateProductID(product)\n ProductAttribute.updateProductDesigners(product)\n ProductAttribute.updateProductAccordions(product)\n ProductAttribute.updateSeoText(product)\n ProductAttribute.updateAttributesDesktop(product)\n ProductAttribute.updateAttributesMobile(product)\n ProductAttribute.updateProductBreadcrumb(product)\n ProductAttribute.updateIncludedBulb(product)\n ProductAttribute.updateProductSamples(product)\n ProductAttribute.updateProductAddedToCartModal(product)\n ProductAttribute.updateProductStock(product)\n ProductAttribute.updateSparePartsAnchor(product)\n ProductAttribute.updateSparePartsList(product)\n ProductAttribute.updateSparePartsSlider(product)\n ProductAttribute.updateSparePartsViewProductButton(product)\n ProductAttribute.updateLinkedProductsSlider(product)\n ProductAttribute.updateDesignersContentArea(product)\n ProductAttribute.updateProductDetailBlock(product)\n\n ProductAttribute.updatePdpSlider(product)\n\n ProductAttribute.getPromoPage(product)\n\n ProductAttribute.updateGTMAddToCartGA(productAddToCartGTMDataHTML)\n\n this.updateButtonLabel(product)\n this.updateButton(product)\n\n this.setUI()\n\n // Bind events again to new DOM elements\n this.rebindEvents()\n ProductAttribute.initModules()\n\n Events.$trigger('loader::hide')\n }\n\n // eslint-disable-next-line class-methods-use-this\n updateBundleIds(productBundleIds, product) {\n if (productBundleIds) {\n const productDetails = document.querySelector(PRODUCT_DETAIL_CLASS)\n productDetails.dataset.bundledProductIds = productBundleIds\n productDetails.dataset.baseProductId = `${product.id || ''}`\n Events.$trigger('product::specsheet')\n }\n }\n\n getContentSuccess(data) {\n const { product } = data\n const { productAddToCartGTMDataHTML } = data\n const { recommendedBulbsObj } = data\n const { gtmViewItem } = data\n const { bundledProductIds } = data\n\n if (!product) {\n throw new Error('No product data found')\n }\n\n ProductAttribute.updateHistory(product.selectedProductUrl)\n this.updateHtml(product, productAddToCartGTMDataHTML)\n this.updateBundleIds(bundledProductIds, product)\n\n ProductAttribute.updateGTMAddToCartGAModalButtonData(recommendedBulbsObj)\n ProductAttribute.updateGTMViewItemData(gtmViewItem)\n\n if (!ScreenDimensions.isTabletLandscapeAndBigger) {\n Events.$trigger('scroll-to::scroll', {\n data: {\n target: body,\n offset: 0,\n },\n })\n }\n }\n\n onChangeHandler(e) {\n let data = e.target.dataset\n if (e.target.nodeName === 'SELECT') {\n data = e.target.options[e.target.selectedIndex].dataset\n }\n\n if (!data.url) return\n\n this.getContent(data.url)\n }\n\n onClickHandler(e) {\n const data = e.target.parentElement.dataset;\n if (!data.url) return\n\n this.getContent(data.url)\n }\n}\n\nexport default ProductAttribute\n","/**\n * @shelf-version: 1.1.0\n */\n\nimport ProductAttribute from './product-attribute';\n\nexport default ProductAttribute;\n"],"sourceRoot":""}