{"version":3,"file":"index-509d9bc4.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/step1-form.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/contractor.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/result-list-contractor.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/step2-reviews.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/request-a-quote-form.tsx","../../../../src/scripts/coveo/components/request-a-quote-form/index.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, { useState, useEffect, useRef, useMemo } from 'react';\nimport { StepFormsProps, FormProp } from './types';\nimport Autocomplete from './autocomplete';\nimport { ExtendedWindowType } from '../../engine';\nimport { DataLayerObject } from '../../../helpers/global-types';\n\nconst StepForms: React.FC<StepFormsProps> = ({\n  inputs,\n  errorMessage,\n  addressErrorMessage,\n  formData,\n  setFormData,\n  setIsFormValid,\n  isModal,\n  contractorData,\n  termsConditionsName,\n  checkbox,\n  copy,\n  twoColumns\n}) => {\n  const [firstLoad, setFirstLoad] = useState(true);\n  const [scrollable, setScrollable] = useState(false);\n  const content = useRef(null);\n  const autocompleteInput = useRef(null);\n  const [formValidation, setFormValidation] = useState<{\n    [key: string]: boolean | string;\n  }>({});\n  const [fieldTouched, setFieldTouched] = useState<{ [key: string]: boolean }>(\n    {}\n  );\n\n  const [interact, setInteract] = useState(false);\n  const requiredValues = useMemo(() => {\n    const required = {};\n    const numRequired = inputs.reduce((num: number, object: FormProp) => {\n      if (object.required === 'true') {\n        Object.assign(required, { [object.name]: 'required' });\n        num++;\n      }\n      return num;\n    }, 0);\n\n    setFormValidation(required);\n\n    return numRequired;\n  }, []);\n\n  useEffect(() => {\n    const formValidationArray = Object.entries(formValidation);\n\n    if (!requiredValues) {\n      return;\n    }\n    if (firstLoad) {\n      setFirstLoad(false);\n      handleValidation('');\n      if (formData.address !== '')\n        setFormValidation(prevFormValidation => ({\n          ...prevFormValidation,\n          address: true\n        }));\n      if (formData.terms !== undefined && formData.terms !== true) {\n        setFormValidation(prevFormValidation => ({\n          ...prevFormValidation,\n          terms: false\n        }));\n      }\n    } else {\n      if (\n        formValidationArray.findIndex(\n          object => object[1] === false || object[1] === 'required'\n        ) === -1\n      ) {\n        setIsFormValid(true);\n      } else {\n        setIsFormValid(false);\n      }\n    }\n  }, [formValidation]);\n\n  const handleAutocomplete = (value: string, name: string, type: string) => {\n    if (type === 'autocomplete') {\n      setFormValidation(prevFormValidation => ({\n        ...prevFormValidation,\n        [name]: value ? true : false\n      }));\n    }\n  };\n\n  const handleAddressBlur = () => {\n    setInteract(true);\n    setFieldTouched(prevFieldTouched => ({\n      ...prevFieldTouched,\n      address: true\n    }));\n  };\n\n  const handleValidation = (name: string) => {\n    if (interact) {\n      const global = window as ExtendedWindowType;\n      if (\n        global.dataLayer.findIndex((layer: DataLayerObject) => {\n          layer.event === 'request_quote_start';\n        }) === -1\n      ) {\n        global.dataLayer?.push({\n          event: 'request_quote_start',\n          event_category: 'find a contractor',\n          event_action: 'form start',\n          ...(contractorData && {\n            event_attributes: {\n              contractor_id: contractorData?.id,\n              contractor_name: contractorData?.contractorName,\n              contractor_certificates_count:\n                contractorData?.numberOfCertificates,\n              contractor_rating: contractorData?.rating,\n              contractor_reviews_count: contractorData?.numberOfReviews,\n              contractor_type: contractorData?.type,\n              form_name: 'request a quote form',\n              form_type: 'contractor locator'\n            }\n          })\n        });\n      }\n    }\n    if (!content.current) {\n      return;\n    }\n\n    let _fieldTouched: { [key: string]: boolean } = {};\n\n    if (name !== '') {\n      _fieldTouched[name] = true;\n    }\n    let _formValidation = formValidation;\n    (content.current as HTMLElement)\n      ?.querySelectorAll('.field__control')\n      .forEach(input => {\n        const type = (input as HTMLInputElement).type;\n        const name = (input as HTMLInputElement).name;\n        const value =\n          type === 'checkbox'\n            ? (input as HTMLInputElement).checked\n            : (input as HTMLInputElement).value;\n        const textarea = (input as HTMLInputElement).tagName === 'TEXTAREA';\n\n        if (value && !fieldTouched[name]) {\n          _fieldTouched = { ..._fieldTouched, [name]: true };\n        }\n\n        if (name === 'address') {\n          return;\n        }\n        if (textarea) {\n          _formValidation = {\n            ..._formValidation,\n            [name]: true\n          };\n        } else {\n          if (!value) {\n            _formValidation = {\n              ..._formValidation,\n              [name]: false\n            };\n            return;\n          } else {\n            if (type !== 'tel' && type !== 'email') {\n              _formValidation = {\n                ..._formValidation,\n                [name]: true\n              };\n            } else {\n              if (type === 'tel') {\n                _formValidation = {\n                  ..._formValidation,\n                  [name]: /^\\(\\d{3}\\) \\d{3}-\\d{4}/g.test(value as string)\n                };\n              }\n              if (type === 'email') {\n                _formValidation = {\n                  ..._formValidation,\n                  [name]: /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g.test(\n                    value as string\n                  )\n                };\n              }\n            }\n          }\n        }\n      });\n\n    setFieldTouched(prevFieldTouched => ({\n      ...prevFieldTouched,\n      ..._fieldTouched\n    }));\n\n    setFormValidation(prevFormValidation => ({\n      ...prevFormValidation,\n      ..._formValidation\n    }));\n  };\n\n  const checkValidation = (\n    value: boolean | string | undefined,\n    name: string\n  ) => {\n    if (value !== undefined && value !== 'required' && fieldTouched[name]) {\n      return value ? '' : 'field--error';\n    }\n    if (fieldTouched[name] && value === 'required' && name === 'address') {\n      return 'field--error';\n    }\n    return '';\n  };\n\n  const formatPhoneNumber = (value: string) => {\n    const cleaned = value.trim().replace(/\\D/g, '');\n    const length = cleaned.length;\n    const first = cleaned.substring(0, 3);\n    const second = cleaned.substring(3, 6);\n    const third = cleaned.substring(6, 10);\n\n    if (length < 4) return `${first}`;\n    if (length < 7 && length >= 4) {\n      return `(${first}) ${second}`;\n    }\n    return `(${first}) ${second}-${third}`;\n  };\n\n  if (content.current) {\n    const contentElement = content.current as HTMLElement;\n    if (contentElement.scrollHeight > contentElement.clientHeight) {\n      if (!scrollable) {\n        setScrollable(true);\n      }\n    } else {\n      if (scrollable) {\n        setScrollable(false);\n      }\n    }\n  }\n\n  const renderOneColumnLayout = (inputs: FormProp[]) => {\n    return (\n      <>\n        {inputs?.map(input => (\n          <>\n            {input.name !== 'terms' && (\n              <div\n                key={input.label.trim().replace(' ', '_').toLowerCase()}\n                className={`field ${\n                  input.required === 'true' && 'field--required'\n                } ${checkValidation(formValidation[input.name], input.name)}`}\n              >\n                <label\n                  className=\"field__label\"\n                  htmlFor={input.label.trim().replace(' ', '_').toLowerCase()}\n                >\n                  {input.label}\n                </label>\n                {input.type !== 'textarea' ? (\n                  <>\n                    {input.google ? (\n                      <Autocomplete\n                        label={input.label}\n                        name={input.name}\n                        placeholder={input.placeholder}\n                        required={input.required}\n                        type={input.type}\n                        setFormData={setFormData}\n                        handleValidation={handleAutocomplete}\n                        formDataValue={\n                          formData[input.name] as string | undefined\n                        }\n                        onBlur={handleAddressBlur}\n                      />\n                    ) : (\n                      <input\n                        className=\"field__input field__control\"\n                        type={input.type}\n                        ref={\n                          input.type === 'address' ? autocompleteInput : null\n                        }\n                        id={input.label.trim().replace(' ', '_').toLowerCase()}\n                        name={input.name}\n                        placeholder={input.placeholder}\n                        required={input.required === 'true' ? true : false}\n                        value={\n                          formData[input.name]\n                            ? (formData[input.name] as string)\n                            : ''\n                        }\n                        onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n                          setInteract(true);\n                          if (input.type === 'tel') {\n                            setFormData(prevFormData => ({\n                              ...prevFormData,\n                              [input.name]: formatPhoneNumber(e.target.value)\n                            }));\n                          } else {\n                            setFormData(prevFormData => ({\n                              ...prevFormData,\n                              [input.name]: e.target.value\n                            }));\n                          }\n                        }}\n                        onBlur={e => handleValidation(e.target.name)}\n                      />\n                    )}\n                  </>\n                ) : (\n                  <textarea\n                    rows={3}\n                    className={`field__input field__control ${checkValidation(\n                      formValidation[input.name],\n                      input.name\n                    )}`}\n                    id={input.label.trim().replace(' ', '_').toLowerCase()}\n                    name={input.name}\n                    placeholder={input.placeholder}\n                    required={input.required === 'true' ? true : false}\n                    value={\n                      formData[input.name]\n                        ? (formData[input.name] as string)\n                        : ''\n                    }\n                    onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n                      setInteract(true);\n                      setFormData(prevFormData => ({\n                        ...prevFormData,\n                        [input.name]: e.target.value.substring(0, 250)\n                      }));\n                    }}\n                    onBlur={e => handleValidation(e.target.name)}\n                  ></textarea>\n                )}\n                {input.google ? (\n                  <span className=\"field__error-msg\">\n                    {addressErrorMessage}\n                  </span>\n                ) : (\n                  <span className=\"field__error-msg\">{errorMessage}</span>\n                )}\n              </div>\n            )}\n          </>\n        ))}\n      </>\n    );\n  };\n\n  const renderTwoColumnLayout = (inputs: FormProp[]) => {\n    const twoColumnsInputs = [] as FormProp[];\n    const remainingInputs = [] as FormProp[];\n\n    inputs.forEach(input => {\n      if (\n        input.name !== 'terms' &&\n        !input.google &&\n        input.type !== 'textarea'\n      ) {\n        twoColumnsInputs.push(input);\n      } else {\n        remainingInputs.push(input);\n      }\n    });\n\n    return (\n      <>\n        <div className=\"request-a-quote__grid\">\n          {twoColumnsInputs.map(input => (\n            <div\n              key={input.label.trim().replace(' ', '_').toLowerCase()}\n              className={`field ${\n                input.required === 'true' && 'field--required'\n              } ${checkValidation(formValidation[input.name], input.name)}`}\n            >\n              <label\n                className=\"field__label\"\n                htmlFor={input.label.trim().replace(' ', '_').toLowerCase()}\n              >\n                {input.label}\n              </label>\n              <input\n                className=\"field__input field__control\"\n                type={input.type}\n                ref={input.type === 'address' ? autocompleteInput : null}\n                id={input.label.trim().replace(' ', '_').toLowerCase()}\n                name={input.name}\n                placeholder={input.placeholder}\n                required={input.required === 'true' ? true : false}\n                value={\n                  formData[input.name] ? (formData[input.name] as string) : ''\n                }\n                onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n                  setInteract(true);\n                  if (input.type === 'tel') {\n                    setFormData(prevFormData => ({\n                      ...prevFormData,\n                      [input.name]: formatPhoneNumber(e.target.value)\n                    }));\n                  } else {\n                    setFormData(prevFormData => ({\n                      ...prevFormData,\n                      [input.name]: e.target.value\n                    }));\n                  }\n                }}\n                onBlur={e => handleValidation(e.target.name)}\n              />\n              <span className=\"field__error-msg\">{errorMessage}</span>\n            </div>\n          ))}\n        </div>\n        {renderOneColumnLayout(remainingInputs)}\n      </>\n    );\n  };\n\n  return (\n    <div\n      ref={content}\n      className={`request-a-quote__content request-a-quote__content--form ${\n        scrollable ? 'request-a-quote__content--scrollable' : ''\n      } ${isModal ? 'request-a-quote__content--modal' : ''}`}\n    >\n      {twoColumns\n        ? renderTwoColumnLayout(inputs)\n        : renderOneColumnLayout(inputs)}\n      <div\n        className={\n          isModal ? 'request-a-quote__content-terms-wrapper' : undefined\n        }\n      >\n        <div className=\"request-a-quote__content-terms-checkbox field field--checkbox\">\n          <input\n            name={termsConditionsName}\n            className=\"field__checkbox-input field__control\"\n            type=\"checkbox\"\n            id=\"request-a-quote-form-id-checkbox-terms\"\n            checked={formData[termsConditionsName] as boolean}\n            required={true}\n            onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n              setInteract(true);\n              setFormData(prevFormData => ({\n                ...prevFormData,\n                [termsConditionsName]: e.target.checked\n              }));\n              handleValidation(e.target.name);\n            }}\n          />\n          <div className=\"field__checkbox-label-wrapper\">\n            <label\n              className=\"field__checkbox-label\"\n              htmlFor=\"request-a-quote-form-id-checkbox-terms\"\n            >\n              {checkbox.label}\n            </label>\n          </div>\n        </div>\n        <p\n          className=\"request-a-quote__content-copy rtf\"\n          dangerouslySetInnerHTML={{ __html: copy }}\n        ></p>\n      </div>\n    </div>\n  );\n};\n\nexport default StepForms;\n","import React from 'react';\nimport { ContractorCheckboxProps } from './types';\nimport Stars from './stars';\n\nfunction ContractorCheckbox({\n  formData,\n  handleChange,\n  review\n}: ContractorCheckboxProps) {\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          {review.contractorName}\n          <span className=\"request-a-quote__content-reviews-city\">{`${review.city}, ${review.state}`}</span>\n          <Stars\n            rating={review.rating}\n            numberOfReviews={review.numberOfReviews}\n          />\n        </label>\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}: 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            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          }}\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","import React, { useEffect } from 'react';\nimport { StepReviewsProps, ReviewProp } from './types';\nimport {\n  loadSearchActions,\n  loadSearchAnalyticsActions,\n  ResultList,\n  SearchEngine,\n  loadAdvancedSearchQueryActions\n} from '@coveo/headless';\nimport { ExtendedWindowType, headlessEngineModal } from '../../engine';\nimport {\n  resultListModal,\n  fieldsObjectModal\n} from '../../controllers/controller';\nimport ResultListContractor from './result-list-contractor';\nimport { CoveoContextModal } from '../context';\nimport ContractorCheckbox from './contractor';\n\nconst StepReviews: React.FC<StepReviewsProps> = ({\n  heading,\n  copy,\n  reviewName,\n  formData,\n  setFormData,\n  contractorId,\n  defaultContractor,\n  defaultContractorCopy,\n  defaultLabel,\n  disclaimer,\n  disclaimerHeading,\n  setContractorSelected,\n  isModal\n}) => {\n  const { latitude, longitude } = formData;\n\n  useEffect(() => {\n    if (latitude && longitude) {\n      const global = window as ExtendedWindowType;\n\n      global.modalPreProcessRequest = (body: string) => {\n        const newBody = JSON.parse(body.toString());\n        newBody.queryFunctions = [\n          {\n            fieldName: `@${fieldsObjectModal.distanceInMiles}`,\n            function: `dist(@${fieldsObjectModal.latitudeField}, @${fieldsObjectModal.longitudeField}, ${latitude}, ${longitude})*0.000621371`\n          }\n        ];\n        return JSON.stringify(newBody);\n      };\n    }\n\n    const headlessEngine = headlessEngineModal as SearchEngine;\n\n    let defaultCountry = 'USA';\n\n    if (fieldsObjectModal.defaultCountry) {\n      defaultCountry = fieldsObjectModal.defaultCountry;\n    }\n\n    const advancedQuerySearchActionCreator =\n      loadAdvancedSearchQueryActions(headlessEngine);\n    headlessEngine?.dispatch(\n      advancedQuerySearchActionCreator.registerAdvancedSearchQueries({\n        aq: `@${fieldsObjectModal.distanceInMiles} <= ${fieldsObjectModal.maxDistance} AND @${fieldsObjectModal.country} = ${defaultCountry}`\n      })\n    );\n\n    const { logInterfaceLoad } = loadSearchAnalyticsActions(headlessEngine);\n    const { executeSearch } = loadSearchActions(headlessEngine);\n    headlessEngine.dispatch(executeSearch(logInterfaceLoad()));\n  }, [formData?.zipCode]);\n\n  const handleChange = (\n    e: React.ChangeEvent<HTMLInputElement>,\n    contractorReview: ReviewProp\n  ) => {\n    const value = e.target.checked;\n    if (value) {\n      setFormData(prevFormData => {\n        if (prevFormData)\n          return {\n            ...prevFormData,\n            [reviewName]: [\n              ...(prevFormData[reviewName] as string[]),\n              contractorReview.id\n            ]\n          };\n        return prevFormData;\n      });\n    } else {\n      setFormData(prevFormData => {\n        if (prevFormData)\n          return {\n            ...prevFormData,\n            [reviewName]: (prevFormData[reviewName] as string[]).filter(\n              (contractor: string) => contractor !== contractorReview.id\n            )\n          };\n        return prevFormData;\n      });\n    }\n  };\n\n  useEffect(() => {\n    setContractorSelected(\n      (formData.reviews && (formData.reviews as string[]).length > 0) as boolean\n    );\n  }, [formData]);\n\n  return (\n    <div className=\"request-a-quote__content\">\n      <CoveoContextModal />\n      {defaultContractor && !isModal && (\n        <>\n          <p className=\"request-a-quote__default-copy\">\n            {defaultContractorCopy}\n          </p>\n          <p className=\"request-a-quote__default-label\">{defaultLabel}</p>\n          <ContractorCheckbox\n            formData={formData}\n            handleChange={handleChange}\n            review={{\n              name: reviewName,\n              contractorDBA: defaultContractor.contractorDBA,\n              contractorName: defaultContractor.contractorName,\n              city: defaultContractor.city,\n              state: defaultContractor.state,\n              rating: defaultContractor.rating,\n              numberOfReviews: defaultContractor.numberOfReviews,\n              id: defaultContractor.id\n            }}\n          ></ContractorCheckbox>\n        </>\n      )}\n      <h3\n        className={`request-a-quote__card-heading ${\n          isModal ? 'request-a-quote__card-heading--modal' : ''\n        }`}\n      >\n        {heading}\n      </h3>\n      {isModal ? (\n        <>\n          <p className=\"request-a-quote__default-label request-a-quote__default-label--modal\">\n            {defaultLabel}\n          </p>\n          <div className=\"request-a-quote__contractors-grid\">\n            {defaultContractor && (\n              <ContractorCheckbox\n                formData={formData}\n                handleChange={handleChange}\n                review={{\n                  name: reviewName,\n                  contractorDBA: defaultContractor.contractorDBA,\n                  contractorName: defaultContractor.contractorName,\n                  city: defaultContractor.city,\n                  state: defaultContractor.state,\n                  rating: defaultContractor.rating,\n                  numberOfReviews: defaultContractor.numberOfReviews,\n                  id: defaultContractor.id\n                }}\n              ></ContractorCheckbox>\n            )}\n            <ResultListContractor\n              formData={formData}\n              reviewName={reviewName}\n              handleChange={handleChange}\n              controller={resultListModal as ResultList}\n              copy={copy}\n              contractorId={contractorId ? contractorId : ''}\n            ></ResultListContractor>\n          </div>\n        </>\n      ) : (\n        <ResultListContractor\n          formData={formData}\n          reviewName={reviewName}\n          handleChange={handleChange}\n          controller={resultListModal as ResultList}\n          copy={copy}\n          contractorId={contractorId ? contractorId : ''}\n        ></ResultListContractor>\n      )}\n      {!isModal && (\n        <p className=\"request-a-quote__disclaimer-heading\">\n          {disclaimerHeading}\n        </p>\n      )}\n      <div\n        className={`request-a-quote__disclaimer rtf ${\n          isModal ? 'request-a-quote__disclaimer--modal' : ''\n        }`}\n        dangerouslySetInnerHTML={{\n          __html: disclaimer\n        }}\n      ></div>\n    </div>\n  );\n};\n\nexport default StepReviews;\n","import React, { useState, useEffect, useRef } from 'react';\nimport Card from '../../modules/contractor-request-a-quote-form/card';\nimport StepForm from './step1-form';\nimport StepReviews from './step2-reviews';\nimport Stars from './stars';\nimport {\n  RequestAQuoteFormProps,\n  CardProps,\n  StepTermsProps,\n  FormDataProp,\n  FormProp,\n  ModalProps\n} from './types';\nimport { getStoredGeolocationData } from '../../../helpers/geolocation';\nimport { useGoogleReCaptcha } from 'react-google-recaptcha-v3';\nimport {\n  COOKIE_NAMES,\n  GeolocationType,\n  USER_PROFILE_KEYS,\n  USER_PROFILE_OBJECT_KEY,\n  secureStorage\n} from '../../../helpers/global-storage';\nimport { ExtendedWindowType } from '../../engine';\n\nconst urlParams = new URLSearchParams(window.location.search);\n\nconst Form: React.FC<RequestAQuoteFormProps> = ({\n  formLabels,\n  thankYouLabels,\n  stepForm,\n  stepReviews,\n  stepTerms,\n  reviewsName,\n  termsConditionsName,\n  endpointPost,\n  modal,\n  placeholderImg,\n  contractorId,\n  contractorType,\n  contractor\n}) => {\n  const {\n    heading,\n    ofSteps,\n    progressBarAria,\n    backBtn,\n    continueBtn,\n    submitBtn,\n    errorRequired,\n    addressError,\n    dividerStates,\n    errorLabel,\n    defaultLabel,\n    defaultContractorCopy,\n    disclaimer\n  } = formLabels ? JSON.parse(formLabels) : '';\n  const thankYouCardLabels: CardProps = thankYouLabels\n    ? JSON.parse(thankYouLabels)\n    : '';\n\n  const stepFormLabels: FormProp[] = stepForm ? JSON.parse(stepForm) : '';\n  const stepReviewsLabels: CardProps = stepReviews\n    ? JSON.parse(stepReviews)\n    : '';\n  const stepTermsLabels: StepTermsProps = stepTerms\n    ? JSON.parse(stepTerms)\n    : '';\n  const contractorObject = contractor as ModalProps;\n\n  const userObjectData: string[] = [\n    USER_PROFILE_KEYS.userName,\n    USER_PROFILE_KEYS.userLastName,\n    USER_PROFILE_KEYS.userEmail,\n    USER_PROFILE_KEYS.userPhone,\n    USER_PROFILE_KEYS.userMessage\n  ];\n\n  const userGeolocationData = [\n    'zip',\n    'latitude',\n    'longitude',\n    'country',\n    'address',\n    'city',\n    'state',\n    'street',\n    'secondStreet'\n  ];\n\n  const [step, setStep] = useState<number>(0);\n  const [formData, setFormData] = useState<FormDataProp>();\n  const [isFormValid, setIsFormValid] = useState<boolean>(false);\n  const [contractorSelected, setContractorSelected] = useState<boolean>(false);\n  const [submitting, setSubmitting] = useState<boolean>(false);\n  const [submitError, setSubmitError] = useState<boolean>(false);\n  const card = useRef<HTMLDivElement | null>(null);\n  const [fixedHeight, setFixedHeight] = useState<number>(0);\n  const [utmValues, setUtmValues] = useState<string>('');\n\n  const styleRequestAQuote: { [key: string]: string } = {\n    '--request-a-quote-fixed': `${fixedHeight}px`\n  };\n\n  const { executeRecaptcha } = useGoogleReCaptcha();\n\n  useEffect(() => {\n    const geolocationObject: GeolocationType = {\n      address: '',\n      zip: '',\n      latitude: undefined,\n      longitude: undefined,\n      country: ''\n    };\n    const geolocation = getStoredGeolocationData();\n    if (geolocation?.address) {\n      geolocationObject.address = geolocation?.address\n        ? geolocation.address\n        : '';\n      geolocationObject.zip = geolocation?.zip ? geolocation.zip : '';\n      geolocationObject.latitude = geolocation?.latitude\n        ? geolocation.latitude\n        : undefined;\n      geolocationObject.longitude = geolocation?.longitude\n        ? geolocation.longitude\n        : undefined;\n      geolocationObject.country = geolocation?.country;\n    }\n\n    const formDataObj: FormDataProp = stepFormLabels.reduce(\n      (obj: object, el: FormProp) => {\n        Object.assign(obj, { [el.name]: '' });\n        if (el.name === 'address') {\n          Object.assign(obj, geolocationObject);\n        }\n        return obj;\n      },\n      {}\n    );\n\n    const userGeolocationDataStored = secureStorage.get(\n      COOKIE_NAMES.geolocation\n    );\n    if (userGeolocationDataStored) {\n      const userLocationInfo = JSON.parse(userGeolocationDataStored);\n      userGeolocationData.forEach((dataName: string) => {\n        if (userLocationInfo[dataName]) {\n          formDataObj[dataName] = userLocationInfo[dataName]\n            ? userLocationInfo[dataName]\n            : '';\n        }\n      });\n    }\n\n    const userDataStored = secureStorage.get(USER_PROFILE_OBJECT_KEY);\n\n    if (userDataStored) {\n      const userDataInfo = JSON.parse(userDataStored);\n      userObjectData.forEach((dataName: string) => {\n        if (userDataInfo[dataName]) {\n          formDataObj[dataName] = userDataInfo[dataName]\n            ? userDataInfo[dataName]\n            : '';\n        }\n      });\n    }\n\n    Object.assign(formDataObj, { [reviewsName]: [] });\n    Object.assign(formDataObj, { [termsConditionsName]: false });\n\n    setFormData(formDataObj);\n\n    window.addEventListener('resize', handleResize);\n    handleResize();\n\n    return () => {\n      window.removeEventListener('resize', handleResize);\n    };\n  }, []);\n\n  const handleResize = () => {\n    if (card.current) {\n      const header = (card.current as HTMLElement).querySelector(\n        '.request-a-quote__header'\n      );\n      const footer = (card.current as HTMLElement).querySelector(\n        '.request-a-quote__footer'\n      );\n      if (header && footer) {\n        setFixedHeight(\n          (header as HTMLElement)?.offsetHeight +\n            (footer as HTMLElement)?.offsetHeight\n        );\n      }\n    }\n  };\n\n  useEffect(() => {\n    handleResize();\n  }, [card.current]);\n\n  useEffect(() => {\n    if (urlParams.has('utm_source')) {\n      const allParams = Array.from(urlParams.entries())\n        .map(([key, value]) => `${key}=${value}`)\n        .join('&');\n      setUtmValues(allParams);\n    }\n  }, []);\n\n  const handleNextButton = async () => {\n    if (step < 1) {\n      setStep(step => step + 1);\n    } else {\n      setSubmitting(true);\n\n      const captchaToken = await executeRecaptcha?.('quote');\n\n      if (formData) {\n        formData.token = captchaToken;\n        const formDataArray = Object.entries(formData);\n        const sessionUserData = formDataArray.reduce((sessionObj, dataName) => {\n          if (userObjectData.includes(dataName[0] as string)) {\n            (sessionObj as FormDataProp)[dataName[0]] = dataName[1];\n          }\n          return sessionObj;\n        }, {});\n        const sessionUserGeolocation = formDataArray.reduce(\n          (sessionObj, dataName) => {\n            if (userGeolocationData.includes(dataName[0] as string)) {\n              (sessionObj as FormDataProp)[dataName[0]] = dataName[1];\n            }\n            return sessionObj;\n          },\n          {}\n        );\n\n        if (utmValues) {\n          formData.UTM__c = utmValues;\n        }\n\n        secureStorage.set(\n          USER_PROFILE_OBJECT_KEY,\n          JSON.stringify(sessionUserData)\n        );\n        secureStorage.set(\n          COOKIE_NAMES.geolocation,\n          JSON.stringify(sessionUserGeolocation)\n        );\n      }\n\n      fetch(endpointPost, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({\n          ...formData,\n          contractorId: modal ? modal.id : contractorId,\n          contractorType: modal ? modal.type : contractorType\n        })\n      })\n        .then(response => response.json())\n        .then(data => {\n          if (!data.success) {\n            setSubmitError(true);\n          } else {\n            setSubmitError(false);\n            (window as ExtendedWindowType).dataLayer.push({\n              event: 'contractor_leads',\n              event_category: 'find a contractor',\n              event_action: 'form success',\n              event_attributes: {\n                contractor_id: modal ? modal.id : contractorObject?.id,\n                contractor_name: modal\n                  ? modal.contractorName\n                  : contractorObject?.contractorName,\n                contractor_certificates_count: modal\n                  ? modal.numberOfCertificates\n                  : contractorObject?.numberOfCertificates,\n                contractor_rating: modal\n                  ? modal.rating\n                  : contractorObject?.rating,\n                contractor_reviews_count: modal\n                  ? modal.numberOfReviews\n                  : contractorObject?.numberOfReviews,\n                contractor_certificate_name: modal\n                  ? modal.certificateName\n                  : contractorObject?.certificateName,\n                contractor_type: modal ? modal.type : contractorObject?.type,\n                form_name: 'request a quote form'\n              }\n            });\n          }\n        })\n        .catch(error => {\n          setSubmitError(true);\n          console.error('Error:', error);\n        })\n        .finally(() => {\n          setSubmitting(false);\n          setStep(step => step + 1);\n        });\n    }\n  };\n\n  const handleBackButton = () => {\n    setStep(step => step - 1);\n  };\n\n  const renderSteps = () => {\n    switch (step) {\n      case 0:\n        return (\n          <StepForm\n            {...stepTermsLabels}\n            inputs={stepFormLabels}\n            errorMessage={errorRequired}\n            addressErrorMessage={addressError}\n            setFormData={setFormData}\n            formData={formData as FormDataProp}\n            setIsFormValid={setIsFormValid}\n            isFormValid={isFormValid}\n            isModal={modal ? true : false}\n            contractorData={modal ? modal : contractorObject}\n            termsConditionsName={termsConditionsName}\n            twoColumns={modal ? true : false}\n          />\n        );\n\n      case 1:\n        return (\n          <StepReviews\n            isModal={modal ? true : false}\n            {...stepReviewsLabels}\n            dividerStates={dividerStates}\n            setFormData={setFormData}\n            formData={formData as FormDataProp}\n            reviewName={reviewsName}\n            contractorId={modal ? modal.id : contractorId}\n            defaultContractor={modal ? modal : contractorObject}\n            disclaimerHeading={stepTermsLabels.heading}\n            disclaimer={disclaimer}\n            defaultLabel={defaultLabel}\n            defaultContractorCopy={defaultContractorCopy}\n            setContractorSelected={setContractorSelected}\n          />\n        );\n\n      default:\n        return <></>;\n    }\n  };\n\n  return (\n    <>\n      {step < 2 ? (\n        <div ref={card} style={styleRequestAQuote}>\n          <div className=\"request-a-quote__header\">\n            <h2\n              className={`request-a-quote__heading ${\n                modal ? 'request-a-quote__heading--modal' : ''\n              }`}\n            >\n              {heading}\n            </h2>\n\n            {modal && step < 1 && (\n              <div className=\"request-a-quote-modal__contractor\">\n                <img\n                  className=\"request-a-quote-modal__c-img\"\n                  alt={modal.imageAlt}\n                  src={modal.image ? modal.image : placeholderImg}\n                  width=\"120\"\n                  height=\"120\"\n                />\n                <div className=\"request-a-quote-modal__c-content\">\n                  <h3 className=\"request-a-quote-modal__c-heading\">\n                    {modal.contractorDBA\n                      ? modal.contractorDBA\n                      : modal.contractorName}\n                  </h3>\n                  {modal.rating ? (\n                    <Stars\n                      rating={modal.rating}\n                      numberOfReviews={modal.numberOfReviews}\n                    />\n                  ) : null}\n                  <span className='request-a-quote-modal__c-location'>\n                    {modal.city}\n                    {modal.city ? ', ' : ''}\n                    {modal.state}\n                    {modal.state ? ' - ' : ''}\n                    {modal.distanceinmiles?.toFixed(1)}\n                    {modal.distanceinmiles ? ' mi' : ''}\n                  </span>\n                </div>\n              </div>\n            )}\n            <p\n              className=\"request-a-quote__progress-indicator\"\n              aria-label={progressBarAria}\n            >{`${step + 1}${ofSteps}`}</p>\n            <div\n              className=\"request-a-quote__progress-bar\"\n              data-step={step + 1}\n              role=\"presentation\"\n            ></div>\n          </div>\n\n          {formData && renderSteps()}\n\n          <div\n            className={`request-a-quote__footer ${\n              modal ? 'request-a-quote__footer--modal' : ''\n            }`}\n          >\n            {step > 0 ? (\n              <button\n                className=\"link link--arrow-back\"\n                onClick={() => handleBackButton()}\n              >\n                <span>{backBtn}</span>\n              </button>\n            ) : (\n              <div></div>\n            )}\n            <div className=\"request-a-quote__submit\">\n              <button\n                className=\"btn btn--secondary\"\n                disabled={\n                  step === 1 && formData\n                    ? (!formData[termsConditionsName] && !submitting) ||\n                      !contractorSelected\n                    : !isFormValid\n                }\n                onClick={() => handleNextButton()}\n              >\n                {step === 1 ? submitBtn : continueBtn}\n              </button>\n              {submitError && (\n                <span className=\"request-a-quote__submit-error\">\n                  {errorLabel}\n                </span>\n              )}\n            </div>\n          </div>\n        </div>\n      ) : (\n        <Card\n          {...thankYouCardLabels}\n          submitError={submitError}\n          errorLabel={errorLabel}\n        />\n      )}\n    </>\n  );\n};\n\nexport default Form;\n","import React, { useEffect } from 'react';\nimport Form from './request-a-quote-form';\nimport { ModalProps, RequestAQuoteFormProps } from './types';\nimport { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';\nimport { ExtendedWindowType } from '../../../helpers/global-types';\n\nconst RequestAQuoteForm = (props: RequestAQuoteFormProps) => {\n  const contractorData = props.contractor as ModalProps;\n\n  useEffect(() => {\n    const global = window as ExtendedWindowType;\n    global.dataLayer?.push({\n      event: 'request_quote_form_view',\n      event_category: 'find a contractor',\n      event_action: 'request a quote form view',\n      event_attributes: {\n        contractor_id: contractorData?.id,\n        contractor_name: contractorData?.contractorName,\n        contractor_certificates_count: contractorData?.numberOfCertificates,\n        contractor_rating: contractorData?.rating,\n        contractor_reviews_count: contractorData?.numberOfReviews,\n        contractor_certificate_name: contractorData?.certificateName,\n        contractor_type: contractorData?.type,\n        form_name: 'request a quote form'\n      }\n    });\n  }, []);\n  return (\n    <GoogleReCaptchaProvider\n      reCaptchaKey={props.reCaptchaSiteKey}\n      useEnterprise={true}\n    >\n      <Form {...props} contractor={contractorData} />\n    </GoogleReCaptchaProvider>\n  );\n};\n\nexport default RequestAQuoteForm;\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","StepForms","inputs","errorMessage","addressErrorMessage","formData","setIsFormValid","isModal","contractorData","termsConditionsName","checkbox","twoColumns","firstLoad","setFirstLoad","scrollable","setScrollable","content","formValidation","setFormValidation","fieldTouched","setFieldTouched","interact","setInteract","requiredValues","useMemo","numRequired","num","object","formValidationArray","prevFormValidation","handleAutocomplete","value","handleAddressBlur","prevFieldTouched","global","layer","_fieldTouched","_formValidation","_b","input","textarea","checkValidation","formatPhoneNumber","cleaned","length","first","second","third","contentElement","renderOneColumnLayout","renderTwoColumnLayout","twoColumnsInputs","remainingInputs","ContractorCheckbox","handleChange","review","Stars","ResultListContractor","controller","contractorId","reviewName","dataset","loaderText","setState","resultTemplatesManager","buildResultTemplatesManager","headlessEngineModal","RequestAQuoteContractorTemplate","fieldsToInclude","result","fieldsObjectModal","Contractor","Loader","contractorNumber","template","StepReviews","defaultContractor","defaultContractorCopy","defaultLabel","disclaimer","disclaimerHeading","setContractorSelected","body","newBody","headlessEngine","defaultCountry","advancedQuerySearchActionCreator","loadAdvancedSearchQueryActions","logInterfaceLoad","loadSearchAnalyticsActions","executeSearch","loadSearchActions","contractorReview","contractor","CoveoContextModal","resultListModal","urlParams","Form","formLabels","thankYouLabels","stepForm","stepReviews","stepTerms","reviewsName","endpointPost","modal","placeholderImg","contractorType","ofSteps","progressBarAria","backBtn","continueBtn","submitBtn","errorRequired","addressError","dividerStates","thankYouCardLabels","stepFormLabels","stepReviewsLabels","stepTermsLabels","contractorObject","userObjectData","USER_PROFILE_KEYS","userGeolocationData","step","setStep","isFormValid","contractorSelected","submitting","setSubmitting","setSubmitError","card","fixedHeight","setFixedHeight","utmValues","setUtmValues","styleRequestAQuote","executeRecaptcha","useGoogleReCaptcha","geolocationObject","geolocation","getStoredGeolocationData","formDataObj","obj","el","userGeolocationDataStored","secureStorage","COOKIE_NAMES","userLocationInfo","dataName","userDataStored","USER_PROFILE_OBJECT_KEY","userDataInfo","handleResize","header","footer","allParams","key","handleNextButton","captchaToken","formDataArray","sessionUserData","sessionObj","sessionUserGeolocation","response","data","error","handleBackButton","renderSteps","StepForm","RequestAQuoteForm","props","GoogleReCaptchaProvider"],"mappings":"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"}