{"version":3,"mappings":"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","names":["DocumentsCart","cartLabel","downloadLabel","shareLabel","clearLabel","removeLabel","zipFileName","shareUrl","id","useId","urlDocuments","getUrlParamValue","links","secureStorage","DOCUMENT_LINKS_STORAGE_KEY","linksArray","expanded","setExpanded","useState","documents","setDocuments","focusTrap","setFocusTrap","jsZipModule","setJsZipModule","panelRef","useRef","moduleRef","handleTriggerClick","module","updateDocuments","useEffect","DOCUMENT_LISTING_EVENTS","options","el","trap","createFocusTrap","disableBodyScroll","clearAllBodyScrollLocks","urlDocumentsArray","decodeUri","handleRemove","event","parent","title","extension","indexToRemove","item","newLinksArray","handleClearAll","handleDownload","button","handleShare","mailText","text","error","React","index","createDataLayerString"],"sources":["../../../../src/scripts/react-components/document-cart/index.tsx"],"sourcesContent":["import React, { useState, useRef, useId, useEffect } from 'react';\nimport {\n DOCUMENT_LISTING_EVENTS,\n DOCUMENT_LINKS_STORAGE_KEY\n} from '../document-listing/constants';\nimport { FocusTrap, createFocusTrap } from 'focus-trap';\nimport {\n disableBodyScroll,\n clearAllBodyScrollLocks,\n BodyScrollOptions\n} from 'body-scroll-lock';\nimport { decodeUri, getUrlParamValue } from '../../helpers/queryString';\nimport { createDataLayerString } from '../../helpers/helpers';\nimport { secureStorage } from '../../helpers/global-storage';\nimport { ExtendedWindowType } from '../../helpers/global-types';\n\ntype Document = {\n url: string;\n extension: string;\n title: string;\n type: string;\n};\n\ntype DocumentsCartProps = {\n cartLabel: string;\n downloadLabel: string;\n shareLabel: string;\n clearLabel: string;\n removeLabel: string;\n zipFileName: string;\n shareUrl: string;\n};\n\nfunction DocumentsCart({\n cartLabel,\n downloadLabel,\n shareLabel,\n clearLabel,\n removeLabel,\n zipFileName,\n shareUrl\n}: DocumentsCartProps) {\n const id = useId();\n\n const urlDocuments = getUrlParamValue('documents');\n\n const links = secureStorage.get(DOCUMENT_LINKS_STORAGE_KEY);\n const linksArray = links ? (JSON.parse(links) as Document[]) : [];\n\n const [expanded, setExpanded] = useState(false);\n const [documents, setDocuments] = useState(linksArray);\n const [focusTrap, setFocusTrap] = useState(null);\n const [jsZipModule, setJsZipModule] = useState<{\n createAndDownloadDocumentsZip: (\n documents: Document[],\n zipFileName: string,\n downloadButton?: HTMLButtonElement\n ) => void;\n }>();\n\n const panelRef = useRef(null);\n const moduleRef = useRef(null);\n\n const handleTriggerClick = () => {\n if (!jsZipModule) {\n const importComponent = async () => {\n const module = await import('../../helpers/zip');\n setJsZipModule(module);\n };\n\n importComponent();\n }\n\n if (!expanded) {\n focusTrap?.activate();\n } else {\n focusTrap?.deactivate();\n }\n setExpanded(!expanded);\n };\n\n const updateDocuments = () => {\n const links = secureStorage.get(DOCUMENT_LINKS_STORAGE_KEY);\n const linksArray = links ? (JSON.parse(links) as Document[]) : [];\n setDocuments(linksArray);\n };\n\n useEffect(() => {\n window.addEventListener(\n DOCUMENT_LISTING_EVENTS.updateCart,\n updateDocuments\n );\n\n if (moduleRef.current) {\n const options = {\n reserveScrollBarGap: true,\n allowTouchMove: (el: HTMLElement) => {\n return el.closest('.document-cart__panel') !== null;\n }\n } as BodyScrollOptions;\n\n const trap = createFocusTrap(moduleRef.current, {\n clickOutsideDeactivates: true,\n returnFocusOnDeactivate: true,\n onActivate() {\n disableBodyScroll(document.body, options);\n setExpanded(true);\n },\n onDeactivate() {\n clearAllBodyScrollLocks();\n setExpanded(false);\n }\n });\n\n setFocusTrap(trap);\n }\n\n if (urlDocuments) {\n const urlDocumentsArray = JSON.parse(\n decodeUri(urlDocuments)\n ) as Document[];\n\n setDocuments(urlDocumentsArray);\n secureStorage.set(\n DOCUMENT_LINKS_STORAGE_KEY,\n JSON.stringify(urlDocumentsArray)\n );\n }\n\n return () => {\n window.removeEventListener(\n DOCUMENT_LISTING_EVENTS.updateCart,\n updateDocuments\n );\n };\n }, []);\n\n useEffect(() => {\n if (moduleRef.current) {\n if (documents.length < 1) {\n focusTrap?.deactivate();\n setExpanded(false);\n moduleRef.current.style.setProperty('visibility', 'hidden');\n } else {\n moduleRef.current.style.removeProperty('visibility');\n }\n }\n }, [documents]);\n\n const handleRemove = (\n event: React.MouseEvent\n ) => {\n event.preventDefault();\n\n const target = event.target as HTMLButtonElement;\n const parent = target.closest('.document-cart__item') as HTMLLIElement;\n const title = parent.querySelector(\n '.document-cart__title'\n ) as HTMLHeadingElement;\n const extension = parent.querySelector(\n '.document-cart__extension'\n ) as HTMLParagraphElement;\n\n const links = secureStorage.get(DOCUMENT_LINKS_STORAGE_KEY);\n const linksArray = links ? (JSON.parse(links) as Document[]) : [];\n\n const indexToRemove = linksArray.findIndex(\n item =>\n item.title === title.textContent &&\n item.extension === extension.textContent\n );\n\n const newLinksArray = [\n ...linksArray.slice(0, indexToRemove),\n ...linksArray.slice(indexToRemove + 1)\n ];\n\n secureStorage.set(\n DOCUMENT_LINKS_STORAGE_KEY,\n JSON.stringify(newLinksArray)\n );\n\n setDocuments(newLinksArray);\n\n window.dispatchEvent(new CustomEvent(DOCUMENT_LISTING_EVENTS.updateItem));\n };\n\n const handleClearAll = () => {\n localStorage.removeItem(DOCUMENT_LINKS_STORAGE_KEY);\n setDocuments([]);\n setExpanded(false);\n window.dispatchEvent(new CustomEvent(DOCUMENT_LISTING_EVENTS.updateItem));\n };\n\n const handleDownload = async (\n event: React.MouseEvent\n ) => {\n const button = event.currentTarget;\n\n (window as ExtendedWindowType).dataLayer.push({\n event: 'file_downloads',\n event_category: 'file downloads',\n event_action: '',\n event_label: '',\n event_attributes: {\n custom_file_name: zipFileName,\n document_type: 'zip'\n }\n });\n\n jsZipModule?.createAndDownloadDocumentsZip(documents, zipFileName, button);\n };\n\n const handleShare = () => {\n const links = secureStorage.get(DOCUMENT_LINKS_STORAGE_KEY);\n const linksObj = JSON.parse(links as string);\n\n const mailText = linksObj.reduce(\n (\n text: string,\n item: { title: string; extension: string; url: string }\n ) => {\n text += `${item.title}.${item.extension}: ${item.url} \\n`;\n return text;\n },\n ''\n );\n\n if (navigator.share) {\n navigator\n .share({\n url: shareUrl,\n text: mailText,\n title: 'GAF Documents'\n })\n .catch(error => console.error('Error sharing', error));\n } else {\n console.log('Web Share API not supported.');\n }\n };\n\n return (\n \n
\n \n \n {documents.length} Documents\n \n

{cartLabel}

\n \n \n {documents.length > 0 && (\n
    \n {documents.map((item, index) => (\n
  • \n
    \n

    {item.title}

    \n \n {removeLabel}\n \n
    \n

    \n {item.type} |{' '}\n \n {item.extension}\n \n

    \n
  • \n ))}\n
\n )}\n
\n \n {downloadLabel}\n \n \n \n \n \n {shareLabel}\n \n \n \n \n \n {clearLabel}\n \n
\n
\n \n \n );\n}\n\nexport default DocumentsCart;\n"],"file":"Areas/GAF/scripts/index-c8331fd4.js"}