Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
7122 stevensc 1
import React, { useEffect, useRef } from "react";
7853 stevensc 2
import { useState } from "react";
6597 stevensc 3
 
7899 stevensc 4
let autoComplete;
6597 stevensc 5
 
7899 stevensc 6
const loadScript = (url, callback) => {
7
    let script = document.createElement("script");
8
    script.type = "text/javascript";
6597 stevensc 9
 
7899 stevensc 10
    if (script.readyState) {
11
        script.onreadystatechange = function () {
12
            if (script.readyState === "loaded" || script.readyState === "complete") {
13
                script.onreadystatechange = null;
14
                callback();
15
            }
16
        };
17
    } else {
18
        script.onload = () => callback();
19
    }
6597 stevensc 20
 
7899 stevensc 21
    script.src = url;
22
    document.getElementsByTagName("head")[0].appendChild(script);
23
};
7878 stevensc 24
 
7899 stevensc 25
function SearchLocationInput({ googleApiKey, setValue, value }) {
7878 stevensc 26
 
7899 stevensc 27
    const autoCompleteRef = useRef(null);
28
    const [data, setData] = useState({
29
        formatted_address: '',
30
        address1: '',
31
        address2: '',
32
        country: '',
33
        state: '',
34
        city1: '',
35
        city2: '',
36
        postal_code: '',
37
        latitude: 0,
38
        longitude: 0,
39
        location_search: ''
40
    })
7878 stevensc 41
 
7884 stevensc 42
    function handleScriptLoad(updateQuery, autoCompleteRef, setData) {
43
        autoComplete = new window.google.maps.places.Autocomplete(
44
            autoCompleteRef.current,
45
            { types: ["(cities)"] }
46
        );
47
        autoComplete.addListener("place_changed", () =>
7899 stevensc 48
            handlePlaceSelect(updateQuery)
7884 stevensc 49
        );
7878 stevensc 50
    }
51
 
7899 stevensc 52
    async function handlePlaceSelect(updateQuery) {
6597 stevensc 53
 
7899 stevensc 54
        const place = await autoComplete.getPlace()
6597 stevensc 55
 
7911 stevensc 56
        if (place.geometry) {
57
 
58
            setData({
59
                ...data,
60
                formatted_address: place.formatted_address,
61
                latitude: place.geometry.location.lat(),
62
                longitude: place.geometry.location.lng()
63
            })
64
 
65
            place.address_components.forEach((address_component) => {
66
                if (address_component.types[0] == "route") {
67
                    setData({
68
                        ...data,
69
                        address1: address_component.long_name,
70
                    })
71
                }
72
                if (address_component.types[0] == "sublocality") {
73
                    setData({
74
                        ...data,
75
                        address2: address_component.long_name,
76
                    })
77
                }
78
                if (address_component.types[0] == "locality") {
79
                    setData({
80
                        ...data,
81
                        city1: address_component.long_name,
82
                    })
83
                }
84
                if (address_component.types[0] == "administrative_area_level_2") {
85
                    setData({
86
                        ...data,
87
                        city2: address_component.long_name,
88
                    })
89
                }
90
                if (address_component.types[0] == "administrative_area_level_1") {
91
                    setData({
92
                        ...data,
93
                        state: address_component.long_name
94
                    })
95
                }
96
                if (address_component.types[0] == "country") {
97
                    setData({
98
                        ...data,
99
                        country: address_component.long_name
100
                    })
101
                }
102
                if (address_component.types[0] == "postal_code") {
103
                    setData({
104
                        ...data,
105
                        postal_code: address_component.long_name
106
                    })
107
                }
108
            })
109
 
110
        }
111
 
7899 stevensc 112
        updateQuery(place.formatted_address)
6597 stevensc 113
 
7884 stevensc 114
    }
7878 stevensc 115
 
7884 stevensc 116
 
6597 stevensc 117
    useEffect(() => {
118
        loadScript(
119
            `https://maps.googleapis.com/maps/api/js?key=${googleApiKey}&libraries=places`,
7878 stevensc 120
            () => handleScriptLoad(setValue, autoCompleteRef, setData)
6597 stevensc 121
        );
122
    }, []);
123
 
124
    return (
7124 stevensc 125
        <div className="form-group">
6597 stevensc 126
            <input
127
                ref={autoCompleteRef}
7122 stevensc 128
                onChange={event => setValue(event.target.value)}
6597 stevensc 129
                placeholder="Enter a City"
7122 stevensc 130
                value={value}
7124 stevensc 131
                className="form-control"
6597 stevensc 132
            />
133
        </div>
134
    );
135
}
136
 
137
export default SearchLocationInput;