Rev 6829 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState, useEffect, useRef } from 'react'import FormErrorFeedback from '../form-error-feedback/FormErrorFeedback'const UbicationInput = ({onGetAddress,settedQuery,placeholder = 'Ubicación',}) => {const [addresObject, setAddressObject] = useState({})const [query, setQuery] = useState('')const [error, setError] = useState('')const autoCompleteRef = useRef(null)let autoCompletefunction handleScriptLoad(updateQuery,autoCompleteRef,setAddresObject,setError) {autoComplete = new window.google.maps.places.Autocomplete(autoCompleteRef.current,{ types: ['(cities)'] })autoComplete.setFields(['address_components','formatted_address','geometry',])autoComplete.addListener('place_changed', () =>handlePlaceSelect(updateQuery, setAddresObject, setError))}async function handlePlaceSelect(updateQuery, setAddresObject, setError) {const addressObject = autoComplete.getPlace()const query = addressObject.formatted_addressif (query) {setError('')updateQuery(query)setAddresObject({...addressObject,address_components: [...addressObject.address_components,{latitude: addressObject.geometry.location.lat(),longitude: addressObject.geometry.location.lng(),types: ['geometry'],},],})} else {setError('$error_msg')}}useEffect(() => {handleScriptLoad(setQuery, autoCompleteRef, setAddressObject, setError)}, [])useEffect(() => {onGetAddress(addresObject, query)}, [addresObject])return (<React.Fragment><inputtype="text"id="location_search"name="location_search"className="form-control"placeholder={placeholder}ref={autoCompleteRef}onChange={(event) => {setAddressObject({})setQuery(event.target.value)}}value={settedQuery || query}/>{error && <FormErrorFeedback>{error}</FormErrorFeedback>}</React.Fragment>)}export default UbicationInput