google-map-react
Version:
isomorphic google map react component, allows render react components on the google map
86 lines (66 loc) • 2.43 kB
JavaScript
;
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_;
};