{"version":3,"file":"autocomplete-93effac2.js","sources":["../../../../src/scripts/react-components/shingle-detail-masthead/autocomplete.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport {\n COOKIE_NAMES,\n GeolocationType,\n getUserProfile,\n secureStorage\n} from '../../helpers/global-storage';\nimport { personalizeAddressData } from '../../helpers/personalize';\nimport { ExtendedWindowType } from '../../helpers/global-types';\n\ntype AutocompleteProp = {\n label: string;\n name: string;\n placeholder: string;\n tooltip?: string;\n type: string;\n value: string;\n setValue: React.Dispatch<\n React.SetStateAction<{ address: string; zip: string; country: string }>\n >;\n error: boolean;\n setError: React.Dispatch>;\n errorLabel: string;\n clearLabel: string;\n countries: string[];\n};\n\nconst Autocomplete: React.FC = ({\n label,\n name,\n placeholder,\n tooltip,\n type,\n value,\n setValue,\n errorLabel,\n clearLabel,\n error,\n setError,\n countries\n}) => {\n const autocompleteRef = useRef(null);\n const autocompleteInput = useRef(null);\n const [touched, setTouched] = useState(false);\n const [showClearButton, setShowClearButton] = useState(false);\n const options = {\n componentRestrictions: { country: countries },\n fields: ['formatted_address', 'address_components', 'geometry'],\n types: ['postal_code', 'route']\n };\n\n useEffect(() => {\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('place_changed', async function () {\n const place = await (\n autocompleteRef.current as google.maps.places.Autocomplete\n ).getPlace();\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 => item.types.includes('postal_code'));\n if (!zipCode) {\n setError(true);\n return;\n }\n const country = _place.find(item => item.types.includes('country'));\n const streetNumber = _place.find(item =>\n item.types.includes('street_number')\n );\n const street = _place.find(item => item.types.includes('route'));\n const state = _place.find(item =>\n item.types.includes('administrative_area_level_1')\n );\n const city = _place.find(item => item.types.includes('locality'));\n const latitude = _location.lat();\n const longitude = _location.lng();\n\n let queryCountry = country?.short_name;\n let queryZip = zipCode?.long_name?.trim();\n\n if (queryCountry?.toUpperCase() === 'US') {\n queryCountry = 'USA';\n }\n\n if (queryCountry?.toUpperCase() === 'CA') {\n queryCountry = 'CAN';\n\n //remove white space from postal code\n queryZip = queryZip?.replace(/\\s/g, '');\n }\n\n setValue(prev => ({\n ...prev,\n [name]: place.formatted_address ? place.formatted_address : '',\n zip: queryZip ? queryZip : '',\n country: queryCountry ? queryCountry : ''\n }));\n if (zipCode) {\n setError(false);\n }\n\n const geolocationData: GeolocationType = {\n latitude,\n longitude,\n zip: zipCode?.long_name as string,\n country: country?.short_name as string,\n address: place.formatted_address\n };\n\n secureStorage.set(\n COOKIE_NAMES.geolocation,\n JSON.stringify(geolocationData)\n );\n\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {\n zip_code: geolocationData.zip,\n zip_code_country: geolocationData.country\n },\n event: 'zip_code',\n event_category: 'geo info',\n event_action: 'zip code updated'\n });\n\n const fullStreet = `${streetNumber?.long_name} ${street?.long_name}`;\n\n const sitecorePersonalizeAddress = {\n Street: fullStreet.trim(),\n City: city?.long_name,\n State: state?.short_name,\n Country: country?.short_name,\n PostalCode: zipCode?.long_name,\n Email: getUserProfile()?.email,\n PartitionKey: new Date().getFullYear().toString(),\n RowKey: new Date().getTime().toString()\n };\n\n const { Street, City, State, Country, PostalCode } =\n sitecorePersonalizeAddress;\n\n if (streetNumber && Street && City && State && Country && PostalCode) {\n personalizeAddressData(sitecorePersonalizeAddress);\n }\n\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {},\n event: 'typeahead',\n event_category: 'typeahead',\n event_action: 'click',\n event_label: 'address'\n });\n });\n }\n }, []);\n\n useEffect(() => {\n if (\n autocompleteInput.current &&\n value &&\n value !== (autocompleteInput.current as HTMLInputElement)?.value\n ) {\n (autocompleteInput.current as HTMLInputElement).value = value;\n }\n }, [value, autocompleteInput.current]);\n\n const handleClear = () => {\n if (autocompleteInput.current) {\n (autocompleteInput.current as HTMLInputElement).value = '';\n }\n setValue(prev => ({\n ...prev,\n [name]: '',\n zip: '',\n country: ''\n }));\n\n setShowClearButton(false);\n };\n\n const handleChange = () => {\n if (autocompleteInput.current) {\n const input = (autocompleteInput.current as HTMLInputElement).value;\n if (input.length > 0) {\n setShowClearButton(true);\n } else {\n setShowClearButton(false);\n }\n }\n };\n\n const handleTypeAheadViewed = () => {\n const global = (window as ExtendedWindowType).dataLayer;\n const viewed = {\n event_attributes: {},\n event: 'typeahead',\n event_category: 'typeahead',\n event_action: 'viewed',\n event_label: 'address'\n };\n if (global.length > 0) {\n if (global[global.length - 1].event_action !== 'viewed') {\n global.push(viewed);\n }\n } else {\n global.push(viewed);\n }\n };\n\n return (\n \n
\n \n {label}\n {tooltip ? (\n \n ) : null}\n \n {\n touched && setError(true);\n }}\n onChange={() => {\n touched && setError(true);\n handleChange();\n handleTypeAheadViewed();\n }}\n onBlur={() => setTouched(true)}\n />\n\n {(value?.length > 0 || showClearButton) && (\n \n )}\n
\n {error && {errorLabel}}\n \n );\n};\n\nexport default Autocomplete;\n"],"names":["Autocomplete","label","name","placeholder","tooltip","type","value","setValue","errorLabel","clearLabel","error","setError","countries","autocompleteRef","useRef","autocompleteInput","touched","setTouched","useState","showClearButton","setShowClearButton","options","useEffect","place","_place","_location","_a","zipCode","item","country","streetNumber","street","state","city","latitude","longitude","queryCountry","queryZip","_b","prev","geolocationData","secureStorage","COOKIE_NAMES","sitecorePersonalizeAddress","_c","getUserProfile","Street","City","State","Country","PostalCode","personalizeAddressData","handleClear","handleChange","handleTypeAheadViewed","global","viewed","React"],"mappings":"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"}