{"version":3,"file":"index-1c703fc3.js","sources":["../../../../src/scripts/react-components/product-masthead/image-gallery.tsx","../../../../src/scripts/react-components/product-masthead/index.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\nimport { Swiper as SwiperModule, SwiperSlide } from 'swiper/react';\nimport Swiper, { FreeMode, Navigation, Thumbs } from 'swiper';\nimport 'swiper/css';\nimport 'swiper/css/navigation';\nimport 'swiper/css/free-mode';\nimport 'swiper/css/thumbs';\nimport { createDataLayerString } from '../../helpers/helpers';\nimport { BREAKPOINTS } from '../../helpers/breakpoints';\n\ntype ImageGalleryProps = {\n images: {\n media_type: string;\n media_url: string;\n alt_text: string;\n }[];\n nextLabel: string;\n prevLabel: string;\n productHeading: string;\n category: string;\n};\n\nexport const ImageGallery = ({\n images,\n nextLabel,\n prevLabel,\n productHeading,\n category\n}: ImageGalleryProps) => {\n const [thumbsSwiper, setThumbsSwiper] = useState<Swiper | null>(null);\n const [swiper, setSwiper] = useState<Swiper | null>(null);\n const nextButton = useRef(null);\n const backButton = useRef(null);\n\n const handleThumbsUpdate = () => {\n if (swiper?.realIndex) {\n thumbsSwiper?.slideTo(swiper.realIndex);\n }\n };\n\n return (\n <>\n <div className=\"product-masthead__image\">\n <SwiperModule\n spaceBetween={10}\n navigation={{\n nextEl: nextButton.current,\n prevEl: backButton.current\n }}\n onSwiper={swiper => setSwiper(swiper)}\n onSlideChange={() => {\n handleThumbsUpdate();\n }}\n thumbs={{ swiper: thumbsSwiper }}\n modules={[FreeMode, Navigation, Thumbs]}\n >\n {images.map((image, index) => (\n <SwiperSlide key={index}>\n <picture>\n <source\n srcSet={`${image.media_url}?width=616`}\n media={`(min-width: ${BREAKPOINTS.desktop - 1}px)`}\n />\n <source\n srcSet={`${image.media_url}?width=558`}\n media={`(min-width: ${BREAKPOINTS.tablet - 1}px)`}\n />\n <img\n src={`${image.media_url}?width=686`}\n alt={image.alt_text}\n width=\"686\"\n height=\"686\"\n />\n </picture>\n </SwiperSlide>\n ))}\n </SwiperModule>\n <button\n ref={backButton}\n className=\"swiper-button-prev\"\n aria-label={prevLabel || 'previous slide'}\n title={prevLabel || 'previous slide'}\n data-layer={createDataLayerString([\n {\n event: 'product_click',\n event_category: 'product',\n event_action: 'gallery',\n event_label: 'previous arrow',\n event_attributes: {\n product_name: productHeading,\n product_category: category\n }\n }\n ])}\n ></button>\n\n <button\n ref={nextButton}\n className=\"swiper-button-next\"\n aria-label={nextLabel || 'next slide'}\n title={nextLabel || 'next slide'}\n data-layer={createDataLayerString([\n {\n event: 'product_click',\n event_category: 'product',\n event_action: 'gallery',\n event_label: 'next arrow',\n event_attributes: {\n product_name: productHeading,\n product_category: category\n }\n }\n ])}\n ></button>\n </div>\n <div className=\"product-masthead__thumbs-wrapper\">\n <SwiperModule\n onSwiper={swiper => setThumbsSwiper(swiper)}\n initialSlide={0}\n slidesPerGroup={1}\n spaceBetween={20}\n slidesPerView={4}\n freeMode={true}\n watchSlidesProgress={true}\n modules={[FreeMode, Navigation, Thumbs]}\n className=\"product-masthead__thumbs\"\n >\n {images.map((image, index) => (\n <SwiperSlide key={index}>\n <button\n onClick={() => swiper?.slideTo(index)}\n data-layer={createDataLayerString([\n {\n event: 'product_click',\n event_category: 'product',\n event_action: 'gallery',\n event_label: 'thumbnail',\n event_attributes: {\n product_name: productHeading,\n product_category: 'Shingle'\n }\n }\n ])}\n >\n <picture>\n <source\n srcSet={`${image.media_url}?width=137`}\n media={`(min-width: ${BREAKPOINTS.wide - 1}px)`}\n />\n <source\n srcSet={`${image.media_url}?width=122`}\n media={`(min-width: ${BREAKPOINTS.tabletLandscape - 1}px)`}\n />\n <source\n srcSet={`${image.media_url}?width=98`}\n media={`(min-width: ${BREAKPOINTS.tablet - 1}px)`}\n />\n <img\n src={`${image.media_url}?width=165`}\n alt={image.alt_text}\n width=\"165\"\n height=\"165\"\n loading=\"lazy\"\n />\n </picture>\n </button>\n </SwiperSlide>\n ))}\n </SwiperModule>\n </div>\n </>\n );\n};\n\nexport default ImageGallery;\n","import React, { useEffect, useState } from 'react';\nimport IconItem from './icon-item';\nimport ImageGallery from './image-gallery';\nimport { BREAKPOINTS } from '../../helpers/breakpoints';\nimport { useDebounce } from '../../helpers/debounce';\nimport { createDataLayerString, makeSuperScript } from '../../helpers/helpers';\nimport {\n ExtendedWindowType,\n MediaType,\n ProductMastheadResponseType,\n VariantOptionType\n} from '../../helpers/global-types';\n\ntype ProductMastheadProps = {\n nextLabel: string;\n prevLabel: string;\n selectDefault: string;\n defaultImage: string;\n};\n\nconst ProductMasthead = ({\n nextLabel,\n prevLabel,\n selectDefault,\n defaultImage\n}: ProductMastheadProps) => {\n const [data, setData] = useState<ProductMastheadResponseType>();\n const [error, setError] = useState(false);\n const [isTablet, setIsTablet] = useState(\n window.matchMedia(`(max-width: ${BREAKPOINTS.tablet - 2}px)`).matches\n );\n const [displayImages, setDisplayImages] = useState<MediaType[]>([]);\n const [selectedAttributes, setSelectedAttributes] = useState<\n VariantOptionType[]\n >([]);\n const [secondLevelOptions, setSecondLevelOptions] = useState<\n VariantOptionType[]\n >([]);\n const [manualUpdate, setManualUpdate] = useState(false);\n const [personalizeButtons, setPersonalizeButtons] = useState('');\n const selectOption = {\n id: 'default',\n label: selectDefault,\n products: []\n };\n\n const getVariantAvailable = (index: number, option: VariantOptionType) => {\n if (index === 1 && selectedAttributes[1]?.id === 'default') {\n return true;\n }\n\n const sameProducts = selectedAttributes[index]?.products.filter(value =>\n option.products.includes(value)\n );\n\n if (sameProducts?.length > 0) {\n return true;\n }\n return false;\n };\n\n const handleDefaultSelectedAttributes = () => {\n if (data?.defaultVariation !== '') {\n const selectedVariation = data?.pid_attribute_option_index.find(\n item => item.magento_product_id === data?.defaultVariation\n );\n if (selectedVariation) {\n const selectedOptions: VariantOptionType[] = [];\n data?.variants.forEach(variant => {\n const correspondingVariant =\n selectedVariation.attribute_option_items.find(\n attributeOption => attributeOption.attribute_id === variant.id\n );\n if (correspondingVariant) {\n const selectedOption = variant.options.find(\n opt => opt.id === correspondingVariant.option_id\n );\n if (selectedOption) {\n selectedOptions.push(selectedOption);\n }\n }\n });\n\n if (selectedOptions.length === 0) {\n data?.variants.forEach(variant => {\n selectedOptions.push(variant.options[0]);\n });\n }\n\n setSelectedAttributes(selectedOptions);\n }\n } else {\n const selectedOptions: VariantOptionType[] = [];\n data?.variants.forEach(variant => {\n selectedOptions.push(variant.options[0]);\n });\n\n setSelectedAttributes(selectedOptions);\n }\n };\n\n const handleChangeSelected = () => {\n if (data?.variants && data?.variants.length > 1) {\n getSecondLevelOptions(data?.variants[1].options as VariantOptionType[]);\n data?.variants[1].options.find(option => {\n if (secondLevelOptions.length > 6) {\n setSelectedAttributes(prev => {\n prev.pop();\n prev.push(selectOption);\n return [...prev];\n });\n } else if (getVariantAvailable(0, option)) {\n setSelectedAttributes(prev => {\n prev.pop();\n prev.push(option);\n return [...prev];\n });\n return true;\n }\n return false;\n });\n }\n };\n\n const handleAdditionalStates = (index: number, option: VariantOptionType) => {\n let classes = '';\n if (selectedAttributes[index]?.id === option.id) {\n classes = 'product-masthead__option--active';\n }\n\n if (index === 0 && data?.variants.length && data?.variants.length > 1) {\n if (!getVariantAvailable(1, option)) {\n classes = 'product-masthead__option--not-available';\n }\n }\n\n return classes;\n };\n\n const handleDisplayMedia = () => {\n const mapping = data?.pid_attribute_option_index;\n const id = mapping?.find(item => {\n return data?.variants.every((variant, index) => {\n const selProduct = item.attribute_option_items.find(\n option =>\n option.attribute_id === variant.id &&\n selectedAttributes[index].id === option.option_id\n );\n return selProduct;\n });\n });\n\n const mediaImage = data?.mediaVariants.find(mediaVariant => {\n if (mediaVariant.magento_product_id === id?.magento_product_id) {\n if (mediaVariant.media.length > 0) {\n return mediaVariant;\n }\n }\n return false;\n });\n if (!mediaImage && data?.productDescription?.defaultImages) {\n if (data?.productDescription?.defaultImages.length > 0) {\n setDisplayImages(data?.productDescription.defaultImages);\n } else {\n setDisplayImages(JSON.parse(defaultImage));\n }\n } else if (!mediaImage) {\n setDisplayImages(JSON.parse(defaultImage));\n } else {\n setDisplayImages(mediaImage.media);\n }\n\n if (data?.variants && data?.variants.length > 1)\n getSecondLevelOptions(data?.variants[1].options as VariantOptionType[]);\n };\n\n const getSecondLevelOptions = (options: VariantOptionType[]) => {\n const displaySecondLvlOptions: VariantOptionType[] = [];\n\n if (selectedAttributes[0]) {\n options.forEach(option => {\n if (getVariantAvailable(0, option)) {\n displaySecondLvlOptions.push(option);\n }\n });\n }\n if (displaySecondLvlOptions.length > 6) {\n displaySecondLvlOptions.unshift(selectOption);\n }\n setSecondLevelOptions(displaySecondLvlOptions);\n };\n\n useEffect(() => {\n if (\n !secondLevelOptions.find(\n option => option.id === selectedAttributes[1]?.id\n )\n ) {\n handleChangeSelected();\n }\n }, [secondLevelOptions]);\n\n const handleResize = useDebounce(() => {\n const tabletMatch = window.matchMedia(\n `(max-width: ${BREAKPOINTS.tablet - 2}px)`\n ).matches;\n if (isTablet !== tabletMatch) {\n setIsTablet(prev => !prev);\n }\n }, 100);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n\n let observer: MutationObserver;\n\n const targetNode = document.querySelector('.personalize-buttons');\n\n if (targetNode) {\n const targetInnerHtml = targetNode.innerHTML;\n\n setPersonalizeButtons(targetInnerHtml);\n\n const config = { attributes: true, childList: true, subtree: true };\n\n const callback = (mutationList: MutationRecord[]) => {\n for (const mutation of mutationList) {\n if (mutation.type === 'childList') {\n setPersonalizeButtons(targetNode.innerHTML);\n }\n }\n };\n\n observer = new MutationObserver(callback);\n observer.observe(targetNode, config);\n }\n\n const newData = (window as ExtendedWindowType).mastheadData;\n\n if (newData) {\n setData((window as ExtendedWindowType).mastheadData);\n } else {\n setError(true);\n }\n\n return () => {\n window.removeEventListener('resize', handleResize);\n\n if (observer) observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n if (data) {\n handleDefaultSelectedAttributes();\n }\n }, [data]);\n\n useEffect(() => {\n if (!manualUpdate) {\n handleDisplayMedia();\n } else {\n setManualUpdate(false);\n }\n }, [selectedAttributes]);\n\n const renderFirstLevelOptions = (\n options: VariantOptionType[],\n heading: string\n ) => {\n if (options.length > 6) {\n return (\n <div className=\"product-masthead__select-wrapper\">\n <select\n className=\"product-masthead__select\"\n onChange={e => {\n (window as ExtendedWindowType).dataLayer.push({\n event: 'product_click',\n event_category: 'product',\n event_action: 'variant selection',\n event_label: heading,\n event_attributes: {\n product_name: data?.productDescription?.heading,\n product_category: data?.productDescription?.icon?.label,\n average_rating: null\n }\n });\n const selOption = options.find(\n option => option.id === e.currentTarget.value\n );\n if (selOption) {\n setSelectedAttributes(prev => {\n prev.shift();\n prev.unshift(selOption);\n return [...prev];\n });\n }\n }}\n value={selectedAttributes[0]?.id}\n >\n {options.map(option => (\n <option\n className=\"product-masthead__select-option\"\n key={option.id}\n value={option.id}\n >\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n } else {\n return (\n <>\n {options.map(option => (\n <button\n className={`product-masthead__option ${handleAdditionalStates(\n 0,\n option\n )}`}\n onClick={() => {\n (window as ExtendedWindowType).dataLayer.push({\n event: 'product_click',\n event_category: 'product',\n event_action: 'variant selection',\n event_label: heading,\n event_attributes: {\n product_name: data?.productDescription.heading,\n product_category: data?.productDescription?.icon?.label,\n average_rating: null\n }\n });\n setSelectedAttributes(prev => {\n prev.shift();\n prev.unshift(option);\n return [...prev];\n });\n }}\n key={option.id}\n >\n {option.label}\n </button>\n ))}\n </>\n );\n }\n };\n const renderSecondLevelOptions = (heading: string) => {\n if (secondLevelOptions.length > 6) {\n return (\n <div className=\"product-masthead__select-wrapper\">\n <select\n className=\"product-masthead__select\"\n onChange={e => {\n (window as ExtendedWindowType).dataLayer.push({\n event: 'product_click',\n event_category: 'product',\n event_action: 'variant selection',\n event_label: heading,\n event_attributes: {\n product_name: data?.productDescription.heading,\n product_category: data?.productDescription?.icon?.label,\n average_rating: null\n }\n });\n const selOption = secondLevelOptions.find(\n option => option.id === e.currentTarget.value\n );\n if (selOption) {\n setSelectedAttributes(prev => {\n prev.pop();\n prev.push(selOption);\n return [...prev];\n });\n }\n }}\n value={selectedAttributes[1]?.id}\n >\n {secondLevelOptions.map(option => (\n <option\n className=\"product-masthead__select-option\"\n value={option.id}\n key={option.id}\n >\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n } else {\n return secondLevelOptions.map(option => (\n <button\n className={`product-masthead__option ${handleAdditionalStates(\n 1,\n option\n )}`}\n onClick={() => {\n (window as ExtendedWindowType).dataLayer.push({\n event: 'product_click',\n event_category: 'product',\n event_action: 'variant selection',\n event_label: heading,\n event_attributes: {\n product_name: data?.productDescription?.heading,\n product_category: data?.productDescription?.icon?.label,\n average_rating: null\n }\n });\n setSelectedAttributes(prev => {\n prev.pop();\n prev.push(option);\n return [...prev];\n });\n }}\n key={option.id}\n >\n {option.label}\n </button>\n ));\n }\n };\n\n if (error) {\n return <p>Error on loading</p>;\n }\n\n return (\n <div className=\"product-masthead__wrapper row\">\n {!isTablet && (\n <div className=\"product-masthead__swiper\">\n <ImageGallery\n images={displayImages}\n nextLabel={nextLabel}\n prevLabel={prevLabel}\n productHeading={data?.productDescription?.heading || ''}\n category={data?.productDescription?.icon?.label || ''}\n />\n </div>\n )}\n <div className=\"product-masthead__content\">\n <div className=\"product-masthead__top-content\">\n {data?.productDescription?.icon && (\n <IconItem\n src={data?.productDescription?.icon.src}\n label={data?.productDescription?.icon?.label}\n />\n )}\n <div className=\"product-masthead__info\">\n <h1\n className=\"product-masthead__heading rtf--inline\"\n dangerouslySetInnerHTML={{\n __html: makeSuperScript(\n data?.productDescription?.heading as string\n ) as string\n }}\n />\n <div\n className=\"product-masthead__description\"\n dangerouslySetInnerHTML={{\n __html: makeSuperScript(\n data?.productDescription.description as string\n ) as string\n }}\n />\n </div>\n {personalizeButtons && (\n <div\n className=\"product-masthead__button-row\"\n dangerouslySetInnerHTML={{ __html: personalizeButtons }}\n ></div>\n )}\n </div>\n {isTablet ? (\n <div className=\"product-masthead__swiper\">\n <ImageGallery\n images={displayImages}\n nextLabel={nextLabel}\n prevLabel={prevLabel}\n productHeading={data?.productDescription?.heading || ''}\n category={data?.productDescription?.icon?.label || ''}\n />\n </div>\n ) : null}\n\n {data?.variants?.map((variant, index) => (\n <div className=\"product-masthead__variant\" key={variant.id}>\n <p className=\"product-masthead__variant-heading\">{variant.label}</p>\n <div className=\"product-masthead__variant-wrapper\">\n {index === 0 &&\n renderFirstLevelOptions(variant.options, variant.label)}\n {index === 1 && <>{renderSecondLevelOptions(variant.label)}</>}\n </div>\n </div>\n ))}\n\n {data?.productDescription?.documentQuickLinks?.length &&\n data?.productDescription?.documentQuickLinks?.length > 0 ? (\n <div>\n <p className=\"product-masthead__variant-heading\">\n {data?.productDescription.documentQuickLinksLabel}\n </p>\n <div className=\"product-masthead__button-row\">\n {data?.productDescription.documentQuickLinks?.map(link => {\n if (link.type === 'link') {\n return (\n <a\n key={link.label}\n href={link.url}\n className=\"link link--arrow\"\n target=\"_blank\"\n >\n <span>{link.label}</span>\n </a>\n );\n } else if (link.type === 'download') {\n return (\n <a\n target=\"_blank\"\n key={link.label}\n href={link.url}\n className=\"link link--download\"\n download={true}\n data-layer={createDataLayerString([\n {\n event_category: 'document interactions',\n event_attributes: {\n custom_file_name: link.label\n },\n event: 'file_download_click',\n event_action: 'file download click'\n }\n ])}\n >\n <span>{link.label}</span>\n </a>\n );\n } else if (link.type === 'external') {\n return (\n <a\n key={link.label}\n href={link.url}\n className=\"link link--external\"\n target=\"_blank\"\n data-layer={createDataLayerString([\n {\n event_category: 'outbound link',\n event: 'outbound_link_click'\n }\n ])}\n >\n <span>{link.label}</span>\n </a>\n );\n }\n return null;\n })}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n};\nexport default ProductMasthead;\n"],"names":["ImageGallery","images","nextLabel","prevLabel","productHeading","category","thumbsSwiper","setThumbsSwiper","useState","swiper","setSwiper","nextButton","useRef","backButton","handleThumbsUpdate","React","SwiperModule","FreeMode","Navigation","Thumbs","image","index","SwiperSlide","BREAKPOINTS","createDataLayerString","ProductMasthead","selectDefault","defaultImage","data","setData","error","setError","isTablet","setIsTablet","displayImages","setDisplayImages","selectedAttributes","setSelectedAttributes","secondLevelOptions","setSecondLevelOptions","manualUpdate","setManualUpdate","personalizeButtons","setPersonalizeButtons","selectOption","getVariantAvailable","option","_a","sameProducts","_b","value","handleDefaultSelectedAttributes","selectedVariation","item","selectedOptions","variant","correspondingVariant","attributeOption","selectedOption","opt","handleChangeSelected","getSecondLevelOptions","prev","handleAdditionalStates","classes","handleDisplayMedia","mapping","id","mediaImage","mediaVariant","options","displaySecondLvlOptions","useEffect","handleResize","useDebounce","tabletMatch","observer","targetNode","targetInnerHtml","config","callback","mutationList","mutation","renderFirstLevelOptions","heading","e","_c","selOption","renderSecondLevelOptions","_d","IconItem","_e","_g","_f","makeSuperScript","_h","_i","_k","_j","_l","_n","_m","_p","_o","_q","link"],"mappings":"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"}