{"version":3,"mappings":"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","names":["DocumentListing","endpoint","copyText","copiedText","shareText","downloadText","addToCartText","sortLabel","sortAscendingLabel","sortDescendingLabel","summaryLabel","downloadPackageText","addAllText","removeAllText","zipFileName","documentPackageName","documentPackageDescription","gafLogoUrl","imagePlaceholders","data","useFetch","id","useId","documents","setDocuments","useState","containerRef","useRef","showAdd","setShowAdd","showRemove","setShowRemove","jsZipModule","setJsZipModule","imagePlaceholdersObject","alphabetizeDocuments","a","b","titleA","titleB","invertDocuments","temp","generateItemList","results","resultList","result","index","documentUrl","getDocumentPriority","getExtensionPriority","useEffect","handleDownloadPackageClick","event","button","module","checkSelected","checkboxes","numberOfCheckboxes","numberOfChecked","checkbox","jsonldScript","structuredData","script","_a","DOCUMENT_LISTING_EVENTS","handleSelectAllClick","handleRemoveSelectedClick","React","NUMBER_OF_RESULTS","card","hideZoomIcon","image","extension","placeholder","DocumentCard"],"sources":["../../../../src/scripts/react-components/document-listing/index.tsx"],"sourcesContent":["import React, { useEffect, useState, useId, useRef } from 'react';\nimport DocumentCard from './document-card';\nimport { useFetch } from '../../hooks/useFetch';\nimport { DocumentListingItem, DocumentListingResponse } from './response';\nimport { DOCUMENT_LISTING_EVENTS, NUMBER_OF_RESULTS } from './constants';\nimport {\n getDocumentPriority,\n getExtensionPriority\n} from '../../helpers/helpers';\n\ntype DocumentListingProps = {\n endpoint: string;\n copyText: string;\n copiedText: string;\n shareText: string;\n downloadText: string;\n addToCartText: string;\n sortLabel: string;\n sortAscendingLabel: string;\n sortDescendingLabel: string;\n summaryLabel: string;\n downloadPackageText: string;\n zipFileName: string;\n addAllText: string;\n removeAllText: string;\n documentPackageName: string;\n documentPackageDescription: string;\n gafLogoUrl: string;\n imagePlaceholders: string;\n};\n\ntype SchemaItem = {\n '@type': string;\n position: number;\n item: {\n '@type': string;\n name: string;\n description: string;\n url: string;\n datePublished: string;\n publisher: {\n '@type': string;\n name: string;\n logo: {\n '@type': string;\n url: string;\n };\n };\n encodingFormat: string;\n };\n};\n\nfunction DocumentListing({\n endpoint,\n copyText,\n copiedText,\n shareText,\n downloadText,\n addToCartText,\n sortLabel,\n sortAscendingLabel,\n sortDescendingLabel,\n summaryLabel,\n downloadPackageText,\n addAllText,\n removeAllText,\n zipFileName,\n documentPackageName,\n documentPackageDescription,\n gafLogoUrl,\n imagePlaceholders\n}: DocumentListingProps) {\n const { data } = useFetch(endpoint);\n const id = useId();\n const [documents, setDocuments] = useState<\n DocumentListingResponse['documents']\n >([]);\n const containerRef = useRef(null);\n const [showAdd, setShowAdd] = useState(false);\n const [showRemove, setShowRemove] = useState(false);\n const [jsZipModule, setJsZipModule] = useState<{\n makePackage: (\n button: HTMLButtonElement,\n documents: DocumentListingResponse['documents'],\n zipFileName: string\n ) => void;\n }>();\n const imagePlaceholdersObject = JSON.parse(imagePlaceholders);\n\n const alphabetizeDocuments = (\n documents: DocumentListingResponse['documents']\n ) => {\n setDocuments(\n documents.sort((a, b) => {\n const titleA = a.title.toUpperCase();\n const titleB = b.title.toUpperCase();\n\n if (titleA < titleB) {\n return -1;\n }\n\n if (titleA > titleB) {\n return 1;\n }\n\n return 0;\n })\n );\n };\n\n const invertDocuments = () => {\n const temp = [...documents].reverse();\n setDocuments([]);\n setTimeout(() => {\n setDocuments(temp);\n });\n };\n\n const generateItemList = (results: DocumentListingItem[]) => {\n const resultList: SchemaItem[] = [];\n\n results.forEach((result, index) => {\n const documentUrl = getDocumentPriority(result.documents);\n\n resultList.push({\n '@type': 'ListItem',\n position: index + 1,\n item: {\n '@type': 'DigitalDocument',\n name: result.title,\n description: result.description,\n url: documentUrl,\n datePublished: result.publishDate,\n publisher: {\n '@type': 'Organization',\n name: 'GAF',\n logo: {\n '@type': 'ImageObject',\n url: gafLogoUrl\n }\n },\n encodingFormat: getExtensionPriority(result.documents)\n }\n });\n });\n\n return resultList;\n };\n\n useEffect(() => {\n if (data) {\n alphabetizeDocuments(data.documents);\n }\n }, [data]);\n\n const handleDownloadPackageClick = (\n event: React.MouseEvent\n ) => {\n event.preventDefault();\n const button = event.currentTarget;\n button.disabled = true;\n\n if (!jsZipModule) {\n const importComponent = async () => {\n const module = await import('./zip');\n setJsZipModule(module);\n module.makePackage(button, documents, zipFileName);\n };\n\n importComponent();\n } else {\n jsZipModule.makePackage(button, documents, zipFileName);\n }\n };\n\n const checkSelected = () => {\n if (containerRef.current) {\n const checkboxes = containerRef.current.querySelectorAll(\n '.document-card__checkbox'\n ) as NodeListOf;\n\n const numberOfCheckboxes = checkboxes.length;\n\n let numberOfChecked = 0;\n\n checkboxes.forEach(checkbox => {\n if (checkbox.checked) {\n numberOfChecked++;\n }\n });\n\n if (numberOfChecked === numberOfCheckboxes) {\n setShowAdd(false);\n } else {\n setShowAdd(true);\n }\n\n if (numberOfChecked > 0) {\n setShowRemove(true);\n } else {\n setShowRemove(false);\n }\n }\n };\n\n useEffect(() => {\n checkSelected();\n\n const results = documents;\n\n const jsonldScript = document.createElement('script');\n jsonldScript.setAttribute('type', 'application/ld+json');\n\n const structuredData = {\n '@context': 'https://schema.org',\n '@type': 'ItemList',\n name: documentPackageName,\n description: documentPackageDescription,\n url: window.location.href,\n itemListElement: generateItemList(results)\n };\n\n const jsonldScripts = document.querySelectorAll(\n 'script[type=\"application/ld+json\"]'\n );\n\n jsonldScripts.forEach(script => {\n if (script.textContent?.includes(`\"@type\":\"ItemList\"`)) script.remove();\n });\n\n jsonldScript.textContent = JSON.stringify(structuredData);\n document.head.appendChild(jsonldScript);\n }, [documents]);\n\n useEffect(() => {\n window.addEventListener(\n DOCUMENT_LISTING_EVENTS.checkSelected,\n checkSelected\n );\n\n return () => {\n window.removeEventListener(\n DOCUMENT_LISTING_EVENTS.checkSelected,\n checkSelected\n );\n };\n }, []);\n\n const handleSelectAllClick = () => {\n window.dispatchEvent(new Event(DOCUMENT_LISTING_EVENTS.selectAll));\n };\n\n const handleRemoveSelectedClick = () => {\n window.dispatchEvent(new Event(DOCUMENT_LISTING_EVENTS.removeSelected));\n };\n\n return (\n
\n
\n {data?.numberOfDocuments !== undefined && (\n \n )}\n
\n \n \n \n \n \n
\n
\n
\n {documents.length > 0 ? (\n \n {downloadPackageText}\n \n \n \n \n ) : (\n
\n )}\n
\n \n {addAllText}\n \n {showRemove && (\n \n {removeAllText}\n \n )}\n
\n
\n {documents.length > 0 && (\n
    \n {documents.map((card, index) => {\n let hideZoomIcon = false;\n let image;\n\n if (card.image) {\n image = card.image;\n }\n\n if (!image && card.documents?.length > 0) {\n const document = card.documents[0];\n const extension = document.extension.toLowerCase();\n const placeholder = imagePlaceholdersObject[extension];\n\n if (placeholder) {\n image = placeholder;\n hideZoomIcon = true;\n }\n }\n\n if (!image) {\n image = imagePlaceholdersObject['default'];\n hideZoomIcon = true;\n }\n\n return (\n
  • \n \n
  • \n );\n })}\n
\n )}\n
\n );\n}\n\nexport default DocumentListing;\n"],"file":"Areas/GAF/scripts/index-f387d100.js"}