{"version":3,"file":"result-list-contractor-c48b3b2f.js","sources":["../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/card.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/autocomplete.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/stars.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/contractor.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/result-list-contractor.tsx"],"sourcesContent":["import React from 'react';\nimport { CardProps } from '../../components/request-a-quote-form/types';\n\nconst Card: React.FC<CardProps> = ({\n  heading,\n  errorHeading,\n  copy,\n  phone,\n  linksHeading,\n  firstLink,\n  secondLink,\n  submitError,\n  errorLabel\n}) => {\n  return (\n    <>\n      {copy && !submitError && (\n        <>\n          <h2 className=\"request-a-quote__card-heading\">{heading}</h2>\n          <p\n            className={`request-a-quote__card-copy${linksHeading ? '--ty' : ''}`}\n          >\n            {copy}\n          </p>\n        </>\n      )}\n      {errorLabel && submitError && (\n        <>\n        <h2 className=\"request-a-quote__card-heading error\">\n          {errorHeading ? errorHeading : heading}\n        </h2>\n        <div\n          className={`request-a-quote__card-copy${linksHeading ? '--ty' : ''}`}\n          dangerouslySetInnerHTML={{ __html: errorLabel }}\n        ></div>\n        </>\n      )}\n\n      {(firstLink || secondLink) && (\n        <>\n          {linksHeading && (\n            <p className=\"request-a-quote__card-subheading\">{linksHeading}</p>\n          )}\n          <ul className=\"request-a-quote__card-links\">\n            {firstLink && firstLink.href && (\n              <li>\n                <a href={firstLink.href} className=\"link link--arrow\">\n                  <span>{firstLink.label}</span>\n                </a>\n              </li>\n            )}\n            {secondLink && secondLink.href && (\n              <li>\n                <a href={secondLink.href} className=\"link link--arrow\">\n                  <span>{secondLink.label}</span>\n                </a>\n              </li>\n            )}\n          </ul>\n        </>\n      )}\n\n      {phone && (\n        <a\n          className=\"btn btn--secondary request-a-quote__card-btn\"\n          href={`tel:${phone.trim().replace(/\\D+/g, '')}`}\n        >\n          {phone}\n        </a>\n      )}\n    </>\n  );\n};\n\nexport default Card;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { AutocompleteProp } from './types';\nimport { getLocationDataFromAddress } from '../../../helpers/geolocation';\n\nconst Autocomplete: React.FC<AutocompleteProp> = ({\n  label,\n  name,\n  placeholder,\n  required,\n  type,\n  formDataValue,\n  setFormData,\n  handleValidation,\n  onBlur\n}) => {\n  const autocompleteRef = useRef<google.maps.places.Autocomplete | null>(null);\n  const autocompleteInput = useRef(null);\n  const [localValue, setLocalValue] = useState('');\n  const options = {\n    componentRestrictions: { country: ['us', 'ca'] },\n    fields: ['formatted_address', 'address_components', 'geometry'],\n    types: ['postal_code', 'route']\n  };\n\n  const initGoogleMaps = async () => {\n    if (formDataValue) {\n      const {\n        zip,\n        country,\n        latitude,\n        longitude,\n        city,\n        state,\n        street,\n        streetNumber,\n        secondStreet\n      } = await getLocationDataFromAddress(formDataValue);\n\n      if (\n        zip &&\n        latitude &&\n        longitude &&\n        street &&\n        streetNumber &&\n        (country || city || state || secondStreet)\n      ) {\n        handleValidation('true', name, 'autocomplete');\n      } else {\n        handleValidation('', name, 'autocomplete');\n        onBlur();\n      }\n    }\n\n    if (autocompleteInput.current) {\n      autocompleteRef.current = new window.google.maps.places.Autocomplete(\n        autocompleteInput.current as HTMLInputElement,\n        options\n      );\n    }\n\n    if (autocompleteRef.current) {\n      autocompleteRef.current.addListener(\n        'place_changed',\n        async function updateAutocomplete() {\n          const place = await (\n            autocompleteRef.current as google.maps.places.Autocomplete\n          ).getPlace();\n\n          if (place.formatted_address) {\n            setLocalValue(place.formatted_address);\n          }\n\n          const _place = place.address_components as {\n            types: string[];\n            long_name: string;\n            short_name: string;\n            geometry: object;\n          }[];\n\n          const _location = place.geometry?.location as {\n            lat: () => number;\n            lng: () => number;\n          };\n\n          const zipCode = _place.find(item =>\n            item.types.includes('postal_code')\n          );\n          const latitude = _location.lat();\n          const longitude = _location.lng();\n          const street = _place.find(item => item.types.includes('route'));\n          const streetNumber = _place.find(item =>\n            item.types.includes('street_number')\n          );\n          const secondStreet = _place.find(item =>\n            item.types.includes('subpremise')\n          );\n          const city = _place.find(item => item.types.includes('locality'));\n          const state = _place.find(item =>\n            item.types.includes('administrative_area_level_1')\n          );\n          const country = _place.find(item => item.types.includes('country'));\n\n          setFormData(prevFormData => ({\n            ...prevFormData,\n            [name]: place.formatted_address ? place.formatted_address : '',\n            ['zip']: zipCode ? zipCode.long_name : '',\n            ['latitude']: latitude ? latitude : '',\n            ['longitude']: longitude ? longitude : '',\n            ['street']: `${streetNumber?.short_name || ''} ${\n              street?.short_name || ''\n            }`,\n            ['secondStreet']: secondStreet ? secondStreet.short_name : '',\n            ['city']: city ? city.long_name : '',\n            ['state']: state ? state.short_name : '',\n            ['country']: country ? country.short_name : ''\n          }));\n\n          if (\n            streetNumber &&\n            street?.short_name &&\n            city &&\n            state &&\n            zipCode?.long_name\n          ) {\n            handleValidation('true', name, 'autocomplete');\n          } else {\n            handleValidation('', name, 'autocomplete');\n          }\n        }\n      );\n    }\n  };\n\n  useEffect(() => {\n    if (formDataValue) {\n      setLocalValue(formDataValue);\n    }\n\n    if (window.google?.maps) {\n      initGoogleMaps();\n    } else {\n      const maxAttempts = 20;\n      let attempts = 0;\n      const interval = setInterval(() => {\n        attempts++;\n        if (window.google?.maps) {\n          clearInterval(interval);\n          initGoogleMaps();\n        } else if (attempts >= maxAttempts) {\n          clearInterval(interval);\n        }\n      }, 500);\n    }\n  }, []);\n\n  return (\n    <input\n      className=\"field__input\"\n      type={type}\n      ref={autocompleteInput}\n      id={label.trim().replace(' ', '_').toLowerCase()}\n      name={name}\n      value={localValue}\n      placeholder={placeholder}\n      required={required === 'true' ? true : false}\n      onInput={e => setLocalValue(e.currentTarget.value)}\n      onChange={() => {\n        handleValidation('', name, 'autocomplete');\n      }}\n      onBlur={onBlur}\n    />\n  );\n};\n\nexport default Autocomplete;\n","import React from 'react';\nimport { StarsProps } from './types';\n\nfunction Stars({ rating, numberOfReviews }: StarsProps) {\n  const stars = Array.from(Array(5).keys());\n  const starFill = (rating: number, index: number) => {\n    const starValue = Number((rating - index).toFixed(2));\n\n    if (starValue >= 0.8) {\n      return 'rating-star--filled';\n    }\n\n    if (starValue >= 0.3) {\n      return 'rating-star--half-filled';\n    }\n\n    return '';\n  };\n\n  return (\n    <div className=\"rating-stars\">\n      <div className=\"rating-stars__stars\">\n        {stars.map(index => (\n          <div\n            key={index}\n            className={`rating-star ${starFill(rating, index)}`}\n          ></div>\n        ))}\n      </div>\n      <span className=\"rating-stars__average\">{rating}</span>\n      <span className=\"rating-stars__total\">({numberOfReviews})</span>\n    </div>\n  );\n}\nexport default Stars;\n","import React from 'react';\nimport { ContractorCheckboxProps } from './types';\nimport { disableBodyScroll } from 'body-scroll-lock';\nimport type { BodyScrollOptions } from 'body-scroll-lock';\nimport Stars from './stars';\nimport { certificationImages } from '../../controllers/controller';\nimport { createDataLayerString } from '../../../helpers/helpers';\n\nfunction ContractorCheckbox({\n  formData,\n  handleChange,\n  review,\n  certifications,\n  modalId\n}: ContractorCheckboxProps) {\n  let certificationImagesArray: { facetName: string; iconUrl: string }[] = [];\n\n  const formElement = document.querySelector(\n    '.contractor-request-a-quote-form'\n  );\n  const dataCertificationImages = formElement?.getAttribute(\n    'data-certification-images'\n  );\n\n  if (dataCertificationImages) {\n    try {\n      certificationImagesArray = JSON.parse(dataCertificationImages);\n    } catch (error) {\n      console.error('Error parsing certification images:', error);\n    }\n  } else if (certificationImages.length > 0) {\n    certificationImagesArray = certificationImages;\n  }\n\n  const modal = document.querySelector<HTMLElement>(`#${modalId}`);\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\n  return (\n    <div\n      key={review.id}\n      className=\"request-a-quote__content-reviews-checkbox field field--checkbox\"\n    >\n      <input\n        className=\"field__checkbox-input\"\n        type=\"checkbox\"\n        name={review.name}\n        id={review.id}\n        checked={\n          (formData[review.name] as string[])?.length > 0\n            ? (formData[review.name] as string[]).includes(review.id)\n            : false\n        }\n        onChange={e => handleChange(e, review)}\n      />\n      <div className=\"field__checkbox-label-wrapper\">\n        <label className=\"field__checkbox-label\" htmlFor={review.id}>\n          <span className=\"field__checkbox-label-text\">\n            {review.contractorName}\n          </span>\n          {review.image && (\n            <picture className=\"request-a-quote__content-reviews-image-wrapper\">\n              <img\n                src={review.image}\n                alt={review.imageAlt}\n                width=\"50\"\n                height=\"33\"\n                className=\"request-a-quote__content-reviews-image\"\n              />\n            </picture>\n          )}\n          <Stars\n            rating={review.rating}\n            numberOfReviews={review.numberOfReviews}\n          />\n          <span className=\"request-a-quote__content-reviews-city\">{`${review.city}, ${review.state} - ${Number(review.distance).toFixed(1)} mi`}</span>\n        </label>\n        {certifications.certificates.length > 0 && (\n          <>\n            <div className=\"request-a-quote__content-reviews-certifications-heading-wrapper\">\n              <h3 className=\"request-a-quote__content-reviews-certifications-heading\">\n                {certifications.title}\n              </h3>\n              <button\n                type=\"button\"\n                className=\"btn--tooltip btn--tooltip-alt\"\n                title={certifications.viewAllCertificationsLabel}\n                onClick={handleClick}\n                data-layer={createDataLayerString([\n                  {\n                    event: 'modal_interaction',\n                    event_category: 'modals',\n                    event_action: 'view',\n                    event_attributes: {\n                      modalName: 'certifications'\n                    }\n                  }\n                ])}\n              >\n                <span className=\"sr-only\">\n                  {certifications.viewAllCertificationsLabel}\n                </span>\n              </button>\n            </div>\n\n            <ul className=\"request-a-quote__content-reviews-certifications-list\">\n              {certifications.certificates.map(certification => (\n                <li\n                  key={certification}\n                  className=\"request-a-quote__content-reviews-certification\"\n                >\n                  <img\n                    src={\n                      certificationImagesArray?.find(\n                        (item: { facetName: string }) =>\n                          item.facetName === certification\n                      )?.iconUrl\n                    }\n                    alt={certification}\n                    role=\"presentation\"\n                    className=\"request-a-quote__content-reviews__certification-icon\"\n                  />\n                  <span className=\"request-a-quote__content-reviews__certification-name\">\n                    {certification}\n                  </span>\n                </li>\n              ))}\n            </ul>\n          </>\n        )}\n      </div>\n    </div>\n  );\n}\nexport default ContractorCheckbox;\n","import React, { useEffect, useState } from 'react';\nimport {\n  buildResultTemplatesManager,\n  ResultTemplate,\n  Result,\n  SearchEngine\n} from '@coveo/headless';\n\nimport { ExtendedWindowType, headlessEngineModal } from '../../engine';\nimport {\n  fieldsToInclude,\n  fieldsObjectModal\n} from '../../controllers/controller';\nimport Contractor from './contractor';\nimport { ContractorCheckboxProps, ResultListContractorProps } from './types';\nimport Loader from '../../../react-components/listing-states/loader';\n\ntype ContractorCheckboxResultProps = Result & ContractorCheckboxProps;\n\nfunction ResultListContractor({\n  formData,\n  handleChange,\n  controller,\n  copy,\n  contractorId,\n  reviewName,\n  certificationsCardLabel,\n  viewAllCertificationsLabel,\n  certificationsModalId\n}: ResultListContractorProps) {\n  const { dataset } = document.getElementsByClassName(\n    'coveo-listing__data-wrapper-modal'\n  )[0] as HTMLElement;\n  const loaderText = dataset.loaderText as string;\n  const [state, setState] = useState(controller.state);\n\n  useEffect(() => {\n    controller.subscribe(() => setState(controller.state));\n  }, []);\n\n  const resultTemplatesManager = buildResultTemplatesManager(\n    headlessEngineModal as SearchEngine\n  );\n\n  const RequestAQuoteContractorTemplate: ResultTemplate = {\n    conditions: [],\n    fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n    content: (result: ContractorCheckboxResultProps) => {\n      (window as ExtendedWindowType).dataLayer.push({\n        event_attributes: {\n          contractor_id: result.raw[fieldsObjectModal.contractorId],\n          contractor_name: result.raw[fieldsObjectModal.contractorName],\n          contractor_certificates_count: (\n            result.raw[fieldsObjectModal.contractorCertificates] as string[]\n          )?.length,\n          contractor_rating: parseFloat(\n            result.raw[fieldsObjectModal.rating] as string\n          ),\n          contractor_reviews_count:\n            result.raw[fieldsObjectModal.numberOfReviews],\n          contractor_certificate_name: (\n            result.raw[fieldsObjectModal.contractorCertificates] as string[]\n          )?.[0],\n          contractor_type: result.raw[fieldsObjectModal.contractorType]\n        },\n        event: 'contractor_leads',\n        event_category: 'find a contractor',\n        event_action: 'contractor leads',\n        event_label: ''\n      });\n\n      return (\n        <Contractor\n          formData={formData}\n          handleChange={handleChange}\n          key={result.uniqueId}\n          review={{\n            name: reviewName,\n            contractorDBA: result.raw[\n              fieldsObjectModal.contractorDBA\n            ] as string,\n            contractorName: result.raw[\n              fieldsObjectModal.contractorName\n            ] as string,\n            city: result.raw[fieldsObjectModal.city] as string,\n            state: result.raw[fieldsObjectModal.state] as string,\n            distance: result.raw[\n              fieldsObjectModal.distanceInMiles\n            ] as string,\n            rating: parseFloat(result.raw[fieldsObjectModal.rating] as string),\n            numberOfReviews: result.raw[\n              fieldsObjectModal.numberOfReviews\n            ] as string,\n            id: result.raw[fieldsObjectModal.contractorId] as string,\n            image: result.raw[fieldsObjectModal.image] as string,\n            imageAlt: result.raw[fieldsObjectModal.imageAlt] as string\n          }}\n          certifications={{\n            title: certificationsCardLabel,\n            certificates: result.raw[fieldsObjectModal.contractorCertificates] as string[],\n            viewAllCertificationsLabel: viewAllCertificationsLabel\n          }}\n          modalId={certificationsModalId}\n        ></Contractor>\n      );\n    }\n  };\n\n  resultTemplatesManager.registerTemplates(RequestAQuoteContractorTemplate);\n\n  if (state.isLoading || !state.firstSearchExecuted) {\n    return <Loader loaderText={loaderText} />;\n  }\n\n  let contractorNumber = 0;\n  return (\n    <>\n      {state.results?.length > 0 ? (\n        <>\n          {state.results?.map(result => {\n            if (result.raw[fieldsObjectModal.contractorId] === contractorId)\n              return null;\n            if (contractorNumber === 3) return null;\n            contractorNumber++;\n            const template = resultTemplatesManager.selectTemplate(\n              result\n            ) as CallableFunction;\n\n            if (!template)\n              throw new Error(\n                `No result template provided for ${result.title}.`\n              );\n\n            return template(result);\n          })}\n        </>\n      ) : (\n        <p className=\"request-a-quote__card-copy \">{copy}</p>\n      )}\n    </>\n  );\n}\n\nexport default ResultListContractor;\n"],"names":["Card","heading","errorHeading","copy","phone","linksHeading","firstLink","secondLink","submitError","errorLabel","React","Autocomplete","label","name","placeholder","required","type","formDataValue","setFormData","handleValidation","onBlur","autocompleteRef","useRef","autocompleteInput","localValue","setLocalValue","useState","options","initGoogleMaps","zip","country","latitude","longitude","city","state","street","streetNumber","secondStreet","getLocationDataFromAddress","place","_place","_location","_a","zipCode","item","prevFormData","useEffect","attempts","interval","e","Stars","rating","numberOfReviews","stars","starFill","index","starValue","ContractorCheckbox","formData","handleChange","review","certifications","modalId","certificationImagesArray","formElement","dataCertificationImages","error","certificationImages","modal","handleClick","el","disableBodyScroll","createDataLayerString","certification","ResultListContractor","controller","contractorId","reviewName","certificationsCardLabel","viewAllCertificationsLabel","certificationsModalId","dataset","loaderText","setState","resultTemplatesManager","buildResultTemplatesManager","headlessEngineModal","RequestAQuoteContractorTemplate","fieldsToInclude","result","fieldsObjectModal","_b","Contractor","Loader","contractorNumber","template"],"mappings":"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"}