import { globalState } from '../../../app/global-state'; import PowerduckState from '../../../app/powerduck-state'; export default class GoogleMapsApiLoader { private static _loading: boolean; static load(): Promise { return new Promise((resolve, reject) => { if (GoogleMapsApiLoader.apiLoaded()) { resolve(true); return; } if (GoogleMapsApiLoader._loading == null) { GoogleMapsApiLoader._loading = true; } else { const looper = function () { if (GoogleMapsApiLoader.apiLoaded()) { resolve(true); } else { setTimeout(() => { looper(); }, 50); } }; looper(); return; } const script = document.createElement('script'); script.async = true; script.defer = true; script.onload = function () { delete GoogleMapsApiLoader._loading; resolve(true); }; script.onerror = function (e) { delete GoogleMapsApiLoader._loading; reject(e); }; script.src = `https://maps.googleapis.com/maps/api/js?key=${PowerduckState.getGoogleMapsApiKey()}&libraries=places`; document.head.appendChild(script); }); } private static apiLoaded(): boolean { return (globalState.google && globalState.google.maps && globalState.google.maps.places && globalState.google.maps.places.Autocomplete) != null; } }