Proyectos de Subversion LeadersLinked - SPA

Rev

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