{"version":3,"file":"static/chunks/pages/book-9098a8f4be0db404.js","mappings":"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","sources":["webpack://_N_E/./SDKs/Prismic/linkResolver.ts","webpack://_N_E/./SDKs/Prismic/hrefResolver.ts","webpack://_N_E/./SDKs/Prismic/htmlSerializer.ts","webpack://_N_E/./SDKs/Prismic/prismic.config.ts","webpack://_N_E/./components/ReturningCustomerWelcome/index.tsx","webpack://_N_E/./components/BookingOptSMS/index.tsx","webpack://_N_E/./components/BookingBillingInfo/index.tsx","webpack://_N_E/./components/BookingHomeInfo/index.tsx","webpack://_N_E/./pages/book.tsx","webpack://_N_E/?364c"],"sourcesContent":["const linkResolver = (doc) => {\n // URL for a category type\n if (doc.type === 'blog-post') {\n return `/blog/${doc.uid}`;\n }\n\n return '/';\n};\n\nexport { linkResolver as default };\n","const hrefResolver = (doc) => {\n if (doc.type === 'blog-post') {\n return '/blog/[uid]';\n }\n return '/';\n};\n\nexport { hrefResolver as default };\n","import React from 'react';\nimport { Elements } from 'prismic-reactjs';\nimport Router from 'next/router';\nimport linkResolver from './linkResolver';\nimport hrefResolver from './hrefResolver';\n// Handler that will do routing imperatively on internal links\nconst onClickHandler = (href, as) => (e) => {\n e.preventDefault();\n Router.push(href, as);\n};\nconst propsWithUniqueKey = (props, key) => Object.assign(props || {}, { key });\n\nconst htmlSerializer = function (type, element, content, children, key) {\n var props = {};\n switch (type) {\n case Elements.heading1: // Heading 1\n return React.createElement('h1', propsWithUniqueKey(props, key), children);\n\n case Elements.heading2: // Heading 2\n return React.createElement('h2', propsWithUniqueKey(props, key), children);\n\n case Elements.heading3: // Heading 3\n return React.createElement('h3', propsWithUniqueKey(props, key), children);\n\n case Elements.heading4: // Heading 4\n return React.createElement('h4', propsWithUniqueKey(props, key), children);\n\n case Elements.heading5: // Heading 5\n return React.createElement('h5', propsWithUniqueKey(props, key), children);\n\n case Elements.heading6: // Heading 6\n return React.createElement('h6', propsWithUniqueKey(props, key), children);\n\n case Elements.paragraph: // Paragraph\n return React.createElement('p', propsWithUniqueKey(props, key), children);\n\n case Elements.preformatted: // Preformatted\n return React.createElement('pre', propsWithUniqueKey(props, key), children);\n\n case Elements.strong: // Strong\n return React.createElement('strong', propsWithUniqueKey(props, key), children);\n\n case Elements.em: // Emphasis\n return React.createElement('em', propsWithUniqueKey(props, key), children);\n\n case Elements.listItem: // Unordered List Item\n return React.createElement('li', propsWithUniqueKey(props, key), children);\n\n case Elements.oListItem: // Ordered List Item\n return React.createElement('li', propsWithUniqueKey(props, key), children);\n\n case Elements.list: // Unordered List\n return React.createElement('ul', propsWithUniqueKey(props, key), children);\n\n case Elements.oList: // Ordered List\n return React.createElement('ol', propsWithUniqueKey(props, key), children);\n\n case Elements.embed: // Embed\n props = {\n 'data-oembed': element.oembed.embed_url,\n 'data-oembed-type': element.oembed.type,\n 'data-oembed-provider': element.oembed.provider_name,\n ...(element.label ? { className: element.label } : {}),\n };\n const embedHtml = React.createElement('div', {\n dangerouslySetInnerHTML: {\n __html: element.oembed.html,\n },\n // ensure that embeded content is centered\n className: 'd-flex justify-content-center mb-3',\n });\n return React.createElement('div', propsWithUniqueKey(props, key), embedHtml);\n\n case Elements.hyperlink: // Link\n if (element.data.link_type === 'Document') {\n // Only for internal links add the new onClick that will imperatively route to the appropiate page\n props = {\n onClick: onClickHandler(hrefResolver(element.data), linkResolver(element.data)),\n href: linkResolver(element.data),\n };\n return React.createElement('a', propsWithUniqueKey(props, key), children);\n }\n // Default link handling\n const targetAttr = element.data.target ? { target: element.data.target } : {};\n const relAttr = element.data.target ? { rel: 'noopener' } : {};\n props = { href: element.data.url || linkResolver(element.data), ...targetAttr, ...relAttr };\n return React.createElement('a', propsWithUniqueKey(props, key), children);\n\n case Elements.image: // Image\n var props = {};\n var internal = false;\n\n if (element.linkTo && element.linkTo.link_type === 'Document') {\n // Exclusively for internal links, build the object that can be used for router push\n internal = true;\n props = {\n onClick: onClickHandler(hrefResolver(element.linkTo), linkResolver(element.linkTo)),\n href: linkResolver(element.linkTo),\n };\n }\n // Handle images just like regular HTML Serializer\n const linkUrl = element.linkTo ? element.linkTo.url || linkResolver(element.linkTo) : null;\n const linkTarget = (element.linkTo && element.linkTo.target) ? { target: element.linkTo.target } : {};\n const linkRel = linkTarget.target ? { rel: 'noopener' } : {};\n const img = React.createElement('img', { src: element.url, alt: element.alt || '' });\n return React.createElement(\n 'p',\n propsWithUniqueKey({ className: [element.label || '', 'block-img'].join(' ') }, key),\n linkUrl ? React.createElement('a',\n // if it's an internal link, replace the onClick\n internal ? propsWithUniqueKey(props, key) : ({\n href: linkUrl,\n ...linkTarget,\n ...linkRel,\n }), img) : img,\n );\n\n case Elements.label: // Label\n props = element.data ? ({ className: element.data.label }) : {};\n return React.createElement('span', propsWithUniqueKey(props, key), children);\n\n case Elements.span: // Span\n if (content) {\n return content.split('\\n').reduce((acc, p) => {\n if (acc.length === 0) {\n return [p];\n }\n const brIndex = (acc.length + 1) / 2 - 1;\n const br = React.createElement('br', propsWithUniqueKey({}, brIndex));\n return acc.concat([br, p]);\n }, []);\n }\n return null;\n\n default:\n return null;\n }\n};\n\nexport default htmlSerializer;\n","import Prismic from 'prismic-javascript';\n\nexport const apiEndpoint = 'https://two-maids-consumer-site.cdn.prismic.io/api/v2';\nexport const accessToken = process.env.prismicAccessToken;\n\nconst createClientOptions = (req = null, prismicAccessToken = null) => {\n const reqOption = req ? { req } : {};\n const accessTokenOption = prismicAccessToken ? { accessToken: prismicAccessToken } : {};\n return {\n ...reqOption,\n ...accessTokenOption,\n };\n};\n\n// Client method to query documents from the Prismic repo\nexport const PrismicClient = (req = null) => (\n Prismic.client(apiEndpoint, createClientOptions(req, accessToken))\n);\n","import React, {useEffect, useRef} from 'react';\nimport { useRouter } from 'next/router';\nimport { useFranchiseeContext } from '../../context/Franchisee';\n\ninterface CustomerInfo {\n first_name: string;\n last_name: string;\n phone_number: string;\n email: string;\n people: any;\n pets: any;\n bedrooms: any;\n bathrooms: any;\n square_footage: any;\n address_line_one: string;\n address_line_two: string;\n state: string;\n city: string;\n zip_code: string;\n}\n\ninterface WelcomeBackComponentProps {\n customerInfo: CustomerInfo | null;\n}\n\n\n\n\nconst WelcomeBackComponent: React.FC = ({ customerInfo }) => {\n\n const { franchisee } = useFranchiseeContext(); \n const router = useRouter();\n const anchorRef = useRef(null);\n \n useEffect(() => {\n const timeoutId = setTimeout(() => {\n if (anchorRef.current) {\n const elementRect = anchorRef.current.getBoundingClientRect();\n const offsetTop = window.scrollY + elementRect.top - 160;\n window.scrollTo({\n top: offsetTop,\n behavior: 'smooth',\n });\n }\n }, 300);\n \n return () => clearTimeout(timeoutId);\n }, []);\n\n return (\n
\n

{customerInfo?.first_name}, welcome back to Two Maids {franchisee.name}!

\n {customerInfo && (\n <>\n
\n

{customerInfo?.address_line_one} {customerInfo?.address_line_two} {customerInfo?.city}, {customerInfo?.state} {customerInfo?.zip_code}

\n
\n
\n Different address?\n \n
\n \n )}\n
\n );\n};\n\nexport default WelcomeBackComponent;","import React, { useState, useEffect, useRef } from 'react';\nimport { Form } from 'react-bootstrap';\nimport axios from 'axios';\nimport leadSMSOptIn, { LeadSMSOptInData } from '../../SDKs/Gataware/partial/leadSMSOptIn';\nimport { useLeadContext } from '../../context/Lead';\n\ninterface BookingOptSMSProps {}\n\nconst BookingOptSMS: React.FC = () => {\n const [transactionSMS, setTransactionSMS] = useState(true);\n const [promotionSMS, setPromotionSMS] = useState(false);\n\n const { lead } = useLeadContext();\n const previousPromotionSMS = useRef(promotionSMS);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const storedPromotionSMS = sessionStorage.getItem('promotionSMS');\n if (storedPromotionSMS !== null) {\n setPromotionSMS(storedPromotionSMS === 'true');\n }\n }\n }, []);\n\n const handlePromotionCheckboxChange = (event) => {\n const isChecked = event.target.checked;\n setPromotionSMS(isChecked);\n\n if (typeof window !== 'undefined') {\n sessionStorage.setItem('promotionSMS', isChecked.toString());\n }\n };\n\n const optInSMS = async () => {\n const requestData = {\n leadId: lead.id,\n transactionSMS: transactionSMS,\n promotionSMS: promotionSMS,\n };\n\n if (promotionSMS !== previousPromotionSMS.current) {\n try {\n await axios.post('/api/lead-sms-opt-in/', requestData);\n } catch (error) {\n console.error('Error opting in SMS:', error);\n }\n }\n };\n\n useEffect(() => {\n optInSMS();\n previousPromotionSMS.current = promotionSMS;\n }, [promotionSMS]);\n\n return (\n <>\n
\n \n

\n I agree to receive periodic promotional and marketing SMS (text) messages from Two Maids Cleaning. \n You can reply STOP to opt out at any time or text HELP for assistance. Message & data rates may apply. \n Messaging frequency may vary. Please review our Privacy Policy.{' '}\n

\n
\n
\n \n );\n};\n\nexport default BookingOptSMS;","import axios, { AxiosResponse } from 'axios';\nimport React, { useCallback, useEffect, useState, useRef } from 'react';\nimport {\n Button,\n Col,\n Form,\n ListGroup,\n Modal,\n Row,\n Toast,\n} from 'react-bootstrap';\nimport 'react-bootstrap/Col';\nimport 'react-bootstrap/Form';\nimport { useDebouncedCallback } from 'use-debounce';\nimport Section from '../../components/Section';\nimport ReturningCustomerWelcome from '../ReturningCustomerWelcome';\nimport SyncLoader from 'react-spinners/SyncLoader';\nimport 'cleave.js/dist/addons/cleave-phone.us';\nimport NumberFormat from 'react-number-format';\nimport { datadogRum } from '@datadog/browser-rum';\nimport * as Sentry from '@sentry/node';\nimport { DateTime } from 'luxon';\nimport { RichText } from 'prismic-reactjs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport billingInfo, {\n BillingInfoData,\n} from '../../SDKs/Gataware/partial/billingInfo';\nimport htmlSerializer from '../../SDKs/Prismic/htmlSerializer';\nimport { PrismicClient } from '../../SDKs/Prismic/prismic.config';\nimport db from '../../SDKs/firebase/firebase';\nimport { REPLACE, useFranchiseeContext } from '../../context/Franchisee';\nimport { BILLING_INFO, CLEAR, useLeadContext } from '../../context/Lead';\nimport { pink500 } from '../../ui/colors';\nimport { validateEmail, validatePhone } from '../../utils/stringValidation';\nimport { MemoizedBookingStorePicker } from '../BookingStorePicker';\nimport ToastWrapper from '../ToastWrapper';\nimport BookingOptSMS from '../BookingOptSMS';\n\ninterface BookingBillingInfoProps {\n enableBooking?: any;\n handleLeadData?: any;\n bookingModalZipCode?: any;\n handleBookingModalZipCode?: any;\n onReturningCustomer?: any;\n // securityKey?: number;\n}\nconst BookingBillingInfo: React.FC = ({\n enableBooking,\n handleLeadData,\n bookingModalZipCode,\n handleBookingModalZipCode,\n onReturningCustomer,\n}: // securityKey,\nBookingBillingInfoProps) => {\n const { franchisee } = useFranchiseeContext();\n const franchiseeId = franchisee.id;\n const franchiseeName = franchisee.name;\n\n const { lead, dispatchLead } = useLeadContext();\n\n /* Form Fields */\n const [firstName, setFirstName] = useState(lead?.firstName ?? '');\n const [lastName, setLastName] = useState(lead?.lastName ?? '');\n const [email, setEmail] = useState(lead?.email ?? '');\n const [phonePrimary, setPhoneNumber] = useState(\n lead?.phonePrimary ?? ''\n );\n const [disabled, setDisabled] = useState(false);\n const [domainRef, setDomainRef] = useState('');\n const [tacData, setTacData] = useState();\n const [showModal, setShowModal] = useState(false);\n const [userZipCode, setUserZipCode] = useState('');\n const [searchZipCode, setSearchZipCode] = useState('');\n const [emailsIsValid, setEmailIsValid] = useState(false);\n const [emailToastText, setEmailToastText] = useState('');\n const [zipInputValue, setZipInputValue] = useState('');\n\n const [loading, setLoading] = useState(false);\n const [emailToast, setEmailToast] = useState(false);\n const [firstNameToast, setFirstNameToast] = useState(false);\n const [lastNameToast, setLastNameToast] = useState(false);\n const [phoneToast, setPhoneToast] = useState(false);\n const [leadToast, setLeadToast] = useState(false);\n const [showStorePicker, setShowStorePicker] = useState(false);\n const [isReturningCustomer, setIsReturningCustomer] = useState(false);\n const [customerInfo, setCustomerInfo] = useState(null);\n const [city, setCity] = useState('');\n const [state, setState] = useState('');\n const [zipDisabled, setZipDisabled] = useState(false);\n\n const handleShowStorePicker = (zipCode = '') => {\n if (zipCode.length === 5) {\n setZipInputValue(zipCode);\n }\n setShowStorePicker(false);\n };\n\n const [sentLeadNotification, setSentLeadNotification] =\n useState(false);\n const [cookieExists, setCookieExists] = useState(false);\n\n // const count = useSelector((state: RootState) => state.counter.value)\n const { dispatchFranchisee } = useFranchiseeContext();\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (window.document) {\n if (window.document.referrer === '') {\n setDomainRef(\n `${window.document.URL}${franchisee.slug}/`.replace('/book', '')\n );\n } else {\n setDomainRef(window.document.referrer);\n }\n }\n });\n\n /* populate the form fields */\n const syncLead = useCallback(() => {\n if (!lead) {\n return;\n }\n\n if (lead.firstName) {\n setFirstName(lead.firstName);\n }\n\n if (lead?.lastName) {\n setLastName(lead.lastName);\n }\n\n if (lead.email) {\n setEmail(lead.email);\n }\n\n if (lead.phonePrimary) {\n setPhoneNumber(lead.phonePrimary);\n }\n\n if (lead.zipCode) {\n setZipInputValue(lead.zipCode);\n }\n }, [lead]);\n\n useEffect(syncLead, [lead]);\n\n const checkFirstName = useDebouncedCallback(\n () => {\n if (firstName.replace(/\\s+/, '').length < 2) {\n setFirstNameToast(true);\n }\n },\n 1000,\n { trailing: true }\n );\n\n const checkLastName = useDebouncedCallback(\n () => {\n if (lastName.replace(/\\s+/, '').length < 2) {\n setLastNameToast(true);\n }\n },\n 1000,\n { trailing: true }\n );\n const checkEmail = useDebouncedCallback(\n () => {\n if (!validateEmail(email)) {\n setEmailToast(true);\n return false;\n }\n setEmailIsValid(true);\n return true;\n },\n 1200,\n { trailing: true }\n );\n\n const checkPhonePrimary = useDebouncedCallback(\n () => {\n if (!validatePhone(phonePrimary.replace('-', ' '))) {\n setPhoneToast(true);\n }\n },\n 1000,\n { trailing: true }\n );\n\n // check if all fields are ready to submit;\n const allFieldsAreValid = () =>\n validateEmail(email) &&\n validatePhone(phonePrimary.replace('-', '')) &&\n firstName.replace(/\\s+/, '').length >= 2 &&\n lastName.replace(/\\s+/, '').length >= 2 &&\n checkEmail &&\n zipInputValue !== undefined &&\n zipInputValue !== '' &&\n zipInputValue.length === 5;\n\n // const handleNoFranchiseSelected = () => {\n // handleShowStorePicker(true);\n // };\n\n useEffect(() => {\n axios\n .get('/api/lead-session/')\n .then((res) => {\n // console.log('lead-session', res);\n if (res.data === '') {\n setCookieExists(true);\n } else {\n setSentLeadNotification(true);\n }\n })\n .catch((err) => console.log(err));\n // console.log(cookieExists);\n }, []);\n\n // Check if the customer exists\n const checkIfEmailExists = useDebouncedCallback(\n async () => {\n try {\n const emailCheck = await axios.post('/api/check-if-customer-exists/', {\n email,\n });\n console.log('In the email check');\n console.log(emailCheck);\n if (emailCheck?.status === 200) {\n // dispatchLead({ type:CLEAR, payload: {}})\n setIsReturningCustomer(true);\n if (emailCheck?.data.data.first_name) {\n setFirstName(emailCheck?.data.data.first_name);\n }\n\n if (emailCheck?.data.data.last_name) {\n setLastName(emailCheck?.data.data.last_name);\n }\n\n if (emailCheck?.data.data.last_name) {\n setLastName(emailCheck?.data.data.last_name);\n }\n\n // // setPhoneNumber(phonePrimary)\n // // setEmail(emailCheck?.data.data.email)\n\n setCustomerInfo(emailCheck?.data.data);\n onReturningCustomer(emailCheck?.data.data);\n\n if (emailCheck?.data.data.city) {\n setCity(emailCheck?.data.data.city);\n }\n\n if (emailCheck?.data.data.state) {\n setState(emailCheck?.data.data.state);\n }\n\n if (emailCheck?.data.data.zip_code) {\n setZipInputValue(emailCheck?.data.data.zip_code);\n }\n\n setDisabled(true);\n // setZipDisabled(true);\n } else {\n // Any lead data past billing info needs to be cleared out if the email does not exist\n enableBooking();\n setIsReturningCustomer(false);\n onReturningCustomer(null);\n setCustomerInfo(null);\n }\n } catch (error) {\n console.log('Error checking email existence:', error);\n enableBooking();\n setIsReturningCustomer(false);\n onReturningCustomer(null);\n setCustomerInfo(null);\n }\n },\n 2000,\n { trailing: true }\n );\n\n // Clear the lead information\n const handleClearLead = () => {\n dispatchLead({ type: CLEAR, payload: {} });\n dispatchFranchisee({ type: CLEAR, payload: {} });\n axios.delete('/api/search-zip-code');\n setZipInputValue('');\n // setZipDisabled(false)\n setIsReturningCustomer(false);\n setCustomerInfo(null);\n };\n\n const firstNameInputRef = useRef(null);\n const zipCodeInputRef = useRef(null);\n\n useEffect(() => {\n if (firstNameInputRef.current && !disabled) {\n firstNameInputRef.current.focus();\n }\n }, [firstNameInputRef, disabled]);\n\n useEffect(() => {\n if (zipCodeInputRef.current && !disabled) {\n zipCodeInputRef.current.focus();\n }\n }, [zipCodeInputRef, disabled]);\n\n useEffect(() => {\n if (allFieldsAreValid() && email !== '') {\n checkIfEmailExists.callback();\n }\n }, [email, phonePrimary, firstName, lastName]);\n\n /* Submit Form Data to the API. If successful, set the lead data in the provider */\n const submitBillingInfo = useDebouncedCallback(\n async () => {\n if (!allFieldsAreValid()) {\n return;\n }\n\n const requestData: BillingInfoData = {\n firstName,\n lastName,\n email,\n phonePrimary,\n franchiseeId: isReturningCustomer\n ? customerInfo?.franchisee_id\n : franchiseeId,\n leadNotification: sentLeadNotification,\n referral: domainRef,\n city,\n state,\n zipCode: isReturningCustomer ? customerInfo?.zip_code : zipInputValue,\n utmSource: 'N/A',\n utmMedium: 'N/A',\n utmCampaign: 'N/A',\n promotionSMS: sessionStorage.getItem('promotionSMS') === 'true' || false,\n transactionSMS: true\n };\n\n if (lead?.id && lead?.id !== -1) {\n requestData.leadId = isReturningCustomer\n ? customerInfo?.lead_id\n : lead.id;\n requestData.franchiseeId = isReturningCustomer\n ? customerInfo?.franchisee_id\n : franchiseeId;\n sessionStorage.setItem('leadId', lead!.id.toString());\n }\n\n console.log('BookingBillingInfo requestData', requestData);\n // return\n\n setLoading(true);\n\n await axios\n .get('/api/utm-tracking-session/')\n .then((trackingResult) => {\n requestData.utmSource =\n trackingResult.data.data.utmTracking.utmSource;\n requestData.utmMedium =\n trackingResult.data.data.utmTracking.utmMedium;\n requestData.utmCampaign =\n trackingResult.data.data.utmTracking.utmCampaign;\n })\n .catch((e) => {\n // console.log('trackingResult ERROR', e)\n });\n\n axios\n .post('/api/billing-info/', requestData)\n .then(({ data, status }: AxiosResponse) => {\n console.log('BookingBillingInfo The data is: ', data);\n\n setLoading(false);\n switch (status) {\n case 200:\n if (data?.lead?.id) {\n if (data?.lead?.id === -1) {\n setLeadToast(true);\n }\n datadogRum.setUser({\n id: data?.lead?.id,\n name: `${data.lead.firstName} ${data.lead.lastName}`,\n email: data.lead.email,\n });\n try {\n (window as any).dataLayer = (window as any).dataLayer || [];\n (window as any).dataLayer.push({\n event: 'formSubmit',\n formName: 'Contact Information',\n formZip: zipInputValue,\n formId: data?.lead?.id,\n });\n } catch (e) {\n console.log(e);\n }\n\n data.lead.leadNotification = sentLeadNotification;\n\n dispatchLead({\n type: BILLING_INFO,\n payload: data.lead,\n });\n\n setSentLeadNotification(true);\n\n // Make sure lead notification is only sent once\n\n // setLead(data.lead);\n // setShowSuccessToast(true);\n axios\n .get('/api/user-location-session/')\n .then((locationResult) => {\n const { latitude, longitude } =\n locationResult.data.data.userLocation;\n try {\n db.ref(\n process.env.kpiDashboardCollectionName +\n '/' +\n data?.lead?.id\n ).set({\n firstName,\n lastName,\n lat: latitude,\n lng: longitude,\n email,\n phonePrimary,\n leadID: data.lead.id,\n step: 1,\n franchiseName: franchisee.name,\n });\n\n // Set the /users/:userId value to true\n } catch (error) {\n Sentry.captureException(error);\n console.log(error);\n }\n })\n .catch((e) => {\n console.log(e);\n Sentry.captureException(e);\n });\n try {\n const userStatusDatabaseRef = db.ref(\n `/online/${data?.lead?.id}`\n );\n\n db.ref('.info/connected').on('value', async (snap) => {\n if (snap.val() === true) {\n await userStatusDatabaseRef.onDisconnect().remove();\n await userStatusDatabaseRef.set({\n leadID: data?.lead?.id,\n });\n } else {\n await userStatusDatabaseRef.remove();\n }\n });\n } catch (error) {\n console.log(error);\n }\n } else {\n /* something went wrong (status 400) */\n // console.log('else block', result);\n // pushError(result.message);\n }\n break;\n case 400:\n break;\n default:\n break;\n }\n })\n .catch((error) => {\n /* something went wrong (problem on client) */\n setLoading(false);\n // console.log(error);\n Sentry.captureException(error);\n });\n },\n 2000,\n { trailing: true }\n );\n\n useEffect(() => {\n // Valid zip with appropriate length and franchisee selected\n if (zipInputValue && zipInputValue.length === 5) {\n axios\n .post('/api/get-franchisee-by-zone-zip-code/', {\n zipCode: zipInputValue,\n })\n .then((res) => {\n // console.log('The res is...')\n // console.log(res)\n if (res.data.data.length === 1) {\n // console.log('Only one location returned and should be auto selected upon the zip code being entered')\n const franchiseeData = res.data.data[0];\n console.log(franchiseeData);\n dispatchFranchisee({\n type: REPLACE,\n payload: {\n id: franchiseeData.id,\n name: franchiseeData.name,\n phonePrimary: franchiseeData.phone_primary,\n addressLineOne: franchiseeData.address_line_one,\n city: franchiseeData.city,\n state: franchiseeData.state,\n zipCode: franchiseeData.zip_code,\n slug: franchiseeData.slug,\n latitude: franchiseeData.latitude,\n longitude: franchiseeData.longitude,\n teamCount: franchiseeData.team_count,\n },\n });\n sessionStorage.setItem('selectedStore', franchiseeData.slug);\n setDisabled(false);\n } else if (res.data.data.length === 0) {\n axios\n .post('/api/get-locations/', {\n zipCode: zipInputValue,\n })\n .then((res) => {\n if (res.data?.data?.length === 1) {\n const franchiseeData = res.data.data[0];\n dispatchFranchisee({\n type: REPLACE,\n payload: {\n id: franchiseeData.id,\n name: franchiseeData.name,\n phonePrimary: franchiseeData.phone_primary,\n addressLineOne: franchiseeData.address_line_one,\n city: franchiseeData.city,\n state: franchiseeData.state,\n zipCode: franchiseeData.zip_code,\n slug: franchiseeData.slug,\n latitude: franchiseeData.latitude,\n longitude: franchiseeData.longitude,\n teamCount: franchiseeData.team_count,\n },\n });\n sessionStorage.setItem('selectedStore', franchiseeData.slug);\n setDisabled(false);\n } else {\n setShowStorePicker(true);\n }\n });\n } else {\n setShowStorePicker(true);\n }\n })\n .catch((e) => {\n console.log(e);\n Sentry.captureException(e);\n });\n } else {\n setShowStorePicker(false);\n }\n }, [zipInputValue]);\n\n // @ts-ignore\n useEffect(submitBillingInfo.callback, [\n firstName,\n lastName,\n email,\n phonePrimary,\n zipInputValue,\n franchiseeId,\n ]);\n\n useEffect(() => {\n let shouldDisable = true;\n\n if (franchisee.id !== -1 && !isReturningCustomer) {\n if (zipInputValue && zipInputValue.length === 5) {\n shouldDisable = false;\n }\n }\n\n if (!isReturningCustomer && checkEmail && allFieldsAreValid()) {\n enableBooking();\n } else if (lead?.email) {\n enableBooking();\n }\n\n setDisabled(shouldDisable);\n }, [\n franchisee,\n isReturningCustomer,\n disabled,\n firstName,\n lastName,\n email,\n phonePrimary,\n ]);\n\n useEffect(() => {\n async function fetchTAC() {\n try {\n const termsAndConditions = await PrismicClient().getSingle(\n 'terms-and-conditions',\n {}\n );\n setTacData(termsAndConditions);\n } catch (e) {\n console.log(e);\n }\n }\n fetchTAC();\n }, []);\n\n return (\n <>\n {/* */}\n \n \n Let's Find Your Store\n \n

\n \n \n {\n // Remove non-numeric characters from input\n const sanitizedValue = e.target.value.replace(/[^0-9]/g, '');\n // Limit the input to 5 characters\n if (sanitizedValue.length > 5) return;\n setZipInputValue(sanitizedValue);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setShowStorePicker(true);\n }\n }}\n disabled={zipDisabled ? true : false}\n style={{\n background: `${zipDisabled ? '#e9ecef' : ''}`,\n outline: 'none',\n color: '#495057',\n fontFamily: 'Gotham Medium',\n width: '150px',\n paddingLeft: '10px',\n textAlign: 'left',\n // pointerEvents: `${zipDisabled ? 'none' : 'auto'}`,\n }}\n />\n \n {franchiseeName !== 'Home' && (\n
\n Your store{' '}\n \n {franchiseeName === 'Home'\n ? 'ENTER YOUR ZIP CODE'\n : franchiseeName?.toUpperCase()}\n {' '}\n
\n )}\n \n \n \n \n \n Contact Information\n \n \n {isReturningCustomer && (\n \n X\n \n )}\n \n \n \n \n {\n const nameInput = e.currentTarget.value.replace(\n /[^a-zA-Z]+/g,\n ''\n );\n const uppercaseName =\n nameInput.charAt(0).toUpperCase() + nameInput.slice(1);\n setFirstName(uppercaseName);\n checkFirstName.callback();\n }}\n />\n \n Please enter your first name.\n \n \n\n \n {\n const lastNameInput = e.currentTarget.value.replace(\n /[^a-zA-Z]+/g,\n ''\n );\n const uppercaseLastName =\n lastNameInput.charAt(0).toUpperCase() +\n lastNameInput.slice(1);\n setLastName(uppercaseLastName);\n checkLastName.callback();\n }}\n />\n \n Please enter your last name.\n \n \n \n\n \n {\n let formatPhone = e.target.value.replace(/[ )(]/g, '');\n if (formatPhone[10] !== '_')\n formatPhone = `${formatPhone.slice(0, 3)}-${formatPhone.slice(\n 3\n )}`;\n\n setPhoneNumber(formatPhone);\n checkPhonePrimary.callback();\n }}\n // allowEmptyFormatting\n mask='_'\n required\n />\n \n\n \n {\n setEmail(e.target.value.toLowerCase());\n }}\n onBlur={() => {\n checkEmail.callback();\n }}\n disabled={disabled}\n required\n />\n \n Please enter your email address.\n \n \n \n \n {isReturningCustomer && (\n \n )}\n\n {/* Toasts */}\n \n setFirstNameToast(false)}\n show={firstNameToast}\n delay={4000}\n autohide\n >\n \n Please enter a first name with more than 2 letters.\n \n \n setLastNameToast(false)}\n show={lastNameToast}\n delay={4000}\n autohide\n >\n \n Please enter a last name with more than 2 letters.\n \n \n setEmailToast(false)}\n show={emailToast}\n delay={4000}\n autohide\n >\n \n Please enter a valid email.{' '}\n {emailToastText.length > 1 && (\n
Did you mean {emailToastText}?
\n )}\n
\n \n setPhoneToast(false)}\n show={phoneToast}\n delay={4000}\n autohide\n >\n \n Please fill in your phone number.\n \n \n setLeadToast(false)} show={leadToast}>\n \n An error has occured. Please refresh the page.\n \n \n
\n {showStorePicker && (\n \n )}\n\n {\n setShowModal(false);\n }}\n aria-labelledby='contained-modal-title-vcenter'\n centered\n style={{ padding: '10px' }}\n scrollable={true}\n className='tac-modal'\n >\n \n \n Terms and Conditions\n \n setShowModal(false)}\n title='home'\n className='btn btn-sm btn-primary'\n >\n Close\n \n \n \n
\n \n \n
\n \n Last Updated{' '}\n {DateTime.fromISO(\n tacData?.last_publication_date\n ).toLocaleString(DateTime.DATE_FULL)}\n \n
\n \n \n Last Updated{' '}\n {DateTime.fromISO(\n tacData?.last_publication_date\n ).toLocaleString(DateTime.DATE_FULL)}\n \n \n
\n
\n
\n \n \n );\n};\nexport default BookingBillingInfo;\n","/* eslint-disable radix */\nimport * as Sentry from '@sentry/node';\nimport axios, { AxiosResponse } from 'axios';\nimport _debounce from 'lodash/debounce';\nimport { userInfo } from 'os';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Alert, Col, Form, ListGroup, Toast } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport SyncLoader from 'react-spinners/SyncLoader';\nimport { useDebouncedCallback } from 'use-debounce';\nimport homeInfo, { HomeInfoData } from '../../SDKs/Gataware/partial/homeInfo';\nimport db from '../../SDKs/firebase/firebase';\nimport { useFranchiseeContext } from '../../context/Franchisee';\nimport { HOME_INFO, useLeadContext } from '../../context/Lead';\nimport { pink500 } from '../../ui/colors';\nimport PhoneLink from '../PhoneLink';\nimport ToastWrapper from '../ToastWrapper';\n\ninterface BookingHomeInfoProps {\n bookingDisabled?: boolean;\n enablePackage?: any;\n isReturningCustomer?: any;\n customerInfo?: any;\n}\nconst BookingHomeInfo: React.FC = ({\n bookingDisabled,\n enablePackage,\n isReturningCustomer,\n customerInfo\n}: BookingHomeInfoProps) => {\n const { franchisee } = useFranchiseeContext();\n const franchiseePhone = franchisee?.phonePrimary;\n const franchiseeId = franchisee?.id;\n const { lead, dispatchLead } = useLeadContext();\n const dispatch = useDispatch();\n /* Form Fields */\n const [bedroomCount, setBedroomCount] = useState(\n lead?.bedrooms ?? null\n );\n\n const [bathroomCount, setBathroomCount] = useState(\n lead?.bathrooms ?? null\n );\n\n const [peopleCount, setPeopleCount] = useState(lead?.people ?? null);\n\n const [petsCount, setPetsCount] = useState(lead?.pets ?? null);\n\n const [squareFeet, setSquareFeet] = useState(\n lead?.squareFootage ?? null\n );\n\n const [loading, setLoading] = useState(false);\n const [sqftToast, setSqftToast] = useState(false);\n const [disabled, setDisabled] = useState(true);\n let onlineUserReference;\n\n // set values for inputs if the lead is already in the system\n /* Enable user editing once there's a leadId */\n useEffect(() => {\n\n setDisabled(lead?.id == -1);\n setBedroomCount(lead?.bedrooms ?? 0);\n setBathroomCount(lead?.bathrooms ?? 0);\n setPeopleCount(lead?.people ?? 0);\n setPetsCount(lead?.pets ?? 0);\n setSquareFeet(lead?.squareFootage ?? 0);\n \n }, [lead]);\n\n /* validate that Home info is ready to update */\n\n const allFieldsAreValid = () =>\n lead?.id > -1 &&\n bedroomCount > 0 &&\n bathroomCount > 0 &&\n peopleCount > 0 &&\n squareFeet >= 499 &&\n squareFeet <= 6000;\n\n const parseStringToAbsolute = (input: string) => Math.abs(parseInt(input));\n\n function bathroomValidation(input: string) {\n const bathroomNumber = Math.abs(parseFloat(input));\n if (bathroomNumber > 99) return 99;\n if (bathroomNumber % 0.5) {\n return Math.round(bathroomNumber);\n } else return bathroomNumber;\n }\n\n useEffect(() => {\n if (allFieldsAreValid()) {\n enablePackage();\n if (!lead.hasOwnProperty('squareFootage')) {\n submitHomeInfo.callback();\n }\n }\n }, [bedroomCount, bathroomCount, peopleCount, squareFeet, petsCount, lead]);\n\n const detectUserAction = () => {\n if (lead?.id === -1) return;\n try {\n onlineUserReference = db.ref(`/online/${lead?.id}`);\n onlineUserReference.update({ typing: true });\n\n setTimeout(() => {\n onlineUserReference.update({ typing: false });\n }, 500);\n } catch (error) {\n console.log(error);\n }\n };\n\n const submitHomeInfo = useDebouncedCallback(() => {\n \n if (!allFieldsAreValid()) { return;}\n \n setLoading(true);\n \n const requestData: HomeInfoData = {\n leadId: isReturningCustomer ? customerInfo?.lead_id : lead.id,\n franchiseeId: isReturningCustomer ? customerInfo?.franchisee_id : franchiseeId,\n people: peopleCount,\n pets: petsCount,\n bedrooms: bedroomCount,\n bathrooms: bathroomCount,\n squareFootage: squareFeet,\n };\n\n axios\n .post('/api/home-info/', requestData)\n // .then((result) => {\n .then(({ data, status }: AxiosResponse) => {\n let result = data;\n setLoading(false);\n\n switch (status) {\n case 200:\n if (result.lead) {\n dispatchLead({ type: HOME_INFO, payload: result.lead });\n try {\n db.ref(\n process.env.kpiDashboardCollectionName +\n '/' +\n result?.lead?.id\n ).update({\n franchiseeId,\n people: peopleCount,\n pets: petsCount,\n bedrooms: bedroomCount,\n bathrooms: bathroomCount,\n squareFootage: squareFeet,\n leadID: isReturningCustomer ? customerInfo?.lead_id : result.lead.id,\n firstName: lead.firstName,\n lastName: lead.lastName,\n email: lead.email,\n phonePrimary: lead.phonePrimary,\n step: 2,\n });\n } catch (error) {\n Sentry.captureException(error);\n console.log(error);\n }\n try {\n const userStatusDatabaseRef = db.ref(`/online/${lead?.id}`);\n\n db.ref('.info/connected').on('value', async (snap) => {\n if (snap.val() === true) {\n await userStatusDatabaseRef.onDisconnect().remove();\n await userStatusDatabaseRef.set({\n leadID: lead?.id,\n });\n } else {\n await userStatusDatabaseRef.remove();\n }\n });\n } catch (error) {\n console.log(error);\n }\n }\n break;\n case 400:\n break;\n default:\n break;\n }\n })\n .catch((error) => {\n Sentry.captureException(error);\n // console.log({ error });\n setLoading(false);\n });\n detectUserAction();\n }, 2000,\n { trailing: true });\n\n const checkSqft = useDebouncedCallback(\n () => {\n if (squareFeet < 500) setSqftToast(true);\n if (petsCount === null) setPetsCount(0);\n },\n 1000,\n { trailing: true }\n );\n\n useEffect(submitHomeInfo.callback, [\n bedroomCount,\n bathroomCount,\n peopleCount,\n petsCount,\n squareFeet,\n ]);\n\n return (\n <>\n {\n isReturningCustomer ? (\n <>\n \n Home Details\n \n
\n
\n

Bedrooms

\n

{bedroomCount}

\n
\n\n
\n

Bathrooms

\n

{bathroomCount}

\n
\n\n
\n

People

\n

{peopleCount}

\n
\n\n
\n

Pets

\n

{petsCount}

\n
\n\n
\n

Square Footage

\n

{squareFeet}

\n
\n
\n \n ) : (\n
\n
\n
\n

\n \n Tell Us About Your Home\n \n

\n \n
\n \n \n \n Bedrooms\n \n {\n const newBedroomCount: number = parseStringToAbsolute(\n e.target.value\n );\n newBedroomCount > 99\n ? setBedroomCount(99)\n : setBedroomCount(newBedroomCount);\n }}\n />\n \n \n \n Bathrooms\n \n {\n const newBathroomCount: number = bathroomValidation(\n e.target.value\n );\n setBathroomCount(newBathroomCount);\n }}\n />\n \n \n \n People\n \n {\n const newPeopleCount: number = parseStringToAbsolute(\n e.target.value\n );\n newPeopleCount > 49\n ? setPeopleCount(49)\n : setPeopleCount(newPeopleCount);\n }}\n />\n \n \n \n Pets\n \n {\n const newPetsCount: number = parseStringToAbsolute(\n e.target.value\n );\n newPetsCount > 9 ? setPetsCount(9) : setPetsCount(newPetsCount);\n }}\n />\n \n \n \n Square Footage\n \n {\n const newSquareFeet: number = parseStringToAbsolute(\n e.target.value\n );\n newSquareFeet > 6000\n ? setSquareFeet(6000)\n : setSquareFeet(newSquareFeet);\n checkSqft.callback();\n }}\n />\n \n \n
\n 6000 && true}>\n \n \n \n Please Call for a quote\n to fit your cleaning needs!\n \n \n \n \n \n setSqftToast(false)}\n delay={4000}\n autohide\n >\n \n Square Footage must be larger than 500\n \n \n \n
\n
)}\n \n );\n};\n\nBookingHomeInfo.defaultProps = {\n // add booking home info default props here\n bookingDisabled: true,\n};\n\nexport default BookingHomeInfo;\n","import camelcaseKeys from 'camelcase-keys';\nimport { withIronSession } from 'next-iron-session';\nimport dynamic from 'next/dynamic';\nimport React, { useEffect, useState } from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport Layout from '../components/Layout';\nimport OpenGraphDescription from '../components/OpenGraphDescription';\nimport OpenGraphTitle from '../components/OpenGraphTitle';\nimport Section from '../components/Section';\nimport { LeadProvider } from '../context/Lead';\nimport BookingBillingInfo from '../components/BookingBillingInfo';\nimport BookingHomeInfo from '../components/BookingHomeInfo';\nimport BookingStickyFooter from '../components/BookingStickyFooter';\nimport { FranchiseeProvider } from '../context/Franchisee';\nimport { FranchiseeState } from '../context/Franchisee/franchisee.types';\nimport axios, { AxiosResponse } from 'axios';\nimport { useIdleTimer } from 'react-idle-timer';\nimport { useDispatch, useSelector } from 'react-redux';\nimport db from '../SDKs/firebase/firebase';\nimport BookTopHero from '../components/BookTopHero';\nimport Head from '../components/head';\nimport franchiseeConfig from '../sessions/franchisee';\n// import BookingOptSMS from '../components/BookingOptSMS';\n\nexport const getServerSideProps = withIronSession(async ({ req }) => {\n try {\n const franchiseeId = req.session.get('franchiseeId');\n\n if (!franchiseeId) {\n return {\n props: { franchisee: null },\n };\n }\n\n const locationsResponse = await axios\n .post('/api/get-locations', { ids: [franchiseeId] })\n .then(({ data }) => {\n // server side response isn't automatically parsing JSON.\n const responseData = JSON.parse(data);\n if (responseData.data?.length) {\n const currentFranchisee = camelcaseKeys(responseData.data[0]);\n return currentFranchisee;\n }\n return null;\n });\n\n return {\n props: {\n franchisee: locationsResponse,\n },\n };\n } catch (e) {\n return {\n props: {},\n };\n }\n}, franchiseeConfig);\n\n// dynamic imports\nconst BookingPackageSelection = dynamic(\n () => import('../components/BookingPackageSelection')\n);\n\ninterface BookProps {\n franchisee?: FranchiseeState;\n}\n\nconst Book: React.FC = ({ franchisee }: BookProps) => {\n const [bookingDisabled, setBookingDisabled] = useState(true);\n const [packageDisabled, setPackageDisabled] = useState(true);\n // const [hideSection, setHideSection] = useState(true);\n const [showBookingModal, setShowBookingModal] = useState(false);\n const [bookingModalOrigin, setBookingModalOrigin] = useState('');\n const [bookingModalZipCode, setBookingModalZipCode] = useState('');\n // const [securityKey, setSecurityKey] = useState();\n const [leadData, setLeadData] = useState({});\n const [isReturningCustomer, setIsReturningCustomer] = useState(false);\n const [customerInfo, setCustomerInfo] = useState(null);\n const dispatch = useDispatch();\n\n const enableBooking = () => {\n setBookingDisabled(false);\n };\n const enablePackage = () => {\n setPackageDisabled(false);\n };\n\n // const unHideSection = () => {\n // setHideSection(false);\n // }\n\n const handleLeadData = (data: object) => {\n setLeadData(data);\n };\n\n const handleReturningCustomer = (customerData) => {\n if (customerData !== null) {\n setIsReturningCustomer(true);\n setCustomerInfo(customerData);\n } else {\n setIsReturningCustomer(false);\n }\n };\n\n const handleShowStorePicker = (flag) => {\n setShowBookingModal(flag);\n setBookingModalOrigin('book');\n };\n const handleBookingModalZipCode = (zipCode) => {\n setBookingModalZipCode(zipCode);\n };\n\n\n //dashboard idle detection\n const handleOnActive = () => {\n axios\n .get('/api/lead-session/')\n .then((res) => {\n if (!res.data.length) return;\n const lead = res.data.data.lead.id;\n const userStatusDatabaseRef = db.ref(`/online/${lead}`);\n userStatusDatabaseRef.update({\n leadID: lead,\n });\n })\n .catch((err) => console.log(err));\n };\n\n useIdleTimer({\n timeout: 1000,\n onActive: handleOnActive,\n debounce: 2000,\n });\n\n return (\n \n \n \n \n \n \n\n \n Start your journey to a cleaner home with Two Maids. Simply book our professional cleaning services and let us handle the dirty work!\n \n
\n\n
\n
\n \n \n \n\n {/* {!isReturningCustomer && } */}\n <>\n \n \n \n \n \n
\n
\n \n
\n
\n
\n );\n};\nBook.defaultProps = {\n franchisee: null,\n};\n\nexport default Book;\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/book\",\n function () {\n return require(\"private-next-pages/book.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/book\"])\n });\n }\n "],"names":["linkResolver","doc","type","uid","hrefResolver","onClickHandler","href","as","e","preventDefault","Router","propsWithUniqueKey","props","key","Object","assign","element","content","children","Elements","React","oembed","embed_url","provider_name","label","className","embedHtml","dangerouslySetInnerHTML","__html","html","data","link_type","onClick","targetAttr","target","relAttr","rel","url","internal","linkTo","linkUrl","linkTarget","linkRel","img","src","alt","join","split","reduce","acc","p","length","brIndex","br","concat","apiEndpoint","accessToken","process","env","prismicAccessToken","createClientOptions","req","reqOption","accessTokenOption","PrismicClient","Prismic","customerInfo","franchisee","useFranchiseeContext","router","useRouter","anchorRef","useRef","useEffect","timeoutId","setTimeout","current","elementRect","getBoundingClientRect","offsetTop","window","scrollY","top","scrollTo","behavior","clearTimeout","ref","first_name","name","address_line_one","address_line_two","city","state","zip_code","style","display","marginBottom","push","pathname","useState","transactionSMS","promotionSMS","setPromotionSMS","lead","useLeadContext","previousPromotionSMS","storedPromotionSMS","sessionStorage","getItem","optInSMS","requestData","leadId","id","axios","console","error","Form","checked","onChange","event","isChecked","setItem","toString","fontSize","enableBooking","onReturningCustomer","handleLeadData","bookingModalZipCode","handleBookingModalZipCode","franchiseeId","franchiseeName","dispatchLead","firstName","setFirstName","lastName","setLastName","email","setEmail","phonePrimary","setPhoneNumber","disabled","setDisabled","domainRef","setDomainRef","tacData","setTacData","showModal","setShowModal","setEmailIsValid","emailToastText","zipInputValue","setZipInputValue","loading","setLoading","emailToast","setEmailToast","firstNameToast","setFirstNameToast","lastNameToast","setLastNameToast","phoneToast","setPhoneToast","leadToast","setLeadToast","showStorePicker","setShowStorePicker","isReturningCustomer","setIsReturningCustomer","setCustomerInfo","setCity","setState","zipDisabled","sentLeadNotification","setSentLeadNotification","setCookieExists","dispatchFranchisee","useDispatch","document","referrer","URL","slug","replace","syncLead","useCallback","zipCode","checkFirstName","useDebouncedCallback","trailing","checkLastName","checkEmail","validateEmail","checkPhonePrimary","validatePhone","allFieldsAreValid","undefined","then","res","err","log","checkIfEmailExists","emailCheck","status","last_name","firstNameInputRef","zipCodeInputRef","focus","callback","submitBillingInfo","franchisee_id","leadNotification","referral","utmSource","utmMedium","utmCampaign","lead_id","trackingResult","utmTracking","datadogRum","dataLayer","formName","formZip","formId","BILLING_INFO","payload","locationResult","userLocation","latitude","longitude","db","set","lat","lng","leadID","step","franchiseName","Sentry","userStatusDatabaseRef","on","snap","val","onDisconnect","remove","franchiseeData","REPLACE","phone_primary","addressLineOne","teamCount","team_count","shouldDisable","getSingle","termsAndConditions","fetchTAC","justifyContent","alignItems","flex","flexDirection","gap","value","placeholder","sanitizedValue","onKeyDown","background","outline","color","fontFamily","width","paddingLeft","textAlign","cursor","toUpperCase","pink500","size","CLEAR","Col","autoComplete","required","nameInput","currentTarget","uppercaseName","charAt","slice","lastNameInput","uppercaseLastName","customInput","format","formatPhone","mask","toLowerCase","onBlur","ReturningCustomerWelcome","ToastWrapper","Toast","onClose","show","delay","autohide","showBookingModal","handleShowStorePicker","Modal","onHide","centered","padding","scrollable","margin","Button","title","Section","xs","lg","Row","xl","DateTime","last_publication_date","toLocaleString","RichText","render","htmlSerializer","BookingHomeInfo","onlineUserReference","bookingDisabled","enablePackage","franchiseePhone","bedrooms","bedroomCount","setBedroomCount","bathrooms","bathroomCount","setBathroomCount","people","peopleCount","setPeopleCount","pets","petsCount","setPetsCount","squareFootage","squareFeet","setSquareFeet","sqftToast","setSqftToast","parseStringToAbsolute","input","Math","abs","parseInt","hasOwnProperty","submitHomeInfo","result","HOME_INFO","update","typing","detectUserAction","checkSqft","noValidate","htmlFor","pattern","min","newBedroomCount","newBathroomCount","bathroomNumber","parseFloat","round","bathroomValidation","newPeopleCount","toFixed","newPetsCount","newSquareFeet","Alert","variant","ListGroup","PhoneLink","number","defaultProps","BookingPackageSelection","dynamic","Book","setBookingDisabled","packageDisabled","setPackageDisabled","setLeadData","useIdleTimer","timeout","onActive","debounce","Franchisee","franchiseeValue","Lead","Layout","booking","alternateFooter","description","OpenGraphTitle","BookTopHero","page","subheading","OpenGraphDescription","customerData","BookingStickyFooter","__NEXT_P"],"sourceRoot":""}