{"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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"}