{"version":3,"file":"index-59560ecd.js","sources":["../../../../src/scripts/coveo/modules/contractor-listing/card.tsx","../../../../src/scripts/coveo/modules/contractor-listing/templates.tsx","../../../../src/scripts/coveo/modules/contractor-listing/distance-facet.tsx","../../../../src/scripts/coveo/modules/contractor-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<HTMLElement>('.certifications-modal');\n  const modalCloseButton = modal?.querySelector<HTMLElement>(\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    return (\n      <div className=\"certification-card__certifications\">\n        <div className=\"certification-card__certifications-heading-wrapper\">\n          <h3 className=\"certification-card__certifications-heading\">\n            {certificationsLabel}\n          </h3>\n          <button\n            type=\"button\"\n            className=\"certification-card__certifications-tooltip btn--tooltip btn--tooltip-alt\"\n            title={viewAllCertificationsLabel}\n            onClick={handleClick}\n            data-layer={createDataLayerString([\n              {\n                event: 'modal_view',\n                event_category: 'modal overlay',\n                event_action: 'view',\n                event_attributes: {\n                  modalName: 'certifications'\n                }\n              }\n            ])}\n          >\n            <span className=\"sr-only\">{viewAllCertificationsLabel}</span>\n          </button>\n        </div>\n        {certifications && certifications.length > 0 && (\n          <ul className=\"certification-card__certifications-list\">\n            {certifications.map((certification, index) => (\n              <React.Fragment key={index}>\n                {index < 3 && (\n                  <li className=\"certification-card__certification\">\n                    <img\n                      src={\n                        certificationImages?.find(\n                          item => 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                  </li>\n                )}\n              </React.Fragment>\n            ))}\n            {certifications.length > 3 && (\n              <li className=\"certification-card__certification\">\n                {`(+${certifications.length - 3} ${moreCertificationsLabel})`}\n              </li>\n            )}\n          </ul>\n        )}\n      </div>\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        <button\n          className=\"btn btn--secondary certification-card__quote\"\n          onClick={handleRequestAQuote}\n        >\n          {quoteLabel}\n        </button>\n      );\n    } else {\n      return null;\n    }\n  };\n\n  return (\n    <article className=\"certification-card\">\n      <ResultLink\n        result={result}\n        link={link}\n        ariaLabel={`Go to ${contractorName}`}\n        className=\"certification-card__image-link certification-card__image-link--desktop\"\n        dataLayer={createDataLayerString([\n          {\n            event: 'view_profile_click',\n            event_category: 'contractor interactions',\n            event_action: 'view profile click',\n            event_label: '',\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          }\n        ])}\n      >\n        <picture className=\"picture certification-card__picture\">\n          <img\n            src={imgSource}\n            alt={imgAlt}\n            width={120}\n            height={120}\n            loading=\"lazy\"\n          />\n        </picture>\n      </ResultLink>\n      <div className=\"certification-card__wrapper\">\n        <div className=\"certification-card__content\">\n          <div>\n            <h2 className=\"certification-card__heading\">\n              <ResultLink\n                className=\"link--inline\"\n                target=\"_blank\"\n                link={link}\n                result={result}\n                dataLayer={createDataLayerString([\n                  {\n                    event: 'view_profile_click',\n                    event_category: 'contractor interactions',\n                    event_action: 'view profile click',\n                    event_label: '',\n                    event_attributes: {\n                      contractor_id: contractorId,\n                      contractor_name: contractorName,\n                      contractor_certificates_count:\n                        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                  }\n                ])}\n              >\n                <span>{contractorName}</span>\n              </ResultLink>\n            </h2>\n            {contractorReviews && contractorRating ? (\n              <RatingStars\n                rating={contractorRating}\n                total={contractorReviews}\n              />\n            ) : null}\n            <p className=\"certification-card__city\">\n              {city}, {stateAbbreviation} - {Number(distance).toFixed(1)} mi\n            </p>\n          </div>\n          <div>\n            <ResultLink\n              link={link}\n              result={result}\n              ariaLabel={`Go to ${contractorName}`}\n              className=\"certification-card__image-link certification-card__image-link--mobile\"\n              dataLayer={createDataLayerString([\n                {\n                  event: 'view_profile_click',\n                  event_category: 'find a contractor',\n                  event_action: 'view profile click',\n                  event_label: '',\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                }\n              ])}\n            >\n              <picture className=\"picture certification-card__picture\">\n                <img\n                  src={imgSource}\n                  alt={imgAlt}\n                  width={80}\n                  height={80}\n                  loading=\"lazy\"\n                />\n              </picture>\n            </ResultLink>\n            <div className=\"certification-card__contact certification-card__contact--desktop\">\n              {renderRequestAQuoteButton()}\n              {phone && (\n                <a\n                  href={`tel:${phone}`}\n                  className=\"link--inline link--icon-left certification-card__phone\"\n                  data-layer={createDataLayerString([\n                    {\n                      event_category: 'find a contractor',\n                      event_action: 'call us click phone number',\n                      event_label: '',\n                      event: 'contractor_leads',\n                      event_attributes: {\n                        contractor_id: contractorId,\n                        contractor_name: contractorName,\n                        contractor_certificates_count:\n                          certifications?.length || 0,\n                        contractor_rating: contractorRating,\n                        contractor_reviews_count: contractorReviews,\n                        contractor_type: contractorType,\n                        contractor_certificate_name: certifications?.[0] || null\n                      }\n                    }\n                  ])}\n                >\n                  <span className=\"sr-only\">Phone Number:</span>\n                  {formatPhoneNumber(phone)}\n                  <svg viewBox=\"0 0 13 16\" role=\"presentation\">\n                    <use xlinkHref=\"#red-phone-icon\"></use>\n                  </svg>\n                </a>\n              )}\n            </div>\n          </div>\n        </div>\n        {certifications && certifications.length > 0\n          ? renderCertifications()\n          : null}\n        <div className=\"certification-card__contact certification-card__contact--mobile\">\n          <a\n            href={`tel:${phone}`}\n            className=\"link--inline link--icon-left certification-card__phone\"\n            data-layer={createDataLayerString([\n              {\n                event_category: 'find a contractor',\n                event_action: 'call us click phone number',\n                event_label: '',\n                event: 'call_us_phone_number_click',\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_type: contractorType,\n                  contractor_certificate_name: certifications?.[0] || null\n                }\n              }\n            ])}\n          >\n            <span className=\"sr-only\">Phone Number:</span>\n            {formatPhoneNumber(phone)}\n            <svg viewBox=\"0 0 13 16\" role=\"presentation\">\n              <use xlinkHref=\"#red-phone-icon\"></use>\n            </svg>\n          </a>\n          {renderRequestAQuoteButton()}\n        </div>\n      </div>\n    </article>\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';\nimport ContractorCard from './card';\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    <li key={result.UniqueId}>\n      <ContractorCard\n        index={result.index}\n        id={result.UniqueId}\n        contractorId={result.raw[fieldsObject.contractorId] as string}\n        contractorType={result.raw[fieldsObject.contractorType] as string}\n        imgSource={result.raw[fieldsObject.image] as string}\n        imgAlt={result.raw[fieldsObject.imageAlt] as string}\n        contractorDBA={result.raw[fieldsObject.contractorDBA] as string}\n        contractorName={result.raw[fieldsObject.contractorName] as string}\n        contractorRating={result.raw[fieldsObject.rating] as number}\n        contractorReviews={result.raw[fieldsObject.range] as number}\n        city={result.raw[fieldsObject.city] as string}\n        stateAbbreviation={result.raw[fieldsObject.state] as string}\n        distance={result.raw[fieldsObject.distanceInMiles] as string}\n        certificationsLabel={labelsObj.certificationsCardLabel}\n        certifications={result.raw[fieldsObject.certifications] as string[]}\n        moreCertificationsLabel={labelsObj.moreCertificationsLabel}\n        viewAllCertificationsLabel={labelsObj.viewAllCertificationsLabel}\n        certificationImages={certificationImages}\n        quoteLabel={labelsObj.requestAQuoteLabel}\n        phone={result.raw[fieldsObject.phone] as string}\n        link={result.raw[fieldsObject.link] as string}\n        countryCode={result.raw[fieldsObject.countryCode] as string}\n        isLead={result.raw[fieldsObject.isLead] as number}\n        result={result}\n      />\n    </li>\n  )\n};\n\nresultTemplatesManager.registerTemplates(ProjectListingResultTemplate);\n","import React, { useId, useState, useRef, useEffect, useContext } from 'react';\nimport { COOKIE_NAMES, secureStorage } from '../../../helpers/global-storage';\nimport { ExtendedWindowType, headlessEngine } from '../../engine';\nimport {\n  loadAdvancedSearchQueryActions,\n  loadSearchActions,\n  loadSearchAnalyticsActions,\n  loadContextActions,\n  SearchEngine,\n  ContextPayload\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  setUrlParams\n} from '../../../helpers/queryString';\nimport {\n  getStoredGeolocationData,\n  getBrowserGeolocationData,\n  getLatLongFromZip,\n  getGeolocationDataFromUrlAndGoogle,\n  getLocationByIpAddress,\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 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<HTMLSelectElement>(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    window.dispatchEvent(new Event(COVEO_PAGINATION_EVENTS.reset));\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    const storedZip = getStoredGeolocationData();\n    const postalCodeUrl = getUrlParamValue('postalCode');\n\n    if (\n      (!postalCodeUrl && storedZip) ||\n      (storedZip && postalCodeUrl === storedZip.zip)\n    ) {\n      setZip(storedZip.zip);\n      setCountry(storedZip.country);\n      if (!storedZip.latitude && storedZip.zip && storedZip.country) {\n        const latLong = await getLatLongFromZip(\n          storedZip.zip,\n          storedZip.country\n        );\n        updateGeolocationDataProperties({\n          latitude: latLong?.latitude,\n          longitude: latLong?.longitude,\n          zip: storedZip.zip,\n          country: storedZip.country\n        });\n        setLatLong({\n          latitude: latLong?.latitude,\n          longitude: latLong?.longitude\n        });\n      } else {\n        setLatLong({\n          latitude: storedZip.latitude,\n          longitude: storedZip.longitude\n        });\n      }\n\n      if (distanceObj.shouldRedirect && distanceObj.redirect) {\n        window.location.href = `${window.location.origin}${distanceObj.redirect}`;\n      }\n      setTimeout(() => {\n        setIsReady(true);\n        window.dispatchEvent(new Event(MASTHEAD_ZIP_FORM_EVENTS.ready));\n      }, 100);\n      return;\n    }\n\n    const dataFromUrlAndGoogle = await getGeolocationDataFromUrlAndGoogle();\n\n    if (dataFromUrlAndGoogle) {\n      const isUserInput = getUrlParamValue('user');\n\n      setZip(dataFromUrlAndGoogle.zip);\n      setCountry(dataFromUrlAndGoogle.country);\n      setLatLong({\n        latitude: dataFromUrlAndGoogle.latitude,\n        longitude: dataFromUrlAndGoogle.longitude\n      });\n\n      if (isUserInput) {\n        const urlParams = new URLSearchParams(window.location.search);\n        urlParams.delete('user');\n        window.history.pushState(\n          {},\n          '',\n          `${window.location.pathname}?${urlParams}`\n        );\n\n        const userDataObj = {\n          address: '',\n          latitude: dataFromUrlAndGoogle.latitude,\n          longitude: dataFromUrlAndGoogle.longitude,\n          zip: dataFromUrlAndGoogle.zip,\n          country: dataFromUrlAndGoogle.country\n        };\n\n        secureStorage.set(\n          COOKIE_NAMES.geolocation,\n          JSON.stringify(userDataObj)\n        );\n      }\n      if (distanceObj.shouldRedirect && distanceObj.redirect) {\n        window.location.href = `${window.location.origin}${distanceObj.redirect}`;\n      }\n      setTimeout(() => {\n        setIsReady(true);\n        window.dispatchEvent(new Event(MASTHEAD_ZIP_FORM_EVENTS.ready));\n      }, 100);\n      return;\n    }\n\n    const browserLatLong = await getBrowserGeolocationData();\n\n    if (browserLatLong) {\n      const { latitude, longitude } = browserLatLong;\n\n      if (latitude && longitude) {\n        setLatLong({\n          latitude,\n          longitude\n        });\n\n        //Just in case that GAF wants to fix the issue with the geolocation\n        // const data = await getLocationDataFromLatLong(latitude, longitude);\n\n        const dataObj = {\n          address: '',\n          latitude,\n          longitude,\n          zip: '',\n          country: ''\n        };\n\n        secureStorage.set(COOKIE_NAMES.geolocation, JSON.stringify(dataObj));\n\n        // setCountry(geolocation.country);\n        if (distanceObj.shouldRedirect && distanceObj.redirect) {\n          window.location.href = `${window.location.origin}${distanceObj.redirect}`;\n        }\n        setTimeout(() => {\n          setIsReady(true);\n          //Just in case that GAF wants to fix the issue with the geolocation\n          window.dispatchEvent(new Event(MASTHEAD_ZIP_FORM_EVENTS.ready));\n        }, 100);\n        return;\n      }\n    }\n\n    const maxmindData = await getLocationByIpAddress();\n\n    if (maxmindData) {\n      setZip(maxmindData.zip);\n      setCountry(maxmindData.country);\n      setLatLong({\n        latitude: maxmindData.latitude,\n        longitude: maxmindData.longitude\n      });\n\n      if (distanceObj.shouldRedirect && distanceObj.redirect) {\n        window.location.href = `${window.location.origin}${distanceObj.redirect}`;\n      }\n      setTimeout(() => {\n        setIsReady(true);\n        window.dispatchEvent(new Event(MASTHEAD_ZIP_FORM_EVENTS.ready));\n      }, 100);\n      return;\n    }\n\n    const listing = document.querySelector(\n      '.contractor-listing'\n    ) as HTMLElement;\n    listing?.style.setProperty('display', 'none');\n\n    setTimeout(() => {\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    executeDistanceFilter();\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 (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\n    if (distanceObj.autofill) {\n      setUrlParams({\n        postalCode: zip,\n        countryCode: country\n      });\n\n      setZip(zip);\n      setCountry(country);\n\n      if (latLong && latLong.latitude && latLong.longitude) {\n        setLatLong(latLong);\n      }\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    <section\n      className=\"distance-facet\"\n      aria-labelledby={`distance-facet-heading${id}`}\n    >\n      <h2\n        id={`distance-facet-heading${id}`}\n        className=\"distance-facet__heading\"\n      >\n        {distanceObj.title}\n      </h2>\n      {isReady && (\n        <ZipForm\n          zipPlaceholders={zipPlaceholders}\n          defaultCountryValue={\n            country || defaultCountryValue?.toLowerCase() || 'us'\n          }\n          defaultZipValue={zip}\n          invalidZipMessage={distanceObj.invalidZipMessage}\n          zipRegex={zipRegex}\n          onSubmit={handleFormSubmit}\n        />\n      )}\n      <div className=\"field field--select distance-facet__distance\">\n        <label htmlFor={`select-distance${id}`} className=\"field__label\">\n          Distance\n        </label>\n        <select\n          ref={distanceRef}\n          defaultValue={defaultDistanceValue}\n          name={`select-distance${id}`}\n          id={`select-distance${id}`}\n          className=\"field__select\"\n          onChange={handleDistanceChange}\n        >\n          {distanceObj.values.map((value, index) => (\n            <option key={index} value={value.value}>\n              {value.label}\n            </option>\n          ))}\n        </select>\n      </div>\n    </section>\n  );\n}\n\nexport default DistanceFacet;\n","import React, { useRef, useEffect, useState } from 'react';\nimport {\n  ContextPayload,\n  Result,\n  ResultList as ResultListType,\n  SearchEngine,\n  buildFacet,\n  buildNumericFacet,\n  buildNumericRange,\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 { MASTHEAD_ZIP_FORM_EVENTS } from '../../../react-components/contractor-locator-listing/helpers';\nimport SecondCall from '../../components/second-call-context';\nimport { dispatchPersonaViewEvent } from '../../../helpers/personalize';\n\nconst facetsObj = facets.map(facet => {\n  return {\n    title: facet.title,\n    rangeLabels:\n      facet.sortCriteria === 'ascending'\n        ? facet.rangeLabels\n        : facet.rangeLabels?.reverse(),\n    rangeStars: facet.rangeStars,\n    certificationsLabel: facet.certificationsLabel,\n    controller: facet.range\n      ? 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      : buildFacet(headlessEngine as SearchEngine, {\n          options: {\n            field: facet.field,\n            filterFacetCount: true,\n            numberOfValues: 999\n          }\n        }),\n    customOrder: facet.customOrder\n  };\n});\n\ntype ContractorListingProps = {\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 ContractorListing({\n  switchFacet,\n  renderFacets,\n  defaultCountryValue,\n  limitSecondCall\n}: ContractorListingProps) {\n  const switchFacetObj = JSON.parse(switchFacet) as SwitchFacetProps;\n  const defaultSwitchValue = switchFacetObj.values.find(value => value.default);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const moduleRef = useRef<HTMLDivElement | null>(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  const [ready, setReady] = useState(false);\n  const [secondCall, setSecondCall] = useState(false);\n  const [originalResults, setOriginalResults] = useState<Result[]>([]);\n  const [filteredResults, setFilteredResults] = useState<Result[]>([]);\n  const [originalContext, setOriginalContext] = useState<undefined | string>(\n    undefined\n  );\n  const [selectedPage, setSelectedPage] = useState<number>(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    window.addEventListener(MASTHEAD_ZIP_FORM_EVENTS.ready, () =>\n      setReady(true)\n    );\n\n    if (headlessEngine) {\n      bindUrlManager(headlessEngine);\n\n      (resultList as ResultListType).subscribe(() => {\n        setResultsState((resultList as ResultListType).state);\n      });\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    return () => {\n      window.removeEventListener(MASTHEAD_ZIP_FORM_EVENTS.ready, () =>\n        setReady(true)\n      );\n    };\n  }, []);\n\n  useEffect(() => {\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  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    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  useEffect(() => {\n    if (ready) {\n      dispatchPersonaViewEvent();\n    }\n  }, [ready]);\n\n  const handleSwitchChange = () => {\n    if (moduleRef.current) {\n      const zipValue = moduleRef.current.querySelector<HTMLInputElement>(\n        '.zip-form__zip-input'\n      )?.value;\n      const countryValue = moduleRef.current.querySelector<HTMLSelectElement>(\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      <div className=\"contractor-listing__facets\">\n        {facetsObj.map((facet, index) => (\n          <Facet\n            key={`${index}-${facet.title}`}\n            controller={facet.controller}\n            title={facet.title}\n            certificationsLabel={facet.certificationsLabel}\n            customOrder={facet.customOrder}\n            defaultExpanded={isMobile ? false : true}\n            rangeLabels={facet.rangeLabels}\n            rangeStarLabels={facet.rangeStars}\n          />\n        ))}\n      </div>\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 ===\n        selectedSort.context.secondarySortingStrategy.toString()\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  if (!ready) {\n    return (\n      <div className=\"sr-only\">\n        <DistanceFacet defaultCountryValue={defaultCountryValue} />\n      </div>\n    );\n  }\n\n  return (\n    <SecondCall.Provider\n      value={{\n        secondCall,\n        limitValue: parseInt(limitSecondCall),\n        originalContext,\n        setOriginalContext,\n        originalResults,\n        filteredResults,\n        setFilteredResults,\n        selectedPage,\n        setSelectedPage,\n        selectedFacets,\n        setSelectedFacets\n      }}\n    >\n      <div className=\"contractor-listing__wrapper row\" ref={moduleRef}>\n        <div className=\"contractor-listing__left-wrapper\">\n          <DistanceFacet\n            defaultCountryValue={defaultCountryValue}\n            shouldSearch={true}\n          />\n          <ToggleSwitch\n            onValueChange={handleSwitchChange}\n            values={switchFacetObj.values}\n            defaultValue={defaultSwitchValue?.value}\n          />\n          <div\n            className=\"contractor-listing__mobile-filters\"\n            ref={containerRef}\n          >\n            {renderFacets !== 'false' && (\n              <MobileFilters\n                label={labelsObj.mobileFilterBy}\n                containerRef={containerRef}\n                refinementLayer={true}\n              >\n                {renderFilters(true)}\n              </MobileFilters>\n            )}\n          </div>\n          <div className=\"contractor-listing__desktop-filters\">\n            {renderFacets !== 'false' && renderFilters()}\n          </div>\n          <div\n            className=\"contractor-listing__promo-cards contractor-listing__promo-cards--desktop\"\n            dangerouslySetInnerHTML={{ __html: promoCards }}\n          />\n        </div>\n        <div\n          className=\"contractor-listing__right-wrapper\"\n          onMouseDown={handleClickResult}\n        >\n          <div className=\"contractor-listing__history-wrapper\">\n            <div className=\"contractor-listing__summary\">\n              <QuerySummary />\n              <FacetBreadcrumbs\n                clearLabel={labelsObj.clearAll}\n                extraClasses=\"contractor-listing__breadcrumbs--mobile\"\n              />\n            </div>\n            <Sort\n              sortByLabel={labelsObj.sortBy}\n              extraClasses={`contractor-listing__sort ${\n                sortFields.length === 1 ? 'disabled' : ''\n              }`}\n            />\n          </div>\n          <FacetBreadcrumbs\n            clearLabel={labelsObj.clearAll}\n            extraClasses=\"contractor-listing__breadcrumbs--desktop\"\n          />\n          <ResultList\n            controller={resultList as ResultListType}\n            className=\"contractor-listing__results\"\n            resultTemplatesManager={resultTemplatesManager}\n            preventFirstCall={true}\n          />\n          <Pagination />\n          <div\n            className=\"contractor-listing__promo-cards contractor-listing__promo-cards--mobile\"\n            dangerouslySetInnerHTML={{ __html: promoCards }}\n          />\n        </div>\n      </div>\n    </SecondCall.Provider>\n  );\n}\n\nexport default ContractorListing;\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","React","createDataLayerString","certification","item","renderRequestAQuoteButton","ResultLink","RatingStars","formatPhoneNumber","resultTemplatesManager","buildResultTemplatesManager","headlessEngine","ProjectListingResultTemplate","fieldsToInclude","fieldsObject","labelsObj","DISTANCE_PLACEHOLDERS","dataset","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","COVEO_PAGINATION_EVENTS","setUrlParamValue","initZipValue","storedZip","getStoredGeolocationData","postalCodeUrl","getLatLongFromZip","updateGeolocationDataProperties","MASTHEAD_ZIP_FORM_EVENTS","dataFromUrlAndGoogle","getGeolocationDataFromUrlAndGoogle","isUserInput","urlParams","userDataObj","secureStorage","COOKIE_NAMES","browserLatLong","getBrowserGeolocationData","latitude","longitude","dataObj","maxmindData","getLocationByIpAddress","listing","updateDistanceQuery","global","body","newBody","handleFormSubmit","setContext","loadContextActions","setUrlParams","handleDistanceChange","ZipForm","facetsObj","facets","facet","buildNumericFacet","buildNumericRange","buildFacet","ContractorListing","switchFacet","renderFacets","limitSecondCall","switchFacetObj","defaultSwitchValue","containerRef","moduleRef","resultsState","setResultsState","resultList","breadcrumbsState","setBreadcrumbsState","facetBreadcrumb","ready","setReady","secondCall","setSecondCall","originalResults","setOriginalResults","filteredResults","setFilteredResults","originalContext","setOriginalContext","selectedPage","setSelectedPage","selectedFacets","setSelectedFacets","promoCards","setPromoCards","bindUrlManager","defaultQuery","newFilteredResults","initAdvancedQuery","newParts","nextPart","observer","targetNode","targetInnerHtml","config","callback","mutationList","mutation","dispatchPersonaViewEvent","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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"}