angular-google-charts
Version:
A wrapper of the Google Charts library written with Angular 6
159 lines • 11.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, Inject, LOCALE_ID, Optional } from '@angular/core';
import { Observable, Subject, of } from 'rxjs';
import { GOOGLE_API_KEY, CHART_VERSION } from '../models/injection-tokens.model';
export class ScriptLoaderService {
/**
* @param {?} localeId
* @param {?=} googleApiKey
* @param {?=} chartVersion
*/
constructor(localeId, googleApiKey, chartVersion) {
this.localeId = localeId;
this.googleApiKey = googleApiKey;
this.chartVersion = chartVersion;
this.scriptSource = 'https://www.gstatic.com/charts/loader.js';
this.onLoadSubject = new Subject();
this.initialize();
}
/**
* @return {?}
*/
get onReady() {
if (this.doneLoading) {
return of(true);
}
return this.onLoadSubject.asObservable();
}
/**
* @return {?}
*/
get doneLoading() {
if (typeof google === 'undefined' || typeof google.charts === 'undefined') {
return false;
}
return true;
}
/**
* @private
* @return {?}
*/
get isLoading() {
if (this.doneLoading) {
return false;
}
/** @type {?} */
const pageScripts = Array.from(document.getElementsByTagName('script'));
/** @type {?} */
const googleChartsScript = pageScripts.find((/**
* @param {?} script
* @return {?}
*/
script => script.src === this.scriptSource));
return googleChartsScript !== undefined;
}
/**
* @param {?} packages
* @return {?}
*/
loadChartPackages(packages) {
return new Observable((/**
* @param {?} observer
* @return {?}
*/
observer => {
/** @type {?} */
const config = {
packages: packages,
language: this.localeId,
mapsApiKey: this.googleApiKey
};
google.charts.load(this.chartVersion, config);
google.charts.setOnLoadCallback((/**
* @return {?}
*/
() => {
observer.next();
observer.complete();
}));
}));
}
/**
* @private
* @return {?}
*/
initialize() {
if (!this.doneLoading && !this.isLoading) {
/** @type {?} */
const script = this.createScriptElement();
script.onload = (/**
* @return {?}
*/
() => {
this.onLoadSubject.next(true);
this.onLoadSubject.complete();
});
script.onerror = (/**
* @return {?}
*/
() => {
console.error('Failed to load the google chart script!');
this.onLoadSubject.error('Failed to load the google chart script!');
this.onLoadSubject.complete();
});
}
}
/**
* @private
* @return {?}
*/
createScriptElement() {
/** @type {?} */
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = this.scriptSource;
script.async = true;
document.getElementsByTagName('head')[0].appendChild(script);
return script;
}
}
ScriptLoaderService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ScriptLoaderService.ctorParameters = () => [
{ type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
{ type: String, decorators: [{ type: Inject, args: [GOOGLE_API_KEY,] }, { type: Optional }] },
{ type: String, decorators: [{ type: Inject, args: [CHART_VERSION,] }, { type: Optional }] }
];
if (false) {
/**
* @type {?}
* @private
*/
ScriptLoaderService.prototype.scriptSource;
/**
* @type {?}
* @private
*/
ScriptLoaderService.prototype.onLoadSubject;
/**
* @type {?}
* @private
*/
ScriptLoaderService.prototype.localeId;
/**
* @type {?}
* @private
*/
ScriptLoaderService.prototype.googleApiKey;
/**
* @type {?}
* @private
*/
ScriptLoaderService.prototype.chartVersion;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1nb29nbGUtY2hhcnRzLyIsInNvdXJjZXMiOlsibGliL3NjcmlwdC1sb2FkZXIvc2NyaXB0LWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR2pGLE1BQU0sT0FBTyxtQkFBbUI7Ozs7OztJQUs5QixZQUM2QixRQUFnQixFQUNDLFlBQXFCLEVBQ3RCLFlBQXFCO1FBRnJDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDQyxpQkFBWSxHQUFaLFlBQVksQ0FBUztRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBUztRQVBqRCxpQkFBWSxHQUFHLDBDQUEwQyxDQUFDO1FBRW5FLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQU83QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7OztJQUVELElBQVcsT0FBTztRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7OztJQUVELElBQVcsV0FBVztRQUNwQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQ3pFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7O0lBRUQsSUFBWSxTQUFTO1FBQ25CLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixPQUFPLEtBQUssQ0FBQztTQUNkOztjQUVLLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Y0FDakUsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLElBQUk7Ozs7UUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBQztRQUN2RixPQUFPLGtCQUFrQixLQUFLLFNBQVMsQ0FBQztJQUMxQyxDQUFDOzs7OztJQUVNLGlCQUFpQixDQUFDLFFBQXVCO1FBQzlDLE9BQU8sSUFBSSxVQUFVOzs7O1FBQUMsUUFBUSxDQUFDLEVBQUU7O2tCQUN6QixNQUFNLEdBQUc7Z0JBQ2IsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZO2FBQzlCO1lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQjs7O1lBQUMsR0FBRyxFQUFFO2dCQUNuQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUMsQ0FBQztRQUNMLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTs7a0JBQ2xDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFFekMsTUFBTSxDQUFDLE1BQU07OztZQUFHLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsQ0FBQyxDQUFBLENBQUM7WUFFRixNQUFNLENBQUMsT0FBTzs7O1lBQUcsR0FBRyxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsQ0FBQyxDQUFBLENBQUM7U0FDSDtJQUNILENBQUM7Ozs7O0lBRU8sbUJBQW1COztjQUNuQixNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0IsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDcEIsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs7WUFoRkYsVUFBVTs7Ozt5Q0FPTixNQUFNLFNBQUMsU0FBUzt5Q0FDaEIsTUFBTSxTQUFDLGNBQWMsY0FBRyxRQUFRO3lDQUNoQyxNQUFNLFNBQUMsYUFBYSxjQUFHLFFBQVE7Ozs7Ozs7SUFQbEMsMkNBQTJFOzs7OztJQUUzRSw0Q0FBK0M7Ozs7O0lBRzdDLHVDQUEyQzs7Ozs7SUFDM0MsMkNBQWlFOzs7OztJQUNqRSwyQ0FBZ0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIExPQ0FMRV9JRCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEdPT0dMRV9BUElfS0VZLCBDSEFSVF9WRVJTSU9OIH0gZnJvbSAnLi4vbW9kZWxzL2luamVjdGlvbi10b2tlbnMubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2NyaXB0TG9hZGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JpcHRTb3VyY2UgPSAnaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzL2xvYWRlci5qcyc7XHJcblxyXG4gIHByaXZhdGUgb25Mb2FkU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlSWQ6IHN0cmluZyxcclxuICAgIEBJbmplY3QoR09PR0xFX0FQSV9LRVkpIEBPcHRpb25hbCgpIHByaXZhdGUgZ29vZ2xlQXBpS2V5Pzogc3RyaW5nLFxyXG4gICAgQEluamVjdChDSEFSVF9WRVJTSU9OKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNoYXJ0VmVyc2lvbj86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9uUmVhZHkoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5kb25lTG9hZGluZykge1xyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub25Mb2FkU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZG9uZUxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIGdvb2dsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGdvb2dsZS5jaGFydHMgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRvbmVMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYWdlU2NyaXB0cyA9IEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpKTtcclxuICAgIGNvbnN0IGdvb2dsZUNoYXJ0c1NjcmlwdCA9IHBhZ2VTY3JpcHRzLmZpbmQoc2NyaXB0ID0+IHNjcmlwdC5zcmMgPT09IHRoaXMuc2NyaXB0U291cmNlKTtcclxuICAgIHJldHVybiBnb29nbGVDaGFydHNTY3JpcHQgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkQ2hhcnRQYWNrYWdlcyhwYWNrYWdlczogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgIHBhY2thZ2VzOiBwYWNrYWdlcyxcclxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sb2NhbGVJZCxcclxuICAgICAgICBtYXBzQXBpS2V5OiB0aGlzLmdvb2dsZUFwaUtleVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKHRoaXMuY2hhcnRWZXJzaW9uLCBjb25maWcpO1xyXG4gICAgICBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpIHtcclxuICAgIGlmICghdGhpcy5kb25lTG9hZGluZyAmJiAhdGhpcy5pc0xvYWRpbmcpIHtcclxuICAgICAgY29uc3Qgc2NyaXB0ID0gdGhpcy5jcmVhdGVTY3JpcHRFbGVtZW50KCk7XHJcblxyXG4gICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25Mb2FkU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMub25Mb2FkU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgdGhlIGdvb2dsZSBjaGFydCBzY3JpcHQhJyk7XHJcbiAgICAgICAgdGhpcy5vbkxvYWRTdWJqZWN0LmVycm9yKCdGYWlsZWQgdG8gbG9hZCB0aGUgZ29vZ2xlIGNoYXJ0IHNjcmlwdCEnKTtcclxuICAgICAgICB0aGlzLm9uTG9hZFN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlU2NyaXB0RWxlbWVudCgpOiBIVE1MU2NyaXB0RWxlbWVudCB7XHJcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcbiAgICBzY3JpcHQuc3JjID0gdGhpcy5zY3JpcHRTb3VyY2U7XHJcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgcmV0dXJuIHNjcmlwdDtcclxuICB9XHJcbn1cclxuIl19