{"version":3,"file":"index-eb2e8a53.js","sources":["../../../../src/scripts/helpers/keycodes.ts","../../../../src/scripts/coveo/components/request-a-quote-modal/index.tsx"],"sourcesContent":["export const ESCAPE = 'Escape';\n","import React, { useState, useRef, useEffect } from 'react';\n\nimport {\n RequestAQuoteFormProps,\n ModalProps\n} from '../../components/request-a-quote-form/types';\nimport { ESCAPE } from '../../../helpers/keycodes';\nimport RequestAQuoteForm from '../request-a-quote-form';\nimport { ExtendedWindowType } from '../../engine';\nimport { FocusTrap, createFocusTrap } from 'focus-trap';\nimport {\n disableBodyScroll,\n clearAllBodyScrollLocks,\n BodyScrollOptions\n} from 'body-scroll-lock';\n\nconst ContractorRequestAForm: React.FC = ({\n ...props\n}) => {\n const [open, setOpen] = useState(false);\n const [contractorData, setContractorData] = useState(null);\n const [listener, setListener] = useState(false);\n const [focusTrap, setFocusTrap] = useState(null);\n const modal = useRef(null);\n\n const handleOpenModal = (_contractorData: ModalProps) => {\n setContractorData(_contractorData);\n setOpen(true);\n const global = window as ExtendedWindowType;\n\n global.dataLayer?.push({\n event: 'modal_interaction',\n event_category: 'modals',\n event_action: 'view',\n event_attributes: {\n contractor_id: _contractorData?.id,\n contractor_name: _contractorData?.contractorName,\n contractor_certificates_count: _contractorData?.numberOfCertificates,\n contractor_rating: _contractorData?.rating,\n contractor_reviews_count: _contractorData?.numberOfReviews,\n contractor_certificate_name: _contractorData?.certificateName,\n contractor_type: _contractorData?.type\n }\n });\n\n global.dataLayer?.push({\n event: 'request_quote_form_view',\n event_category: 'find a contractor',\n event_action: 'request a quote form view',\n event_attributes: {\n contractor_id: _contractorData?.id,\n contractor_name: _contractorData?.contractorName,\n contractor_certificates_count: _contractorData?.numberOfCertificates,\n contractor_rating: _contractorData?.rating,\n contractor_reviews_count: _contractorData?.numberOfReviews,\n contractor_certificate_name: _contractorData?.certificateName,\n contractor_type: _contractorData?.type,\n form_name: 'request a quote form'\n }\n });\n };\n\n useEffect(() => {\n if (modal.current) {\n const options = {\n reserveScrollBarGap: true,\n allowTouchMove: (el: HTMLElement) => {\n return el.closest('.modal__content') !== null;\n }\n } as BodyScrollOptions;\n\n const trap = createFocusTrap(modal.current, {\n clickOutsideDeactivates: true,\n returnFocusOnDeactivate: true,\n onActivate() {\n disableBodyScroll(document.body, options);\n document.body.style.overflow = 'hidden';\n },\n onDeactivate() {\n clearAllBodyScrollLocks();\n document.body.style.removeProperty('overflow');\n }\n });\n\n setFocusTrap(trap);\n\n (modal.current as HTMLDialogElement).addEventListener('close', () => {\n setOpen(false);\n const global = window as ExtendedWindowType;\n\n global.dataLayer?.push({\n event: 'modal_interaction',\n event_category: 'modals',\n event_action: 'close',\n event_attributes: {\n contractor_id: contractorData?.id,\n contractor_name: contractorData?.contractorName,\n contractor_certificates_count: contractorData?.numberOfCertificates,\n contractor_rating: contractorData?.rating,\n contractor_reviews_count: contractorData?.numberOfReviews,\n contractor_certificate_name: contractorData?.certificateName,\n contractor_type: contractorData?.type\n }\n });\n });\n }\n\n window.addEventListener('keydown', handleEsc);\n\n if (!listener) {\n window.addEventListener('openRequestAQuoteModal', e =>\n handleOpenModal((e as CustomEvent).detail as ModalProps)\n );\n setListener(true);\n }\n return () => {\n if (modal.current) {\n (modal.current as HTMLDialogElement).removeEventListener('close', () =>\n setOpen(false)\n );\n }\n\n window.removeEventListener('keydown', handleEsc);\n\n if (listener) {\n window.removeEventListener('openRequestAQuoteModal', e =>\n handleOpenModal((e as CustomEvent).detail as ModalProps)\n );\n setListener(false);\n }\n };\n }, [modal.current]);\n\n useEffect(() => {\n if (modal.current) {\n if (open) {\n (modal.current as HTMLDialogElement).show();\n focusTrap?.activate();\n } else {\n setContractorData(null);\n focusTrap?.deactivate();\n }\n }\n }, [open]);\n\n const handleClose = (\n e: React.MouseEvent | React.MouseEvent\n ) => {\n if (\n (e.target as Element).classList.contains('modal__backdrop') ||\n (e.target as Element).classList.contains('modal__close-button')\n ) {\n if (modal.current) {\n (window as ExtendedWindowType).dataLayer?.push({\n event: 'request_quote_abandon',\n event_category: 'find a contractor',\n event_action: 'form abandoned',\n event_attributes: {\n contractor_id: contractorData?.id,\n contractor_name: contractorData?.contractorName,\n contractor_certificates_count: contractorData?.numberOfCertificates,\n contractor_rating: contractorData?.rating,\n contractor_reviews_count: contractorData?.numberOfReviews,\n contractor_certificate_name: contractorData?.certificateName,\n contractor_type: contractorData?.type,\n form_name: 'request a quote',\n form_type: 'contractor locator'\n }\n });\n setOpen(false);\n setContractorData(null);\n (modal.current as HTMLDialogElement).close();\n }\n }\n };\n\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === ESCAPE) {\n if (modal.current) {\n setOpen(false);\n (modal.current as HTMLDialogElement).close();\n }\n }\n };\n\n return (\n \n \n {' '}\n \n \n
\n \n {contractorData && (\n \n )}\n
\n
\n \n );\n};\n\nexport default ContractorRequestAForm;\n"],"names":["ESCAPE","ContractorRequestAForm","props","open","setOpen","useState","contractorData","setContractorData","listener","setListener","focusTrap","setFocusTrap","modal","useRef","handleOpenModal","_contractorData","global","_a","_b","useEffect","options","el","trap","createFocusTrap","disableBodyScroll","clearAllBodyScrollLocks","handleEsc","handleClose","React","RequestAQuoteForm"],"mappings":"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"}