Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 26x 26x 4x 26x 5x 3x 2x 2x 2x 2x 2x 2x 2x 2x 2x 26x 2x 2x | import { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';
import { GoogleAutocompleteWindow, GoogleMapsSdk } from './googleAutocompleteTypes';
export default class GoogleAutocompleteScriptLoader {
private _scriptLoader: ScriptLoader;
private _googleAutoComplete?: Promise<GoogleMapsSdk>;
constructor() {
this._scriptLoader = getScriptLoader();
}
loadMapsSdk(apiKey: string): Promise<GoogleMapsSdk> {
if (this._googleAutoComplete) {
return this._googleAutoComplete;
}
this._googleAutoComplete = new Promise((resolve, reject) => {
const callbackName = 'initAutoComplete';
const params = [
'language=en',
`key=${apiKey}`,
'libraries=places',
`callback=${callbackName}`,
].join('&');
(window as GoogleCallbackWindow)[callbackName] = () => {
Eif (isAutocompleteWindow(window)) {
resolve(window.google.maps);
}
reject();
};
this._scriptLoader.loadScript(`//maps.googleapis.com/maps/api/js?${params}`)
.catch(e => {
this._googleAutoComplete = undefined;
throw e;
});
});
return this._googleAutoComplete;
}
}
function isAutocompleteWindow(window: Window): window is GoogleAutocompleteWindow {
const autocompleteWindow = window as GoogleAutocompleteWindow;
return Boolean(autocompleteWindow.google &&
autocompleteWindow.google.maps &&
autocompleteWindow.google.maps.places);
}
export interface GoogleCallbackWindow extends Window {
initAutoComplete?(): void;
}
|