{"version":3,"file":"index-b76beb6f.js","sources":["../../../../src/scripts/coveo/modules/city-listing/card.tsx","../../../../src/scripts/coveo/modules/city-listing/templates.tsx","../../../../src/scripts/coveo/modules/city-listing/distance-facet.tsx","../../../../src/scripts/coveo/modules/city-listing/index.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport RatingStars from '../../../react-components/rating-stars';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport type { BodyScrollOptions } from 'body-scroll-lock';\nimport { createDataLayerString, isInDialog } from '../../../helpers/helpers';\nimport { ExtendedWindowType } from '../../engine';\nimport { formatPhoneNumber } from '../../../helpers/transform';\nimport { Result } from '@coveo/headless';\nimport { ResultLink } from '../../components/interactive-result';\n\ntype ContractorCardProps = {\n index: number;\n id: string;\n imgSource: string;\n imgAlt: string;\n contractorId: string;\n contractorType: string;\n contractorDBA: string;\n contractorName: string;\n contractorRating: number;\n contractorReviews: number;\n city: string;\n stateAbbreviation: string;\n distance: string;\n certificationsLabel: string;\n certifications: string[];\n moreCertificationsLabel: string;\n viewAllCertificationsLabel: string;\n certificationImages: {\n facetName: string;\n iconUrl: string;\n }[];\n quoteLabel: string;\n phone: string;\n link: string;\n countryCode: string;\n isLead: number;\n result: Result;\n};\n\nfunction ContractorCard({\n index,\n imgSource,\n imgAlt,\n contractorId,\n contractorType,\n contractorDBA,\n contractorName,\n contractorRating,\n contractorReviews,\n city,\n stateAbbreviation,\n distance,\n certificationsLabel,\n certifications,\n moreCertificationsLabel,\n viewAllCertificationsLabel,\n certificationImages,\n quoteLabel,\n phone,\n link,\n countryCode,\n isLead,\n result\n}: ContractorCardProps) {\n const modal = document.querySelector('.certifications-modal');\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: contractorId,\n contractor_name: contractorName,\n contractor_certificates_count: certifications?.length || 0,\n contractor_rating: contractorRating,\n contractor_reviews_count: contractorReviews,\n contractor_certificate_name: certifications?.[0] || null,\n contractor_type: contractorType\n },\n event: 'contractor_interaction',\n event_category: 'contractor interactions',\n event_action: 'view certifications and awards'\n });\n };\n\n const handleClose = () => {\n (modal as HTMLDialogElement)?.close();\n clearAllBodyScrollLocks();\n };\n\n const handleRequestAQuote = () => {\n const modalContractorInfo = {\n id: contractorId,\n imageAlt: imgAlt,\n image: imgSource,\n contractorDBA: contractorDBA,\n contractorName: contractorName,\n rating: contractorRating,\n numberOfReviews: contractorReviews,\n city: city,\n state: stateAbbreviation,\n distanceinmiles: parseFloat(distance),\n certificateName: certifications?.[0] || null,\n numberOfCertificates: certifications?.length || 0,\n type: contractorType\n };\n\n const openRequestAQuoteModal = new CustomEvent('openRequestAQuoteModal', {\n detail: modalContractorInfo\n });\n\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {\n contractor_id: modalContractorInfo.id,\n contractor_name: modalContractorInfo.contractorName,\n contractor_certificate_name: modalContractorInfo.certificateName,\n contractor_type: modalContractorInfo.type,\n contractor_reviews_count: modalContractorInfo.numberOfReviews,\n contractor_rating: modalContractorInfo.rating,\n contractor_certificates_count: modalContractorInfo.numberOfCertificates\n },\n event: 'request_quote_button',\n event_category: 'find a contractor',\n event_action: 'request a quote button',\n event_label: ''\n });\n window.dispatchEvent(openRequestAQuoteModal);\n };\n\n useEffect(() => {\n if (modalCloseButton) {\n modalCloseButton.addEventListener('click', handleClose);\n }\n\n modal?.addEventListener('click', (e: MouseEvent) => {\n if (e.target === modal && !isInDialog(modal as HTMLDialogElement, e)) {\n handleClose();\n }\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: contractorId,\n contractor_name: contractorName,\n contractor_certificate_name: certifications?.[0] || null,\n contractor_type: contractorType,\n contractor_reviews_count: contractorReviews,\n contractor_rating: contractorRating,\n contractor_certificates_count: certifications?.length || 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 = () => {\n let values = [...certifications];\n\n if (certificationImages) {\n values = values.sort((a, b) => {\n const aIndex = certificationImages.findIndex(\n item => item.facetName === a\n );\n\n const bIndex = certificationImages.findIndex(\n item => item.facetName === b\n );\n\n if (aIndex === -1) {\n return 1;\n }\n\n if (bIndex === -1) {\n return -1;\n }\n\n return aIndex - bIndex;\n });\n }\n\n return (\n
\n
\n

\n {certificationsLabel}\n

\n \n {viewAllCertificationsLabel}\n \n
\n {values && values.length > 0 && (\n
    \n {values.map((certification, index) => (\n \n {index < 3 && (\n
  • \n item.facetName === certification\n )?.iconUrl\n }\n alt=\"\"\n role=\"presentation\"\n className=\"certification-card__certification-icon\"\n width=\"20\"\n height=\"20\"\n loading=\"lazy\"\n />\n {certification}\n
  • \n )}\n
    \n ))}\n {certifications.length > 3 && (\n
  • \n {`(+${certifications.length - 3} ${moreCertificationsLabel})`}\n
  • \n )}\n
\n )}\n
\n );\n };\n\n const renderRequestAQuoteButton = () => {\n if (countryCode === 'CAN') return null;\n\n if (\n contractorType !== 'Residential' ||\n (contractorType === 'Residential' && isLead)\n ) {\n return (\n \n {quoteLabel}\n \n );\n } else {\n return null;\n }\n };\n\n return (\n
\n \n \n \n \n \n
\n
\n
\n

\n \n {contractorName}\n \n

\n {contractorReviews && contractorRating ? (\n \n ) : null}\n

\n {city}, {stateAbbreviation} - {Number(distance).toFixed(1)} mi\n

\n
\n
\n \n \n \n \n \n
\n {renderRequestAQuoteButton()}\n {phone && (\n \n Phone Number:\n {formatPhoneNumber(phone)}\n \n \n \n \n )}\n
\n
\n
\n {certifications && certifications.length > 0\n ? renderCertifications()\n : null}\n
\n \n Phone Number:\n {formatPhoneNumber(phone)}\n \n \n \n \n {renderRequestAQuoteButton()}\n
\n
\n
\n );\n}\n\nexport default ContractorCard;\n","import {\n buildResultTemplatesManager,\n ResultTemplate,\n Result,\n SearchEngine\n} from '@coveo/headless';\nimport React from 'react';\n\nimport { headlessEngine } from '../../engine';\nimport {\n fieldsToInclude,\n fieldsObject,\n certificationImages,\n labelsObj\n} from '../../controllers/controller';\n\nimport ContractorCard from './card';\n\ntype ProjectListingResultProps = Result & {\n UniqueId: string;\n Uri: string;\n solutionType: string;\n title: string;\n image: string;\n imageAlt: string;\n copy: string;\n index: number;\n};\n\nexport const resultTemplatesManager = buildResultTemplatesManager(\n headlessEngine as SearchEngine\n);\n\nconst ProjectListingResultTemplate: ResultTemplate = {\n conditions: [],\n fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n content: (result: ProjectListingResultProps) => (\n
  • \n \n
  • \n )\n};\n\nresultTemplatesManager.registerTemplates(ProjectListingResultTemplate);\n","import React, { useId, useState, useRef, useEffect, useContext } from 'react';\nimport { GeolocationType } from '../../../helpers/global-storage';\nimport { ExtendedWindowType, headlessEngine } from '../../engine';\nimport {\n loadAdvancedSearchQueryActions,\n loadSearchActions,\n loadSearchAnalyticsActions,\n loadContextActions,\n ContextPayload,\n SearchEngine\n} from '@coveo/headless';\nimport { fieldsObject, labelsObj } from '../../controllers/controller';\nimport ZipForm from '../../../react-components/zip-form';\nimport { COVEO_PAGINATION_EVENTS } from '../../components/pagination';\nimport {\n getUrlParamValue,\n setUrlParamValue\n} from '../../../helpers/queryString';\nimport {\n getLatLongFromZip,\n updateGeolocationDataProperties\n} from '../../../helpers/geolocation';\nimport { MASTHEAD_ZIP_FORM_EVENTS } from '../../../react-components/contractor-locator-listing/helpers';\nimport { getAdvancedQueryParts } from '../../../helpers/transform';\nimport SecondCall from '../../components/second-call-context';\n\nexport const DISTANCE_PLACEHOLDERS = Object.freeze({\n zipCode: '{{zipCode}}',\n country: '{{country}}'\n});\n\ntype zipRegexProps = {\n [key: string]: string;\n};\n\ntype DistanceProps = {\n title: string;\n invalidZipMessage: string;\n endpoint: string;\n redirectUrl: string;\n latitudeField: string;\n longitudeField: string;\n values: {\n value: number;\n label: string;\n default: string;\n }[];\n autofill: boolean;\n withQueryParams: boolean;\n shouldRedirect?: boolean;\n redirect?: string;\n};\n\nconst { dataset } = document.getElementsByClassName(\n 'coveo-listing__data-wrapper'\n)[0] as HTMLElement;\n\nconst geolocation = JSON.parse(\n dataset.geolocation as string\n) as GeolocationType;\n\nconst zipRegex = dataset.zipRegex\n ? JSON.parse(dataset.zipRegex)\n : ({} as zipRegexProps);\n\nconst distanceObj = dataset.distance\n ? (JSON.parse(dataset.distance) as DistanceProps)\n : ({} as DistanceProps);\n\nconst advancedQuerySearchActionCreator = loadAdvancedSearchQueryActions(\n headlessEngine as SearchEngine\n);\n\ntype defaultCountryValueProps = {\n defaultCountryValue: string;\n shouldSearch?: boolean;\n};\n\nfunction DistanceFacet({\n defaultCountryValue,\n shouldSearch\n}: defaultCountryValueProps) {\n const id = useId();\n const zipPlaceholders = {\n us: labelsObj.usZipPlaceholder,\n usValue: labelsObj.usValue,\n ca: labelsObj.caZipPlaceholder,\n caValue: labelsObj.caValue\n };\n\n const distanceFromUrl = getUrlParamValue('distance');\n\n const defaultDistanceValue =\n distanceFromUrl || distanceObj.values.find(value => value.default)?.value;\n\n const distanceRef = useRef(null);\n\n const [zip, setZip] = useState('');\n const [country, setCountry] = useState('');\n const [isReady, setIsReady] = useState(false);\n const [latLong, setLatLong] = useState<{\n latitude?: number;\n longitude?: number;\n }>({});\n const [shouldFirstSearch, setShouldFirstSearch] = useState(true);\n const secondCallContext = useContext(SecondCall);\n\n const executeDistanceFilter = () => {\n //Add distance and country to advanced query.\n const distance = distanceRef.current?.value;\n let newQuery = '';\n if (!distance) return;\n\n const previousQuery = (headlessEngine as SearchEngine).state\n .advancedSearchQueries?.aq;\n const countryOpt = country.includes('ca')\n ? labelsObj.caValue\n : labelsObj.usValue;\n\n if (previousQuery) {\n const parts = getAdvancedQueryParts(previousQuery);\n\n const newParts = parts.map(part => {\n if (part.includes(`@${fieldsObject.distanceInMiles}`)) {\n part = `@${fieldsObject.distanceInMiles} <= ${distance}`;\n return part.trim();\n }\n if (part.includes(`@${fieldsObject.countryCode}`)) {\n part = `@${fieldsObject.countryCode} = ${countryOpt}`;\n return part.trim();\n }\n\n return part.trim();\n });\n\n newQuery = newParts.join(' ');\n\n if (!newQuery.includes(`@${fieldsObject.distanceInMiles}`) && distance) {\n newQuery = `${previousQuery} AND @${fieldsObject.distanceInMiles} <= ${distance}`;\n }\n\n if (!newQuery.includes(`@${fieldsObject.countryCode}`) && countryOpt) {\n newQuery = `${newQuery} AND @${fieldsObject.countryCode} = ${countryOpt}`;\n }\n } else {\n newQuery = ` @${fieldsObject.distanceInMiles} <= ${distance} AND @${fieldsObject.countryCode} = ${countryOpt}`;\n }\n\n (headlessEngine as SearchEngine)?.dispatch(\n advancedQuerySearchActionCreator.registerAdvancedSearchQueries({\n aq: newQuery\n })\n );\n\n const { logInterfaceLoad, logInterfaceChange } = loadSearchAnalyticsActions(\n headlessEngine as SearchEngine\n );\n const { executeSearch } = loadSearchActions(headlessEngine as SearchEngine);\n\n if (shouldFirstSearch && shouldSearch) {\n (headlessEngine as SearchEngine).dispatch(\n executeSearch(logInterfaceLoad())\n );\n setShouldFirstSearch(false);\n } else if (!shouldFirstSearch) {\n (headlessEngine as SearchEngine).dispatch(\n executeSearch(logInterfaceChange())\n );\n }\n\n setUrlParamValue('distance', distance || '');\n };\n\n const initZipValue = async () => {\n setCountry(geolocation.country);\n setZip(geolocation.zip);\n setLatLong({\n latitude: geolocation.latitude,\n longitude: geolocation.longitude\n });\n\n setTimeout(() => {\n window.dispatchEvent(new Event(MASTHEAD_ZIP_FORM_EVENTS.ready));\n setIsReady(true);\n }, 100);\n };\n\n const updateDistanceQuery = () => {\n const { latitude, longitude } = latLong;\n\n if (latitude && longitude) {\n const global = window as ExtendedWindowType;\n\n global.preProcessRequest = (body: string) => {\n const newBody = JSON.parse(body.toString());\n newBody.queryFunctions = [\n {\n fieldName: `@${fieldsObject.distanceInMiles}`,\n function: `dist(@${distanceObj.latitudeField}, @${distanceObj.longitudeField}, ${latitude}, ${longitude})*0.000621371`\n }\n ];\n return JSON.stringify(newBody);\n };\n executeDistanceFilter();\n }\n };\n\n useEffect(() => {\n window.addEventListener('zipFormSubmit', () => {\n setIsReady(true);\n });\n initZipValue();\n }, []);\n\n useEffect(() => {\n if (latLong.latitude && latLong.longitude) {\n updateDistanceQuery();\n }\n }, [latLong]);\n\n const handleFormSubmit = async (zip: string, country: string) => {\n const latLong = await getLatLongFromZip(zip, country);\n updateGeolocationDataProperties({\n latitude: latLong.latitude,\n longitude: latLong.longitude,\n zip,\n country\n });\n\n if (distanceObj.redirectUrl && zip && country) {\n window.location.href = distanceObj.redirectUrl\n .replace(DISTANCE_PLACEHOLDERS.zipCode, zip)\n .replace(DISTANCE_PLACEHOLDERS.country, country);\n }\n };\n\n const handleDistanceChange = () => {\n window.dispatchEvent(new Event(COVEO_PAGINATION_EVENTS.reset));\n if (secondCallContext.originalContext !== undefined) {\n const { setContext } = loadContextActions(headlessEngine as SearchEngine);\n headlessEngine?.dispatch(\n setContext({\n sortingStrategy: secondCallContext.originalContext\n } as ContextPayload)\n );\n }\n executeDistanceFilter();\n\n const global = window as ExtendedWindowType;\n\n global.dataLayer?.push({\n event: 'contractor_distance_filter_selected',\n event_category: 'find a contractor',\n event_action: 'distance filter',\n event_label: `user selected | ${distanceRef.current?.value} mi`,\n event_attributes: {\n zip_code: zip\n }\n });\n };\n\n return (\n \n \n {distanceObj.title}\n \n {isReady && (\n \n )}\n
    \n \n \n {distanceObj.values.map((value, index) => (\n \n ))}\n \n
    \n \n );\n}\n\nexport default DistanceFacet;\n","import React, { useRef, useEffect, useState } from 'react';\nimport {\n Result,\n ResultList as ResultListType,\n SearchEngine,\n buildFacet,\n buildNumericFacet,\n buildNumericRange,\n ContextPayload,\n loadAdvancedSearchQueryActions,\n loadContextActions,\n loadSearchActions,\n loadSearchAnalyticsActions,\n BreadcrumbManager\n} from '@coveo/headless';\nimport { ExtendedWindowType, headlessEngine } from '../../engine';\nimport ResultList from '../../components/result-list';\nimport { resultTemplatesManager } from './templates';\nimport Pagination from '../../components/pagination';\nimport { Sort } from '../../components/sort';\nimport { sortFields } from '../../controllers/sort-criteria';\nimport QuerySummary from '../../components/query-summary';\nimport FacetBreadcrumbs from '../../components/facet-breadcrumbs';\nimport {\n facets,\n labelsObj,\n resultList,\n fieldsObject,\n defaultQuery,\n facetBreadcrumb,\n resultsPerPage\n} from '../../controllers/controller';\nimport Facet from '../../components/facet';\nimport DistanceFacet, { DISTANCE_PLACEHOLDERS } from './distance-facet';\nimport { getAdvancedQueryParts } from '../../../helpers/transform';\nimport MobileFilters from '../../components/mobile-filters';\nimport { bindUrlManager } from '../../components/url-manager';\nimport ToggleSwitch from '../../../react-components/toggle-switch';\nimport { getStoredGeolocationCountryAndZip } from '../../../helpers/geolocation';\nimport SecondCall from '../../components/second-call-context';\nimport { dispatchPersonaViewEvent } from '../../../helpers/personalize';\n\nconst facetsObj = facets.map(facet => {\n if (!facet.range) {\n return {\n title: facet.title,\n certificationsLabel: facet.certificationsLabel,\n controller: buildFacet(headlessEngine as SearchEngine, {\n options: {\n field: facet.field,\n filterFacetCount: true,\n numberOfValues: 999\n }\n }),\n customOrder: facet.customOrder\n };\n } else {\n return {\n title: facet.title,\n rangeLabels:\n facet.sortCriteria === 'ascending'\n ? facet.rangeLabels\n : facet.rangeLabels?.reverse(),\n rangeStars: facet.rangeStars,\n controller: buildNumericFacet(headlessEngine as SearchEngine, {\n options: {\n field: facet.field,\n generateAutomaticRanges: false,\n sortCriteria: facet.sortCriteria ? facet.sortCriteria : 'ascending',\n currentValues: facet.rangeValues?.map(value =>\n buildNumericRange({\n start: value.start,\n end: value.end,\n endInclusive: value.endInclusive\n })\n )\n }\n })\n };\n }\n});\n\ntype CityListingProps = {\n labels: string;\n switchFacet: string;\n renderFacets: string;\n defaultCountryValue: string;\n limitSecondCall: string;\n};\n\ntype SwitchFacetProps = {\n field: string;\n redirectUrl: string;\n values: Array<{ value: string; label: string; default: boolean }>;\n};\n\ntype SchemaItem = {\n '@type': string;\n position: number;\n item: {\n '@type': string;\n name: string;\n url: string;\n logo: string;\n contactPoint: {\n '@type': string;\n telephone: string;\n contactType: string;\n areaServed: string;\n };\n };\n};\n\nconst advancedQuerySearchActionCreator = loadAdvancedSearchQueryActions(\n headlessEngine as SearchEngine\n);\n\nfunction CityListing({\n switchFacet,\n renderFacets,\n defaultCountryValue,\n limitSecondCall\n}: CityListingProps) {\n const switchFacetObj = JSON.parse(switchFacet) as SwitchFacetProps;\n const defaultSwitchValue = switchFacetObj.values.find(value => value.default);\n const containerRef = useRef(null);\n const moduleRef = useRef(null);\n const [resultsState, setResultsState] = useState(\n (resultList as ResultListType).state\n );\n\n const [breadcrumbsState, setBreadcrumbsState] = useState(\n (facetBreadcrumb as BreadcrumbManager).state\n );\n\n const [secondCall, setSecondCall] = useState(false);\n\n const [originalResults, setOriginalResults] = useState([]);\n const [filteredResults, setFilteredResults] = useState([]);\n const [originalContext, setOriginalContext] = useState(\n undefined\n );\n const [selectedPage, setSelectedPage] = useState(1);\n const [selectedFacets, setSelectedFacets] = useState<\n {\n facetId: string;\n value: string | { start: number; end: number };\n }[]\n >([]);\n const [promoCards, setPromoCards] = useState('');\n\n useEffect(() => {\n dispatchPersonaViewEvent();\n if (!secondCall) return;\n setFilteredResults(() => {\n const facets = selectedFacets;\n let newFilteredResults = originalResults;\n facets.forEach(\n (facet: {\n facetId: string;\n value: string | { start: number; end: number };\n }) => {\n newFilteredResults = newFilteredResults.filter((result: Result) => {\n if (\n result.raw[facet.facetId] &&\n Array.isArray(result.raw[facet.facetId])\n ) {\n return (result.raw[facet.facetId] as string[]).includes(\n facet.value as string\n );\n } else {\n return (\n (result.raw[facet.facetId] as number) >=\n (facet.value as { start: number; end: number }).start &&\n (result.raw[facet.facetId] as number) <=\n (facet.value as { start: number; end: number }).end\n );\n }\n });\n }\n );\n\n return newFilteredResults;\n });\n }, [selectedFacets, originalResults]);\n\n useEffect(() => {\n if (headlessEngine) {\n bindUrlManager(headlessEngine);\n\n (resultList as ResultListType).subscribe(() => {\n setResultsState((resultList as ResultListType).state);\n });\n (facetBreadcrumb as BreadcrumbManager).subscribe(() =>\n setBreadcrumbsState((facetBreadcrumb as BreadcrumbManager).state)\n );\n\n if (defaultQuery) {\n const advancedQuerySearchActionCreator =\n loadAdvancedSearchQueryActions(headlessEngine);\n\n headlessEngine?.dispatch(\n advancedQuerySearchActionCreator.registerAdvancedSearchQueries({\n aq: defaultQuery\n })\n );\n }\n }\n\n let observer: MutationObserver;\n\n const targetNode = document.querySelector('.coveo-listing__promo-cards');\n\n if (targetNode) {\n const targetInnerHtml = targetNode.innerHTML;\n\n setPromoCards(targetInnerHtml);\n\n const config = { attributes: true, childList: true, subtree: true };\n\n const callback = (mutationList: MutationRecord[]) => {\n for (const mutation of mutationList) {\n if (mutation.type === 'childList') {\n setPromoCards(targetNode.innerHTML);\n }\n }\n };\n\n observer = new MutationObserver(callback);\n observer.observe(targetNode, config);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, []);\n\n const initAdvancedQuery = (value: string) => {\n let newQuery = '';\n const previousQuery = (headlessEngine as SearchEngine).state\n .advancedSearchQueries?.aq;\n\n if (previousQuery) {\n const parts = getAdvancedQueryParts(previousQuery);\n let newParts = parts.map(part => {\n if (part.includes(`@${switchFacetObj.field}`)) {\n part = `@${switchFacetObj.field} = ${value}`;\n return part.trim();\n }\n\n return part.trim();\n });\n\n newParts = newParts.filter((part, index) => {\n const nextPart = newParts[index + 1]\n ? newParts[index + 1].trim()\n : undefined;\n return !(part === 'AND' && (nextPart === '' || nextPart === undefined));\n });\n\n newQuery = newParts.join(' ');\n } else {\n newQuery = `@${switchFacetObj.field.trim()} = ${value.trim()}`;\n }\n\n newQuery.toString();\n if (switchFacetObj.values.length > 0) {\n (headlessEngine as SearchEngine)?.dispatch(\n advancedQuerySearchActionCreator.registerAdvancedSearchQueries({\n aq: newQuery\n })\n );\n }\n };\n\n useEffect(() => {\n if (defaultSwitchValue) {\n initAdvancedQuery(defaultSwitchValue.value);\n }\n }, []);\n\n const handleSwitchChange = () => {\n if (moduleRef.current) {\n const zipValue = moduleRef.current.querySelector(\n '.zip-form__zip-input'\n )?.value;\n const countryValue = moduleRef.current.querySelector(\n '.zip-form__country-select'\n )?.value;\n\n const url = switchFacetObj.redirectUrl\n .replace(DISTANCE_PLACEHOLDERS.zipCode, zipValue || '')\n .replace(DISTANCE_PLACEHOLDERS.country, countryValue || '');\n\n window.location.href = url;\n }\n };\n\n const renderFilters = (isMobile?: boolean) => {\n return (\n
    \n {facetsObj.map((facet, index) => (\n \n ))}\n
    \n );\n };\n\n const generateItemList = (results: Result[]) => {\n const resultList: SchemaItem[] = [];\n\n results.forEach((result, index) => {\n resultList.push({\n '@type': 'ListItem',\n position: index + 1,\n item: {\n '@type': 'Organization',\n name: result.raw[fieldsObject.contractorName] as string,\n url: result.raw[fieldsObject.link] as string,\n logo: result.raw[fieldsObject.image] as string,\n contactPoint: {\n '@type': 'ContactPoint',\n telephone: result.raw[fieldsObject.phone] as string,\n contactType: 'sales',\n areaServed: result.raw[fieldsObject.areaServed] as string\n }\n }\n });\n });\n\n return resultList;\n };\n\n const checkSecondCall = () => {\n if (breadcrumbsState.hasBreadcrumbs) return;\n\n const totalResults = headlessEngine?.state.pagination?.totalCountFiltered;\n if (totalResults === undefined) return;\n\n const selectedSort = sortFields.find(\n (sort: {\n title: string;\n criterion: { by: string; field: string; order: string };\n }) => {\n const headlessEng = headlessEngine as SearchEngine;\n if (\n !headlessEng ||\n !headlessEng.state ||\n !headlessEng.state.sortCriteria\n )\n return;\n if (sort.criterion.by === 'relevancy') {\n if (headlessEng?.state.sortCriteria === 'relevancy') {\n return true;\n }\n } else if (sort.criterion.by === 'field') {\n if (\n headlessEng?.state?.sortCriteria.includes(sort.criterion.field) &&\n headlessEng?.state?.sortCriteria.includes(sort.criterion.order)\n ) {\n return true;\n }\n }\n return false;\n }\n );\n\n const actualContext = (headlessEngine as SearchEngine).state.context\n ?.contextValues.sortingStrategy;\n\n if (selectedSort && selectedSort?.context?.secondaryThreshold > 0) {\n if (\n selectedSort.context.secondarySortingStrategy &&\n actualContext &&\n actualContext !== selectedSort.context.secondarySortingStrategy &&\n totalResults < selectedSort.context.secondaryThreshold &&\n !secondCall\n ) {\n const { setContext } = loadContextActions(\n headlessEngine as SearchEngine\n );\n setOriginalContext(selectedSort.context.sortingStrategy);\n resultsPerPage?.set(parseInt(limitSecondCall) || 20);\n headlessEngine?.dispatch(\n setContext({\n sortingStrategy: selectedSort.context.secondarySortingStrategy\n } as ContextPayload)\n );\n const { executeSearch } = loadSearchActions(\n headlessEngine as SearchEngine\n );\n const { logInterfaceChange } = loadSearchAnalyticsActions(\n headlessEngine as SearchEngine\n );\n headlessEngine?.dispatch(executeSearch(logInterfaceChange()));\n setSecondCall(true);\n } else if (\n actualContext === selectedSort.context.secondarySortingStrategy\n ) {\n setSecondCall(true);\n setOriginalResults(resultsState.results);\n setFilteredResults(resultsState.results);\n } else {\n setSecondCall(false);\n }\n }\n };\n\n useEffect(() => {\n if (\n resultsState.firstSearchExecuted &&\n resultsState.searchResponseId &&\n !resultsState.isLoading\n ) {\n checkSecondCall();\n const results = resultsState.results;\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: labelsObj.listName,\n description: labelsObj.listDescription,\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 }\n\n if (resultsState.firstSearchExecuted && !resultsState.isLoading) {\n const searchParams = new URLSearchParams(window.location.search);\n const storedData = getStoredGeolocationCountryAndZip();\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {\n sort_by: getSortFieldLabel(),\n zip_code: searchParams.get(DISTANCE_PLACEHOLDERS.zipCode)\n ? searchParams.get(DISTANCE_PLACEHOLDERS.zipCode)\n : storedData?.zip,\n zip_code_country: searchParams.get(DISTANCE_PLACEHOLDERS.country)\n ? searchParams.get(DISTANCE_PLACEHOLDERS.country)\n : storedData?.country,\n distance_filter: searchParams.get('distance'),\n business_type: moduleRef.current?.querySelector(\n '.toggle-switch__button.active'\n )?.textContent\n },\n event: 'results_viewed',\n event_category: 'results page viewed',\n event_action: 'contractor locator',\n event_label: resultsState.hasResults ? 'success' : 'failure'\n });\n }\n }, [resultsState]);\n\n const getSortFieldLabel = () => {\n return sortFields.find(\n (field: { criterion: { field: string; order: string; by: string } }) => {\n if (headlessEngine?.state.sortCriteria === 'relevancy') {\n return field.criterion.by === 'relevancy';\n }\n return (\n headlessEngine?.state?.sortCriteria?.includes(\n field.criterion.field\n ) &&\n headlessEngine?.state?.sortCriteria?.includes(field.criterion.order)\n );\n }\n ).title;\n };\n\n const handleClickResult = (e: React.MouseEvent) => {\n if (\n (\n (e.target as HTMLElement)?.parentNode as HTMLElement\n )?.classList.contains('certification-card__image') ||\n (\n (e.target as HTMLElement)?.parentNode as HTMLElement\n )?.classList.contains('link--inline')\n ) {\n const searchParams = new URLSearchParams(window.location.search);\n const storedData = getStoredGeolocationCountryAndZip();\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {\n sort_by: getSortFieldLabel(),\n zip_code: searchParams.get(DISTANCE_PLACEHOLDERS.zipCode)\n ? searchParams.get(DISTANCE_PLACEHOLDERS.zipCode)\n : storedData?.zip,\n zip_code_country: searchParams.get(DISTANCE_PLACEHOLDERS.country)\n ? searchParams.get(DISTANCE_PLACEHOLDERS.country)\n : storedData?.country,\n distance_filter: searchParams.get('distance'),\n business_type: moduleRef.current?.querySelector(\n '.toggle-switch__button.active'\n )?.textContent\n },\n event: 'result_click',\n event_category: 'result click',\n event_action: 'contractor locator'\n });\n }\n };\n\n return (\n \n
    \n
    \n \n \n \n {renderFacets !== 'false' && (\n \n {renderFilters(true)}\n \n )}\n
    \n
    \n {renderFacets !== 'false' && renderFilters()}\n
    \n \n
    \n \n
    \n
    \n \n \n
    \n \n
    \n \n \n \n \n \n \n \n );\n}\n\nexport default CityListing;\n"],"names":["ContractorCard","index","imgSource","imgAlt","contractorId","contractorType","contractorDBA","contractorName","contractorRating","contractorReviews","city","stateAbbreviation","distance","certificationsLabel","certifications","moreCertificationsLabel","viewAllCertificationsLabel","certificationImages","quoteLabel","phone","link","countryCode","isLead","result","modal","modalCloseButton","handleClick","options","el","disableBodyScroll","_a","handleClose","clearAllBodyScrollLocks","handleRequestAQuote","modalContractorInfo","openRequestAQuoteModal","useEffect","e","isInDialog","renderCertifications","values","a","b","aIndex","item","bIndex","React","createDataLayerString","certification","renderRequestAQuoteButton","ResultLink","RatingStars","formatPhoneNumber","resultTemplatesManager","buildResultTemplatesManager","headlessEngine","ProjectListingResultTemplate","fieldsToInclude","fieldsObject","labelsObj","DISTANCE_PLACEHOLDERS","dataset","geolocation","zipRegex","distanceObj","advancedQuerySearchActionCreator","loadAdvancedSearchQueryActions","DistanceFacet","defaultCountryValue","shouldSearch","id","useId","zipPlaceholders","defaultDistanceValue","getUrlParamValue","value","distanceRef","useRef","zip","setZip","useState","country","setCountry","isReady","setIsReady","latLong","setLatLong","shouldFirstSearch","setShouldFirstSearch","secondCallContext","useContext","SecondCall","executeDistanceFilter","newQuery","previousQuery","_b","countryOpt","getAdvancedQueryParts","part","_c","logInterfaceLoad","logInterfaceChange","loadSearchAnalyticsActions","executeSearch","loadSearchActions","setUrlParamValue","initZipValue","MASTHEAD_ZIP_FORM_EVENTS","updateDistanceQuery","latitude","longitude","global","body","newBody","handleFormSubmit","getLatLongFromZip","updateGeolocationDataProperties","handleDistanceChange","COVEO_PAGINATION_EVENTS","setContext","loadContextActions","ZipForm","facetsObj","facets","facet","buildNumericFacet","buildNumericRange","buildFacet","CityListing","switchFacet","renderFacets","limitSecondCall","switchFacetObj","defaultSwitchValue","containerRef","moduleRef","resultsState","setResultsState","resultList","breadcrumbsState","setBreadcrumbsState","facetBreadcrumb","secondCall","setSecondCall","originalResults","setOriginalResults","filteredResults","setFilteredResults","originalContext","setOriginalContext","selectedPage","setSelectedPage","selectedFacets","setSelectedFacets","promoCards","setPromoCards","dispatchPersonaViewEvent","newFilteredResults","bindUrlManager","defaultQuery","observer","targetNode","targetInnerHtml","config","callback","mutationList","mutation","initAdvancedQuery","newParts","nextPart","handleSwitchChange","zipValue","countryValue","url","renderFilters","isMobile","Facet","generateItemList","results","checkSecondCall","totalResults","selectedSort","sortFields","sort","headlessEng","actualContext","_d","_e","resultsPerPage","_f","_g","jsonldScript","structuredData","script","searchParams","storedData","getStoredGeolocationCountryAndZip","getSortFieldLabel","field","handleClickResult","ToggleSwitch","MobileFilters","QuerySummary","FacetBreadcrumbs","Sort","ResultList","Pagination"],"mappings":"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"}