Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 473 | Rev 475 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
472 stevensc 1
import { useState, useEffect } from 'react'
2
 
473 stevensc 3
const useLocationAutocomplete = (inputRef) => {
472 stevensc 4
    const [addresObject, setAddressObject] = useState({})
5
    const [error, setError] = useState(null)
6
    let autoComplete
7
 
8
    function handleScriptLoad(input) {
473 stevensc 9
        autoComplete = new window.google.maps.places.Autocomplete(input, {
10
            types: ['(cities)'],
11
        })
472 stevensc 12
        autoComplete.setFields([
13
            'address_components',
14
            'formatted_address',
15
            'geometry',
16
        ])
17
        autoComplete.addListener('place_changed', handlePlaceSelect)
18
    }
19
 
20
    function handlePlaceSelect() {
21
        const addressObject = autoComplete.getPlace()
22
        const query = addressObject.formatted_address
23
        const address = {}
24
 
474 stevensc 25
        console.log(query, addressObject)
26
 
472 stevensc 27
        if (query) {
28
            setError(null)
29
            addresObject.address_components?.map((address_component) => {
30
                const address_component_name = address_component.long_name
31
                const address_component_type = address_component.types[0]
32
 
33
                switch (address_component_type) {
473 stevensc 34
                    case 'route':
35
                        address['address1'] = address_component_name
472 stevensc 36
                        break
473 stevensc 37
                    case 'sublocality':
38
                        address['address2'] = address_component_name
472 stevensc 39
                        break
473 stevensc 40
                    case 'locality':
41
                        address['city1'] = address_component_name
472 stevensc 42
                        break
473 stevensc 43
                    case 'administrative_area_level_2':
44
                        address['city2'] = address_component_name
472 stevensc 45
                        break
473 stevensc 46
                    case 'administrative_area_level_1':
47
                        address['state'] = address_component_name
472 stevensc 48
                        break
473 stevensc 49
                    case 'country':
50
                        address['country'] = address_component_name
472 stevensc 51
                        break
473 stevensc 52
                    case 'postal_code':
53
                        address['postal_code'] = address_component_name
472 stevensc 54
                        break
473 stevensc 55
                    case 'geometry':
56
                        address['latitude'] = address_component.latitude
57
                        address['longitude'] = address_component.longitude
472 stevensc 58
                        break
59
                    default:
60
                        break
61
                }
62
            })
63
 
474 stevensc 64
            console.log(address)
65
 
472 stevensc 66
            setAddressObject({ ...address, formatted_address: query })
473 stevensc 67
        } else {
472 stevensc 68
            setError('Ha ocurrido un error')
69
        }
70
    }
71
 
72
    useEffect(() => {
473 stevensc 73
        if (inputRef) {
74
            handleScriptLoad(inputRef)
75
        }
472 stevensc 76
    }, [inputRef])
77
 
78
    return { ...addresObject, error }
79
}
80
 
473 stevensc 81
export default useLocationAutocomplete