{"version":3,"file":"index-6b61b4b9.js","sources":["../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport Card from './card';\nimport { isTabletLandscape } from '../../../helpers/breakpoints';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\n\nimport {\n RequestAQuoteFormProps,\n CardProps\n} from '../../components/request-a-quote-form/types';\n\nimport RequestAQuoteForm from '../../components/request-a-quote-form';\nimport { ExtendedWindowType } from '../../engine';\nimport { createDataLayerString } from '../../../helpers/helpers';\n\nconst ContractorRequestAForm: React.FC = ({\n contractorCard,\n formLabels,\n callUsLabels,\n contractor,\n ...props\n}) => {\n const { heading } = formLabels ? JSON.parse(formLabels) : '';\n const callUsCardLabels: CardProps = callUsLabels\n ? JSON.parse(callUsLabels)\n : '';\n const contractorData = contractor ? JSON.parse(contractor as string) : '';\n\n const [sticky, setSticky] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const [fixedHeight, setFixedHeight] = useState(0);\n const [cardHeight, setCardHeight] = useState(0);\n const card = useRef(null);\n const styleRequestAQuote: { [key: string]: string } = {\n '--request-a-quote-fixed': `${fixedHeight}px`,\n '--request-a-quote-card-height': `${cardHeight}px`\n };\n\n const handleScroll = () => {\n const rect = (card.current as HTMLElement)?.getBoundingClientRect();\n if (rect.top <= rect.height * -1) {\n if (!sticky) {\n setSticky(true);\n const global = window as ExtendedWindowType;\n if (\n (global.dataLayer as { event_action: string }[]).findIndex(\n item => item.event_action === 'sticky request a quote: view'\n ) === -1\n ) {\n global.dataLayer.push({\n event: 'sticky_request_quote',\n event_category: 'find a contractor',\n event_action: 'sticky request a quote: view',\n event_attributes: {\n contractor_type: 'residential, commercial, undefined'\n }\n });\n }\n }\n } else {\n setSticky(false);\n if (sticky) {\n card.current?.parentElement?.classList.remove(\n 'contractor-request-a-quote-form--sticky'\n );\n }\n }\n };\n\n const handleResize = () => {\n const header = (card.current as HTMLElement).querySelector(\n '.request-a-quote__header'\n );\n const footer = (card.current as HTMLElement).querySelector(\n '.request-a-quote__footer'\n );\n\n const cardFixed = (card.current as HTMLElement).querySelector(\n '.request-a-quote__card'\n );\n\n setFixedHeight(\n (header as HTMLElement)?.offsetHeight +\n (footer as HTMLElement)?.offsetHeight\n );\n\n if (!expanded) {\n setCardHeight((cardFixed as HTMLElement)?.offsetHeight);\n }\n };\n\n useEffect(() => {\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleResize);\n clearAllBodyScrollLocks();\n };\n }, []);\n\n const handleExpandButton = () => {\n setExpanded(prev => !prev);\n\n const cardFixed = (card.current as HTMLElement).querySelector(\n '.request-a-quote__card'\n );\n if (!expanded) {\n setCardHeight((cardFixed as HTMLElement)?.offsetHeight);\n disableBodyScroll(card.current as HTMLDivElement);\n } else {\n clearAllBodyScrollLocks();\n }\n };\n\n if ((contractorCard as string).trim() === 'true') {\n return (\n \n
\n
\n \n
\n
\n \n );\n }\n\n return (\n <>\n {sticky && isTabletLandscape && (\n handleExpandButton()}\n className={`request-a-quote__expand-btn ${\n expanded ? 'request-a-quote__expand-btn--open' : ''\n }`}\n data-visible-layer={createDataLayerString({\n event_attributes: {\n contractor_id: contractorData.id,\n contractor_name: contractorData.contractorName,\n contractor_certificates_count:\n contractorData.numberOfCertificates,\n contractor_rating: contractorData.rating,\n contractor_reviews_count: contractorData.numberOfReviews,\n contractor_type: contractorData.type,\n contractor_certificate_name: contractorData.certificateName\n },\n event: 'sticky_request_quote',\n event_category: 'find a contractor',\n event_action: 'sticky request a quote: view',\n event_label: ''\n })}\n data-layer={createDataLayerString([\n {\n event_attributes: {\n contractor_id: contractorData.id,\n contractor_name: contractorData.contractorName,\n contractor_certificates_count:\n contractorData.numberOfCertificates,\n contractor_rating: contractorData.rating,\n contractor_reviews_count: contractorData.numberOfReviews,\n contractor_type: contractorData.type,\n contractor_certificate_name: contractorData.certificateName\n },\n event: 'sticky_request_quote',\n event_category: 'find a contractor',\n event_action: 'sticky request a quote: click',\n event_label: ''\n }\n ])}\n >\n {heading}\n \n )}\n \n
\n
\n \n
\n
\n \n \n );\n};\n\nexport default ContractorRequestAForm;\n"],"names":["ContractorRequestAForm","contractorCard","formLabels","callUsLabels","contractor","props","heading","callUsCardLabels","contractorData","sticky","setSticky","useState","expanded","setExpanded","fixedHeight","setFixedHeight","cardHeight","setCardHeight","card","useRef","styleRequestAQuote","handleScroll","rect","_a","global","item","_c","_b","handleResize","header","footer","cardFixed","useEffect","clearAllBodyScrollLocks","handleExpandButton","prev","disableBodyScroll","React","isTabletLandscape","Card","createDataLayerString","RequestAQuoteForm"],"mappings":"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"}