Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 473 | Ir a la última revisión | | Ultima modificación | Ver Log |

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