{"version":3,"file":"index-50737993.js","sources":["../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/step1-form.tsx","../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/step2-review.tsx","../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/step3-terms.tsx","../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/contractor-request-a-quote-form.tsx","../../../../src/scripts/coveo/modules/contractor-request-a-quote-form/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { StepFormsProps, FormProp } from '../../components/request-a-quote-form/types';\nimport Autocomplete from '../../components/request-a-quote-form/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 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 } 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 message-field ${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 );\n};\n\nexport default StepForms;\n","import React, { useEffect } from 'react';\nimport { StepReviewsContractorProps, ReviewProp } from '../../components/request-a-quote-form/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 '../../components/request-a-quote-form/result-list-contractor';\nimport { CoveoContextModal } from '../../components/context';\nimport ContractorCheckbox from '../../components/request-a-quote-form/contractor';\n\nconst StepReviews: React.FC<StepReviewsContractorProps> = ({\n headingReviews,\n copyReviews,\n reviewName,\n formData,\n setFormData,\n contractorId,\n showDefaultContractor,\n defaultContractor,\n defaultContractorCopy,\n defaultLabel,\n setContractorSelected,\n isModal,\n certificationsCardLabel,\n viewAllCertificationsLabel,\n certificationsModalId,\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 {showDefaultContractor === 'true' && 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 certifications={{\n title: \"\",\n certificates: [],\n viewAllCertificationsLabel: viewAllCertificationsLabel\n }}\n modalId={certificationsModalId}\n />\n </>\n )}\n <h3\n className={`request-a-quote__card-heading ${\n isModal ? 'request-a-quote__card-heading--modal' : ''\n }`}\n >\n {headingReviews}\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 {showDefaultContractor === 'true' && defaultContractor && (\n <ContractorCheckbox\n formData={formData}\n handleChange={handleChange}\n certifications={{\n title: \"\",\n certificates: [],\n viewAllCertificationsLabel: viewAllCertificationsLabel\n }}\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 modalId={certificationsModalId}\n ></ContractorCheckbox>\n )}\n <ResultListContractor\n formData={formData}\n reviewName={reviewName}\n handleChange={handleChange}\n controller={resultListModal as ResultList}\n copy={copyReviews}\n contractorId={contractorId ? contractorId : ''}\n certificationsCardLabel={certificationsCardLabel}\n viewAllCertificationsLabel={viewAllCertificationsLabel}\n certificationsModalId={certificationsModalId}\n ></ResultListContractor>\n </div>\n </>\n ) : (\n <ResultListContractor\n formData={formData}\n reviewName={reviewName}\n handleChange={handleChange}\n controller={resultListModal as ResultList}\n copy={copyReviews}\n contractorId={contractorId ? contractorId : ''}\n certificationsCardLabel={certificationsCardLabel}\n viewAllCertificationsLabel={viewAllCertificationsLabel}\n certificationsModalId={certificationsModalId}\n ></ResultListContractor>\n )}\n </div>\n );\n};\n\nexport default StepReviews;\n","import React, { useEffect } from 'react';\nimport { StepTermsProps } from '../../components/request-a-quote-form/types';\nimport {\n loadSearchActions,\n loadSearchAnalyticsActions,\n SearchEngine,\n loadAdvancedSearchQueryActions\n} from '@coveo/headless';\nimport { ExtendedWindowType, headlessEngineModal } from '../../engine';\nimport {\n fieldsObjectModal\n} from '../../controllers/controller';\nimport { CoveoContextModal } from '../../components/context';\n\nconst StepTerms: React.FC<StepTermsProps> = ({\n formData,\n setFormData,\n termsConditionsName,\n checkbox,\n copy,\n disclaimerHeading,\n disclaimer\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 return (\n <div className=\"request-a-quote__content\">\n <CoveoContextModal />\n\n <p className=\"request-a-quote__disclaimer-heading\">\n {disclaimerHeading}\n </p>\n\n {disclaimer && (\n <div\n className=\"request-a-quote__disclaimer rtf\"\n dangerouslySetInnerHTML={{\n __html: disclaimer || ''\n }}\n ></div>\n )}\n\n <div\n className=\"request-a-quote__content-terms-wrapper\"\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 setFormData(prevFormData => ({\n ...prevFormData,\n [termsConditionsName]: e.target.checked\n }));\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\n </div>\n );\n};\n\nexport default StepTerms;\n","import React, { useState, useEffect, useRef } from 'react';\nimport Card from './card';\nimport StepForm from './step1-form';\nimport StepReviews from './step2-review';\nimport StepTerms from './step3-terms';\nimport Stars from '../../components/request-a-quote-form/stars';\nimport {\n RequestAQuoteFormProps,\n CardProps,\n StepTermsProps,\n FormDataProp,\n FormProp,\n ModalProps\n} from '../../components/request-a-quote-form/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 certificationsCardLabel,\n viewAllCertificationsLabel,\n certificationsModalId,\n showDefaultContractor,\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 [, 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 < 2) {\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 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 twoColumns={modal ? true : false}\n />\n );\n\n case 1:\n return (\n <StepReviews\n headingReviews={stepReviewsLabels.heading}\n copyReviews={stepReviewsLabels.copy}\n dividerStates={dividerStates}\n isModal={modal ? true : false}\n setFormData={setFormData}\n formData={formData as FormDataProp}\n reviewName={reviewsName}\n contractorId={modal ? modal.id : contractorId}\n showDefaultContractor={showDefaultContractor}\n defaultContractor={modal ? modal : contractorObject}\n disclaimerHeading=\"\"\n disclaimer={disclaimer}\n defaultLabel={defaultLabel}\n defaultContractorCopy={defaultContractorCopy}\n setContractorSelected={setContractorSelected}\n certificationsCardLabel={certificationsCardLabel}\n viewAllCertificationsLabel={viewAllCertificationsLabel}\n certificationsModalId={certificationsModalId}\n />\n );\n\n case 2:\n return (\n <StepTerms\n {...stepTermsLabels}\n setFormData={setFormData}\n formData={formData as FormDataProp}\n termsConditionsName={termsConditionsName}\n disclaimerHeading={stepTermsLabels.heading}\n disclaimer={disclaimer}\n />\n );\n\n default:\n return <></>;\n }\n };\n\n return (\n <>\n {step < 3 ? (\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=\"80\"\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 === 2 && formData\n ? !formData[termsConditionsName] && !submitting\n : !isFormValid\n }\n onClick={() => handleNextButton()}\n >\n {step === 2 ? 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, { useState, useEffect, useRef } from 'react';\nimport { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';\nimport Card from './card';\nimport { isTabletLandscape } from '../../../helpers/breakpoints';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\n\nimport {\n RequestAQuoteFormProps,\n CardProps\n} from '../../components/request-a-quote-form/types';\n\nimport RequestAQuoteForm from './contractor-request-a-quote-form';\nimport { ExtendedWindowType } from '../../engine';\nimport { createDataLayerString } from '../../../helpers/helpers';\n\nconst ContractorRequestAForm: React.FC<RequestAQuoteFormProps> = ({\n contractorCard,\n formLabels,\n callUsLabels,\n contractor,\n ...props\n}) => {\n const { heading } = formLabels ? JSON.parse(formLabels) : '';\n const callUsCardLabels: CardProps = callUsLabels\n ? JSON.parse(callUsLabels)\n : '';\n const contractorData = contractor ? JSON.parse(contractor as string) : '';\n\n const [sticky, setSticky] = useState<boolean>(false);\n const [expanded, setExpanded] = useState<boolean>(false);\n const [fixedHeight, setFixedHeight] = useState<number>(0);\n const [cardHeight, setCardHeight] = useState<number>(0);\n const [isIOS, setIsIOS] = useState<boolean>(false);\n const card = useRef<HTMLDivElement | null>(null);\n const styleRequestAQuote: { [key: string]: string } = {\n '--request-a-quote-fixed': `${fixedHeight}px`,\n '--request-a-quote-card-height': `${cardHeight}px`\n };\n\n // Detect iOS\n useEffect(() => {\n const isIOSDevice = /iPad|iPhone|iPod/.test(navigator.userAgent) && \n !(window as { MSStream?: unknown }).MSStream;\n setIsIOS(isIOSDevice);\n }, []);\n\n const handleScroll = () => {\n const rect = (card.current as HTMLElement)?.getBoundingClientRect();\n if (rect.top <= rect.height * -1) {\n if (!sticky) {\n setSticky(true);\n const global = window as ExtendedWindowType;\n if (\n (global.dataLayer as { event_action: string }[]).findIndex(\n item => item.event_action === 'sticky request a quote: view'\n ) === -1\n ) {\n global.dataLayer.push({\n event: 'sticky_request_quote',\n event_category: 'find a contractor',\n event_action: 'sticky request a quote: view',\n event_attributes: {\n contractor_type: 'residential, commercial, undefined'\n }\n });\n }\n }\n } else {\n setSticky(false);\n if (sticky) {\n card.current?.parentElement?.classList.remove(\n 'contractor-request-a-quote-form--sticky'\n );\n }\n }\n };\n\n const handleResize = () => {\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\n const cardFixed = (card.current as HTMLElement).querySelector(\n '.request-a-quote__card'\n );\n\n setFixedHeight(\n (header as HTMLElement)?.offsetHeight +\n (footer as HTMLElement)?.offsetHeight\n );\n\n if (!expanded) {\n setCardHeight((cardFixed as HTMLElement)?.offsetHeight);\n }\n };\n\n useEffect(() => {\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleResize);\n clearAllBodyScrollLocks();\n };\n }, []);\n\n const handleExpandButton = (e: React.MouseEvent<HTMLButtonElement>) => {\n // Prevent default button behavior\n e.preventDefault();\n e.stopPropagation();\n \n // iOS Safari special handling - completely different approach\n if (isIOS) {\n // Handle collapse specifically for iOS\n if (expanded) {\n // When collapsing on iOS, just toggle the state and let CSS handle it\n // No scroll manipulation at all\n setExpanded(false);\n \n // For iOS, completely avoid body-scroll-lock\n return;\n }\n }\n \n // For non-iOS or when expanding on iOS\n setExpanded(prev => !prev);\n \n const cardFixed = (card.current as HTMLElement)?.querySelector(\n '.request-a-quote__card'\n );\n \n if (!expanded) {\n // When expanding\n setCardHeight((cardFixed as HTMLElement)?.offsetHeight);\n // Only use disableBodyScroll for non-iOS\n if (!isIOS) {\n disableBodyScroll(card.current as HTMLDivElement, {\n allowTouchMove: () => true\n });\n }\n } else {\n // When collapsing\n // Only use clearAllBodyScrollLocks for non-iOS\n if (!isIOS) {\n clearAllBodyScrollLocks();\n }\n }\n };\n\n // Add specific CSS for iOS to handle the form without affecting scroll\n useEffect(() => {\n // Early return if not iOS\n if (!isIOS) return;\n \n // Add a special iOS class to the document for CSS targeting\n document.documentElement.classList.add('ios-device');\n \n // Create and inject a style element for iOS-specific CSS\n const style = document.createElement('style');\n style.textContent = `\n /* iOS-specific CSS to prevent scroll jumping */\n .ios-device .request-a-quote__card-row--open {\n position: absolute !important;\n z-index: 1000;\n height: auto !important;\n transition: none !important;\n }\n \n .ios-device .request-a-quote__expand-btn {\n -webkit-tap-highlight-color: transparent;\n }\n `;\n document.head.appendChild(style);\n \n // Cleanup function\n return () => {\n document.documentElement.classList.remove('ios-device');\n document.head.removeChild(style);\n };\n }, [isIOS]);\n\n if ((contractorCard as string).trim() === 'true') {\n return (\n <div\n ref={card}\n style={styleRequestAQuote}\n className={`request-a-quote__card-row row ${\n sticky ? 'request-a-quote__card-row--sticky ' : ''\n }${\n expanded && isTabletLandscape ? 'request-a-quote__card-row--open' : ''\n }`}\n >\n <div className=\"request-a-quote__card-wrapper\">\n <div className=\"request-a-quote__card\">\n <Card {...callUsCardLabels} />\n </div>\n </div>\n </div>\n );\n }\n\n const showExpandButton = () => {\n if (isTabletLandscape) {\n if (sticky && !expanded) {\n return true;\n }\n\n if (expanded) {\n return true;\n }\n }\n\n return false;\n };\n\n return (\n <>\n {showExpandButton() && (\n <button\n onClick={(e) => handleExpandButton(e)}\n className={`request-a-quote__expand-btn ${\n expanded ? 'request-a-quote__expand-btn--open' : ''\n }`}\n data-visible-layer={createDataLayerString({\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 contractor_certificate_name: contractorData.certificateName\n },\n event: 'sticky_request_quote',\n event_category: 'find a contractor',\n event_action: 'sticky request a quote: view',\n event_label: ''\n })}\n data-layer={createDataLayerString([\n {\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 contractor_certificate_name: contractorData.certificateName\n },\n event: 'sticky_request_quote',\n event_category: 'find a contractor',\n event_action: 'sticky request a quote: click',\n event_label: ''\n }\n ])}\n >\n {heading}\n </button>\n )}\n <div\n ref={card}\n style={styleRequestAQuote}\n className={`request-a-quote__card-row row ${\n sticky ? 'request-a-quote__card-row--sticky ' : ''\n }${\n expanded && isTabletLandscape ? 'request-a-quote__card-row--open' : ''\n }`}\n >\n <div className=\"request-a-quote__card-wrapper\">\n <div className=\"request-a-quote__card\">\n <GoogleReCaptchaProvider\n reCaptchaKey={props.reCaptchaSiteKey}\n useEnterprise={true}\n >\n <RequestAQuoteForm\n {...props}\n contractor={contractorData}\n formLabels={formLabels}\n ></RequestAQuoteForm>\n </GoogleReCaptchaProvider>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ContractorRequestAForm;\n"],"names":["StepForms","inputs","errorMessage","addressErrorMessage","formData","setFormData","setIsFormValid","isModal","contractorData","twoColumns","firstLoad","setFirstLoad","useState","scrollable","setScrollable","content","useRef","autocompleteInput","formValidation","setFormValidation","fieldTouched","setFieldTouched","interact","setInteract","requiredValues","useMemo","required","numRequired","num","object","useEffect","formValidationArray","handleValidation","prevFormValidation","handleAutocomplete","value","name","type","handleAddressBlur","prevFieldTouched","global","layer","_a","_fieldTouched","_formValidation","_b","input","textarea","checkValidation","formatPhoneNumber","cleaned","length","first","second","third","contentElement","renderOneColumnLayout","React","Autocomplete","e","prevFormData","renderTwoColumnLayout","twoColumnsInputs","remainingInputs","StepReviews","headingReviews","copyReviews","reviewName","contractorId","showDefaultContractor","defaultContractor","defaultContractorCopy","defaultLabel","setContractorSelected","certificationsCardLabel","viewAllCertificationsLabel","certificationsModalId","latitude","longitude","body","newBody","fieldsObjectModal","headlessEngine","headlessEngineModal","defaultCountry","advancedQuerySearchActionCreator","loadAdvancedSearchQueryActions","logInterfaceLoad","loadSearchAnalyticsActions","executeSearch","loadSearchActions","handleChange","contractorReview","contractor","CoveoContextModal","ContractorCheckbox","ResultListContractor","resultListModal","StepTerms","termsConditionsName","checkbox","copy","disclaimerHeading","disclaimer","urlParams","Form","formLabels","thankYouLabels","stepForm","stepReviews","stepTerms","reviewsName","endpointPost","modal","placeholderImg","contractorType","heading","ofSteps","progressBarAria","backBtn","continueBtn","submitBtn","errorRequired","addressError","dividerStates","errorLabel","thankYouCardLabels","stepFormLabels","stepReviewsLabels","stepTermsLabels","contractorObject","userObjectData","USER_PROFILE_KEYS","userGeolocationData","step","setStep","isFormValid","submitting","setSubmitting","submitError","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","Stars","Card","ContractorRequestAForm","contractorCard","callUsLabels","props","callUsCardLabels","sticky","setSticky","expanded","setExpanded","cardHeight","setCardHeight","isIOS","setIsIOS","isIOSDevice","handleScroll","rect","item","_c","cardFixed","clearAllBodyScrollLocks","handleExpandButton","prev","disableBodyScroll","style","isTabletLandscape","showExpandButton","createDataLayerString","GoogleReCaptchaProvider","RequestAQuoteForm"],"mappings":"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"}