{"version":3,"file":"small-contractor-card-06a79e64.js","sources":["../../../../src/scripts/coveo/modules/search-results-listing/context.tsx","../../../../src/scripts/coveo/modules/search-results-listing/small-contractor-card.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nexport const SearchListingContext = createContext({\n searchTerm: '',\n searchType: ''\n});\n","import React, { useEffect } from 'react';\nimport { formatPhoneNumber } from '../../../helpers/transform';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport type { BodyScrollOptions } from 'body-scroll-lock';\nimport RatingStars from '../../../react-components/rating-stars';\nimport { createDataLayerString } from '../../../helpers/helpers';\nimport { SearchListingContext } from './context';\nimport { ExtendedWindowType } from '../../engine';\nimport { ResultLink } from '../../components/interactive-result';\nimport { Result } from '@coveo/headless';\n\nexport type SmallContractorCardProps = {\n quizResults?: boolean;\n modalId: string;\n resultType?: string;\n id: string;\n type: string;\n name: string;\n rating?: number;\n reviews?: number;\n url: string;\n city: string;\n stateAbbreviation: string;\n certificationsLabel: string;\n certifications: string[];\n certificationImages: {\n facetName: string;\n iconUrl: string;\n }[];\n moreCertificationsLabel: string;\n viewAllCertificationsLabel: string;\n image: string;\n placeholderImage: string;\n imageAlt: string;\n phone?: string;\n isSearchListing?: boolean;\n index: number;\n result?: Result;\n};\n\nfunction SmallContractorCard({\n quizResults,\n modalId,\n resultType,\n id,\n type,\n name,\n rating,\n reviews,\n url,\n city,\n stateAbbreviation,\n certificationsLabel,\n certifications,\n moreCertificationsLabel,\n viewAllCertificationsLabel,\n certificationImages,\n image,\n placeholderImage,\n imageAlt,\n phone,\n isSearchListing,\n index,\n result\n}: SmallContractorCardProps) {\n const modal = document.querySelector(`#${modalId}`);\n const modalCloseButton = modal?.querySelector(\n '.modal__close-button'\n );\n\n const handleClick = () => {\n const options = {\n reserveScrollBarGap: true,\n allowTouchMove: (el: HTMLElement) => {\n return el.classList.contains('modal');\n }\n } as BodyScrollOptions;\n\n (modal as HTMLDialogElement)?.showModal();\n disableBodyScroll(modal as HTMLElement, options);\n\n const global = window as ExtendedWindowType;\n\n global.dataLayer?.push({\n event_attributes: {\n contractor_id: id,\n contractor_name: name,\n contractor_certificates_count: certifications.length,\n contractor_rating: rating,\n contractor_reviews_count: reviews,\n contractor_certificate_name: certifications[0] || null,\n contractor_type: type\n },\n event: quizResults\n ? 'contractor_interaction'\n : 'view_certifications_click',\n event_category: quizResults\n ? 'contractor_interaction'\n : 'find a contractor',\n event_action: 'view certifications and awards'\n });\n };\n\n const handleClose = () => {\n (modal as HTMLDialogElement)?.close();\n clearAllBodyScrollLocks();\n };\n\n useEffect(() => {\n if (modalCloseButton) {\n modalCloseButton.addEventListener('click', handleClose);\n }\n\n const global = window as ExtendedWindowType;\n\n global.dataLayer?.push({\n event: 'contractor_impression',\n event_category: 'find a contractor',\n event_action: 'contractor impression',\n event_attributes: {\n contractor_id: id,\n contractor_name: name,\n contractor_certificate_name: certifications ? certifications[0] : null,\n contractor_type: type,\n contractor_reviews_count: reviews,\n contractor_rating: rating,\n contractor_certificates_count: certifications\n ? certifications.length\n : 0,\n contractor_position: index\n }\n });\n\n return () => {\n if (modalCloseButton) {\n modalCloseButton.removeEventListener('click', handleClose);\n }\n };\n }, []);\n\n const renderCertifications = (isMobile: boolean) => {\n return (\n \n
\n

\n {certificationsLabel}\n

\n \n {viewAllCertificationsLabel}\n \n
\n
    \n {certifications.map((certification, index) => (\n \n {index < 3 && (\n
  • \n item.facetName === certification\n )?.iconUrl\n }\n alt={certification}\n role=\"presentation\"\n className=\"small-contractor-card__certification-icon\"\n />\n \n {certification}\n \n
  • \n )}\n
    \n ))}\n {certifications.length > 3 && (\n
  • \n {`(+${certifications.length - 3} ${moreCertificationsLabel})`}\n
  • \n )}\n
\n {phone && (\n \n Phone Number:\n {formatPhoneNumber(phone)}\n \n \n \n \n )}\n \n );\n };\n\n const handleSearchListingClick = (\n searchTerm?: string,\n searchType?: string\n ) => {\n const global = window as ExtendedWindowType;\n\n global.dataLayer?.push({\n event: 'result_click',\n event_category: 'result click',\n event_action: 'internal search',\n event_attributes: {\n results_type: resultType as string,\n search_term: searchTerm,\n search_type: searchTerm ? searchType : 'external'\n }\n });\n };\n\n return (\n \n {value => (\n
\n
\n
\n
\n
\n

{resultType}

\n \n handleSearchListingClick(\n value.searchTerm,\n value.searchType\n )\n : undefined\n }\n >\n {result ? (\n \n {name}\n \n ) : (\n \n {name}\n \n )}\n \n {reviews && rating ? (\n \n ) : null}\n

\n {city}, {stateAbbreviation}\n

\n
\n \n handleSearchListingClick(\n value.searchTerm,\n value.searchType\n )\n : undefined\n }\n >\n \n \n \n \n
\n {certifications &&\n certifications.length > 0 &&\n renderCertifications(true)}\n
\n {certifications &&\n certifications.length > 0 &&\n renderCertifications(false)}\n
\n \n handleSearchListingClick(value.searchTerm, value.searchType)\n : undefined\n }\n >\n \n {imageAlt}\n \n \n
\n )}\n
\n );\n}\n\nexport default SmallContractorCard;\n"],"names":["SearchListingContext","createContext","SmallContractorCard","quizResults","modalId","resultType","id","type","name","rating","reviews","url","city","stateAbbreviation","certificationsLabel","certifications","moreCertificationsLabel","viewAllCertificationsLabel","certificationImages","image","placeholderImage","imageAlt","phone","isSearchListing","index","result","modal","modalCloseButton","handleClick","options","el","disableBodyScroll","_a","handleClose","clearAllBodyScrollLocks","useEffect","renderCertifications","isMobile","React","createDataLayerString","certification","item","formatPhoneNumber","handleSearchListingClick","searchTerm","searchType","value","ResultLink","RatingStars"],"mappings":"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"}