Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7884 | Rev 7911 | 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
 
7899 stevensc 56
        setData({
57
            ...data,
58
            formatted_address: place.formatted_address
59
        })
60
        updateQuery(place.formatted_address)
6597 stevensc 61
 
7884 stevensc 62
    }
7878 stevensc 63
 
7884 stevensc 64
 
6597 stevensc 65
    useEffect(() => {
66
        loadScript(
67
            `https://maps.googleapis.com/maps/api/js?key=${googleApiKey}&libraries=places`,
7878 stevensc 68
            () => handleScriptLoad(setValue, autoCompleteRef, setData)
6597 stevensc 69
        );
70
    }, []);
71
 
72
    return (
7124 stevensc 73
        <div className="form-group">
6597 stevensc 74
            <input
75
                ref={autoCompleteRef}
7122 stevensc 76
                onChange={event => setValue(event.target.value)}
6597 stevensc 77
                placeholder="Enter a City"
7122 stevensc 78
                value={value}
7124 stevensc 79
                className="form-control"
6597 stevensc 80
            />
81
        </div>
82
    );
83
}
84
 
85
export default SearchLocationInput;