Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7124 | Rev 7768 | 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";
6597 stevensc 2
 
3
let autoComplete;
4
 
5
const loadScript = (url, callback) => {
6
    let script = document.createElement("script");
7
    script.type = "text/javascript";
8
 
9
    if (script.readyState) {
10
        script.onreadystatechange = function () {
11
            if (script.readyState === "loaded" || script.readyState === "complete") {
12
                script.onreadystatechange = null;
13
                callback();
14
            }
15
        };
16
    } else {
17
        script.onload = () => callback();
18
    }
19
 
20
    script.src = url;
21
    document.getElementsByTagName("head")[0].appendChild(script);
22
};
23
 
24
function handleScriptLoad(updateQuery, autoCompleteRef) {
25
    autoComplete = new window.google.maps.places.Autocomplete(
26
        autoCompleteRef.current,
27
        { types: ["(cities)"], componentRestrictions: { country: "us" } }
28
    );
29
    autoComplete.setFields(["address_components", "formatted_address"]);
30
    autoComplete.addListener("place_changed", () =>
31
        handlePlaceSelect(updateQuery)
32
    );
33
}
34
 
35
async function handlePlaceSelect(updateQuery) {
36
    const addressObject = autoComplete.getPlace();
37
    const query = addressObject.formatted_address;
38
    updateQuery(query);
39
    console.log(addressObject);
40
}
41
 
7725 stevensc 42
function SearchLocationInput({ setValue, value }) {
6597 stevensc 43
    const autoCompleteRef = useRef(null);
44
 
7725 stevensc 45
    const googleApiKey = process.env.REACT_APP_GOOGLE_MAP_KEY
46
 
6597 stevensc 47
    useEffect(() => {
48
        loadScript(
49
            `https://maps.googleapis.com/maps/api/js?key=${googleApiKey}&libraries=places`,
7122 stevensc 50
            () => handleScriptLoad(setValue, autoCompleteRef)
6597 stevensc 51
        );
52
    }, []);
53
 
54
    return (
7124 stevensc 55
        <div className="form-group">
6597 stevensc 56
            <input
57
                ref={autoCompleteRef}
7122 stevensc 58
                onChange={event => setValue(event.target.value)}
6597 stevensc 59
                placeholder="Enter a City"
7122 stevensc 60
                value={value}
7124 stevensc 61
                className="form-control"
6597 stevensc 62
            />
63
        </div>
64
    );
65
}
66
 
67
export default SearchLocationInput;