ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
205 lines • 16 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: shared/amap-loader.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Inject, Injectable } from '@angular/core';
import { LoggerService } from './logger/logger.service';
import { NGX_AMAP_CONFIG } from './ngx-amap-config';
import { ReplaySubject } from 'rxjs';
/** @type {?} */
const TAG = 'AMapLoader';
export class AMapLoaderService {
/**
* @param {?=} config
* @param {?=} logger
*/
constructor(config = {}, logger) {
this.config = config;
this.logger = logger;
this.defaultProtocol = 'https';
this.defaultVersion = '1.4.15';
this.defaultUIVersion = '1.0.11';
this.config = config || {};
}
/**
* @return {?}
*/
load() {
if (this.loading$) {
return this.loading$.asObservable();
}
this.logger.d(TAG, 'loading AMap API ...');
this.loading$ = new ReplaySubject();
/** @type {?} */
const callbackName = '_NgxAmapAPILoader';
/** @type {?} */
const script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.defer = true;
script.src = this.getSrcFromConfig(callbackName);
script.onerror = (/**
* @param {?} err
* @return {?}
*/
(err) => {
this.logger.e('failed to load AMap API.');
this.loading$.error(err);
});
window[callbackName] = (/**
* @return {?}
*/
() => {
this.logger.d(TAG, 'loading AMap API COMPLETE');
this.loading$.next();
this.loading$.complete();
});
document.body.appendChild(script);
return this.loading$.asObservable();
}
/**
* @return {?}
*/
loadUI() {
if (this.uiLoading$) {
return this.uiLoading$.asObservable();
}
this.logger.d(TAG, 'loading AMap UI ...');
this.uiLoading$ = new ReplaySubject();
/** @type {?} */
const uiScript = document.createElement('script');
uiScript.type = 'text/javascript';
uiScript.async = true;
uiScript.defer = true;
uiScript.src = this.getUISrcFromConfig();
uiScript.onerror = (/**
* @param {?} err
* @return {?}
*/
(err) => {
this.logger.e('failed to load AMap API.');
});
uiScript.onload = (/**
* @return {?}
*/
() => {
// tslint:disable-next-line: no-string-literal
window['initAMapUI']();
this.logger.d(TAG, 'loading AMap UI COMPLETE');
this.uiLoading$.next();
this.uiLoading$.complete();
});
document.body.appendChild(uiScript);
return this.uiLoading$.asObservable();
}
/**
* @private
* @param {?} callbackName
* @return {?}
*/
getSrcFromConfig(callbackName) {
/** @type {?} */
const urlBase = `${this.config.protocol || this.defaultProtocol}://webapi.amap.com/maps`;
/** @type {?} */
const queryParams = {
v: this.config.apiVersion || this.defaultVersion,
callback: callbackName,
key: this.config.apiKey,
};
/** @type {?} */
const params = Object.keys(queryParams)
.filter((/**
* @param {?} k
* @return {?}
*/
(k) => queryParams[k] != null))
.filter((/**
* @param {?} k
* @return {?}
*/
(k) => {
// remove empty arrays
return (!Array.isArray(queryParams[k]) ||
(Array.isArray(queryParams[k]) && queryParams[k].length > 0));
}))
.map((/**
* @param {?} k
* @return {?}
*/
(k) => {
// join arrays as comma seperated strings
/** @type {?} */
const i = queryParams[k];
if (Array.isArray(i)) {
return { key: k, value: i.join(',') };
}
return { key: k, value: queryParams[k] };
}))
.map((/**
* @param {?} entry
* @return {?}
*/
(entry) => `${entry.key}=${entry.value}`))
.join('&');
return `${urlBase}?${params}`;
}
/**
* @private
* @return {?}
*/
getUISrcFromConfig() {
// tslint:disable-next-line: max-line-length
/** @type {?} */
const urlBase = `${this.config.protocol ||
this.defaultProtocol}://webapi.amap.com/ui/1.0/main-async.js?v=${this.config.uiVersion ||
this.defaultUIVersion}`;
return urlBase;
}
}
AMapLoaderService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AMapLoaderService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [NGX_AMAP_CONFIG,] }] },
{ type: LoggerService }
];
if (false) {
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.defaultProtocol;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.defaultVersion;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.defaultUIVersion;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.loading$;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.uiLoading$;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.config;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.logger;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1sb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsic2hhcmVkL2FtYXAtbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFpQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOztNQUUzQyxHQUFHLEdBQUcsWUFBWTtBQUd4QixNQUFNLE9BQU8saUJBQWlCOzs7OztJQU81QixZQUNtQyxTQUF3QixFQUFFLEVBQ25ELE1BQXFCO1FBREksV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDbkQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVJ2QixvQkFBZSxHQUFHLE9BQU8sQ0FBQztRQUMxQixtQkFBYyxHQUFHLFFBQVEsQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFRbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQzs7Y0FDOUIsWUFBWSxHQUFHLG1CQUFtQjs7Y0FDbEMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLEdBQUcs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ckMsSUFBSSxDQUFDLGVBQWUsNkNBQTZDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUN0RixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7O1lBckdGLFVBQVU7Ozs7NENBU04sTUFBTSxTQUFDLGVBQWU7WUFmbEIsYUFBYTs7Ozs7OztJQVFwQiw0Q0FBa0M7Ozs7O0lBQ2xDLDJDQUFrQzs7Ozs7SUFDbEMsNkNBQW9DOzs7OztJQUNwQyxxQ0FBc0M7Ozs7O0lBQ3RDLHVDQUF3Qzs7Ozs7SUFHdEMsbUNBQTJEOzs7OztJQUMzRCxtQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hBbWFwQ29uZmlnLCBOR1hfQU1BUF9DT05GSUcgfSBmcm9tICcuL25neC1hbWFwLWNvbmZpZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IFRBRyA9ICdBTWFwTG9hZGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFNYXBMb2FkZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZWZhdWx0UHJvdG9jb2wgPSAnaHR0cHMnO1xuICBwcml2YXRlIGRlZmF1bHRWZXJzaW9uID0gJzEuNC4xNSc7XG4gIHByaXZhdGUgZGVmYXVsdFVJVmVyc2lvbiA9ICcxLjAuMTEnO1xuICBwcml2YXRlIGxvYWRpbmckOiBSZXBsYXlTdWJqZWN0PHZvaWQ+O1xuICBwcml2YXRlIHVpTG9hZGluZyQ6IFJlcGxheVN1YmplY3Q8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChOR1hfQU1BUF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBOZ3hBbWFwQ29uZmlnID0ge30sXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgbG9hZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nJCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbG9hZGluZyBBTWFwIEFQSSAuLi4nKTtcbiAgICB0aGlzLmxvYWRpbmckID0gbmV3IFJlcGxheVN1YmplY3QoKTtcbiAgICBjb25zdCBjYWxsYmFja05hbWUgPSAnX05neEFtYXBBUElMb2FkZXInO1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgIHNjcmlwdC5zcmMgPSB0aGlzLmdldFNyY0Zyb21Db25maWcoY2FsbGJhY2tOYW1lKTtcbiAgICBzY3JpcHQub25lcnJvciA9IChlcnI6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlci5lKCdmYWlsZWQgdG8gbG9hZCBBTWFwIEFQSS4nKTtcbiAgICAgIHRoaXMubG9hZGluZyQuZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIHdpbmRvd1tjYWxsYmFja05hbWVdID0gKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdsb2FkaW5nIEFNYXAgQVBJIENPTVBMRVRFJyk7XG4gICAgICB0aGlzLmxvYWRpbmckLm5leHQoKTtcbiAgICAgIHRoaXMubG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGxvYWRVSSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy51aUxvYWRpbmckKSB7XG4gICAgICByZXR1cm4gdGhpcy51aUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2xvYWRpbmcgQU1hcCBVSSAuLi4nKTtcbiAgICB0aGlzLnVpTG9hZGluZyQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuICAgIGNvbnN0IHVpU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgdWlTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHVpU2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICB1aVNjcmlwdC5kZWZlciA9IHRydWU7XG4gICAgdWlTY3JpcHQuc3JjID0gdGhpcy5nZXRVSVNyY0Zyb21Db25maWcoKTtcbiAgICB1aVNjcmlwdC5vbmVycm9yID0gKGVycjogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmUoJ2ZhaWxlZCB0byBsb2FkIEFNYXAgQVBJLicpO1xuICAgIH07XG4gICAgdWlTY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgd2luZG93Wydpbml0QU1hcFVJJ10oKTtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbG9hZGluZyBBTWFwIFVJIENPTVBMRVRFJyk7XG4gICAgICB0aGlzLnVpTG9hZGluZyQubmV4dCgpO1xuICAgICAgdGhpcy51aUxvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVpU2NyaXB0KTtcbiAgICByZXR1cm4gdGhpcy51aUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTcmNGcm9tQ29uZmlnKGNhbGxiYWNrTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsQmFzZSA9IGAke3RoaXMuY29uZmlnLnByb3RvY29sIHx8IHRoaXMuZGVmYXVsdFByb3RvY29sfTovL3dlYmFwaS5hbWFwLmNvbS9tYXBzYDtcbiAgICBjb25zdCBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0gPSB7XG4gICAgICB2OiB0aGlzLmNvbmZpZy5hcGlWZXJzaW9uIHx8IHRoaXMuZGVmYXVsdFZlcnNpb24sXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2tOYW1lLFxuICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgfTtcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtcylcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4gcXVlcnlQYXJhbXNba10gIT0gbnVsbClcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyByZW1vdmUgZW1wdHkgYXJyYXlzXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkocXVlcnlQYXJhbXNba10pIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbXNba10pICYmIHF1ZXJ5UGFyYW1zW2tdLmxlbmd0aCA+IDApXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoazogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGpvaW4gYXJyYXlzIGFzIGNvbW1hIHNlcGVyYXRlZCBzdHJpbmdzXG4gICAgICAgIGNvbnN0IGkgPSBxdWVyeVBhcmFtc1trXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICByZXR1cm4geyBrZXk6IGssIHZhbHVlOiBpLmpvaW4oJywnKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogaywgdmFsdWU6IHF1ZXJ5UGFyYW1zW2tdIH07XG4gICAgICB9KVxuICAgICAgLm1hcCgoZW50cnk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkgPT4gYCR7ZW50cnkua2V5fT0ke2VudHJ5LnZhbHVlfWApXG4gICAgICAuam9pbignJicpO1xuXG4gICAgcmV0dXJuIGAke3VybEJhc2V9PyR7cGFyYW1zfWA7XG4gIH1cblxuICBwcml2YXRlIGdldFVJU3JjRnJvbUNvbmZpZygpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgIGNvbnN0IHVybEJhc2UgPSBgJHt0aGlzLmNvbmZpZy5wcm90b2NvbCB8fFxuICAgICAgdGhpcy5kZWZhdWx0UHJvdG9jb2x9Oi8vd2ViYXBpLmFtYXAuY29tL3VpLzEuMC9tYWluLWFzeW5jLmpzP3Y9JHt0aGlzLmNvbmZpZy51aVZlcnNpb24gfHxcbiAgICAgIHRoaXMuZGVmYXVsdFVJVmVyc2lvbn1gO1xuICAgIHJldHVybiB1cmxCYXNlO1xuICB9XG59XG4iXX0=