UNPKG

google-map-react

Version:

isomorphic google map react component, allows render react components on the google map

86 lines (66 loc) 2.43 kB
'use strict'; exports.__esModule = true; var BASE_URL = 'https://maps'; var DEFAULT_URL = BASE_URL + '.googleapis.com'; var API_PATH = '/maps/api/js?callback=_$_google_map_initialize_$_'; var getUrl = function getUrl(region) { if (region && region.toLowerCase() === 'cn') { return BASE_URL + '.google.cn'; } return DEFAULT_URL; }; var $script_ = null; var loadPromise_ = void 0; var resolveCustomPromise_ = void 0; var _customPromise = new Promise(function (resolve) { resolveCustomPromise_ = resolve; }); // TODO add libraries language and other map options exports.default = function (bootstrapURLKeys, heatmapLibrary) { if (!$script_) { $script_ = require('scriptjs'); // eslint-disable-line } // call from outside google-map-react // will be as soon as loadPromise_ resolved if (!bootstrapURLKeys) { return _customPromise; } if (loadPromise_) { return loadPromise_; } loadPromise_ = new Promise(function (resolve, reject) { if (typeof window === 'undefined') { reject(new Error('google map cannot be loaded outside browser env')); return; } if (window.google && window.google.maps) { resolve(window.google.maps); return; } if (typeof window._$_google_map_initialize_$_ !== 'undefined') { reject(new Error('google map initialization error')); } window._$_google_map_initialize_$_ = function () { delete window._$_google_map_initialize_$_; resolve(window.google.maps); }; if (process.env.NODE_ENV !== 'production') { if (Object.keys(bootstrapURLKeys).indexOf('callback') > -1) { var message = '"callback" key in bootstrapURLKeys is not allowed,\n use onGoogleApiLoaded property instead'; // eslint-disable-next-line no-console console.error(message); throw new Error(message); } } var params = Object.keys(bootstrapURLKeys).reduce(function (r, key) { return r + '&' + key + '=' + bootstrapURLKeys[key]; }, ''); var baseUrl = getUrl(bootstrapURLKeys.region); var libraries = heatmapLibrary ? '&libraries=visualization' : ''; $script_('' + baseUrl + API_PATH + params + libraries, function () { return typeof window.google === 'undefined' && reject(new Error('google map initialization error (not loaded)')); }); }); resolveCustomPromise_(loadPromise_); return loadPromise_; };