From 3779b22558863aeb70e8a9d114d98695e6b08fb4 Mon Sep 17 00:00:00 2001 From: "Jago (C. Santiago Melon)" Date: Tue, 13 Oct 2020 11:04:11 +0200 Subject: [PATCH] Fix -- under some circumstances, chart ready event might be constantly invoked --- dist/bundles/countries-map.umd.js | 6 ++++-- dist/bundles/countries-map.umd.js.map | 2 +- dist/bundles/countries-map.umd.min.js | 2 +- dist/bundles/countries-map.umd.min.js.map | 2 +- .../app/modules/countries-map/countries-map.component.js | 8 +++++--- .../app/modules/countries-map/countries-map.component.js | 8 +++++--- dist/fesm2015/countries-map.js | 6 ++++-- dist/fesm2015/countries-map.js.map | 2 +- dist/fesm5/countries-map.js | 6 ++++-- dist/fesm5/countries-map.js.map | 2 +- dist/package.json | 2 +- package.json | 2 +- src/app/modules/countries-map/countries-map.component.ts | 6 ++++-- 13 files changed, 33 insertions(+), 21 deletions(-) diff --git a/dist/bundles/countries-map.umd.js b/dist/bundles/countries-map.umd.js index de8ccc2..d9c0c54 100644 --- a/dist/bundles/countries-map.umd.js +++ b/dist/bundles/countries-map.umd.js @@ -391,8 +391,10 @@ this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content')); }; CountriesMapComponent.prototype.onChartReady = function () { - this.innerLoading = false; - this.chartReady.emit(); + if (this.innerLoading) { + this.innerLoading = false; + this.chartReady.emit(); + } }; CountriesMapComponent.prototype.onCharterror = function (error) { this.chartError.emit(error); diff --git a/dist/bundles/countries-map.umd.js.map b/dist/bundles/countries-map.umd.js.map index 061b0d0..21b7b1e 100644 --- a/dist/bundles/countries-map.umd.js.map +++ b/dist/bundles/countries-map.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"countries-map.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n"],"names":["EventEmitter","Inject","LOCALE_ID","Injectable","CharErrorCode","countriesEN","ChangeDetectorRef","ElementRef","Input","Output","ViewChild","HostListener","Component","ChangeDetectionStrategy","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"countries-map.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n if (this.innerLoading) {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n"],"names":["EventEmitter","Inject","LOCALE_ID","Injectable","CharErrorCode","countriesEN","ChangeDetectorRef","ElementRef","Input","Output","ViewChild","HostListener","Component","ChangeDetectionStrategy","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file diff --git a/dist/bundles/countries-map.umd.min.js b/dist/bundles/countries-map.umd.min.js index be2607e..f12ad6f 100644 --- a/dist/bundles/countries-map.umd.min.js +++ b/dist/bundles/countries-map.umd.min.js @@ -12,5 +12,5 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. - ***************************************************************************** */function r(e,t,o,n){var r,a=arguments.length,i=a<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,n);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(i=(a<3?r(i):a>3?r(t,o,i):r(t,o))||i);return a>3&&i&&Object.defineProperty(t,o,i),i}function a(e,t){var o="function"==typeof Symbol&&e[Symbol.iterator];if(!o)return e;var n,r,a=o.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){r={error:e}}finally{try{n&&!n.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}return i}var i=function(){function e(e){this.googleScriptLoadingNotifier=new t.EventEmitter,this.googleScriptIsLoading=!1,this.localeId=e}var o,n;return e.prototype.load=function(e){var t=this;return new Promise((function(o,n){t.loadGoogleChartsScript().then((function(){var n={packages:["geochart"],language:t.localeId,callback:o};e&&(n.mapsApiKey=e),google.charts.load("45.2",n)})).catch((function(e){return n()}))}))},e.prototype.loadGoogleChartsScript=function(){var e=this;return new Promise((function(t,o){if("undefined"!=typeof google&&google.charts)t();else if(e.googleScriptIsLoading)e.googleScriptLoadingNotifier.subscribe((function(e){e?t():o()}));else{e.googleScriptIsLoading=!0;var n=document.createElement("script");n.type="text/javascript",n.src="https://www.gstatic.com/charts/loader.js",n.async=!0,n.defer=!0,n.onload=function(){e.googleScriptIsLoading=!1,e.googleScriptLoadingNotifier.emit(!0),t()},n.onerror=function(){e.googleScriptIsLoading=!1,e.googleScriptLoadingNotifier.emit(!1),o()},document.getElementsByTagName("head")[0].appendChild(n)}}))},e.ctorParameters=function(){return[{type:String,decorators:[{type:t.Inject,args:[t.LOCALE_ID]}]}]},e=r([t.Injectable(),(o=0,n=t.Inject(t.LOCALE_ID),function(e,t){n(e,t,o)})],e)}();(e.CharErrorCode||(e.CharErrorCode={})).loading="loading";var l=function(e){return n.en[e]},c=function(){function o(e,o,n){this.cdRef=e,this.el=o,this.loaderService=n,this.countryLabel="Country",this.valueLabel="Value",this.showCaption=!0,this.captionBelow=!0,this.autoResize=!1,this.minValue=0,this.minColor="white",this.maxColor="red",this.backgroundColor="white",this.noDataColor="#CFCFCF",this.exceptionColor="#FFEE58",this.chartReady=new t.EventEmitter,this.chartError=new t.EventEmitter,this.chartSelect=new t.EventEmitter,this.selection=null,this.innerLoading=!0,this.el=o,this.loaderService=n}return Object.defineProperty(o.prototype,"loading",{get:function(){return this.innerLoading},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"selectionValue",{get:function(){return this.data[this.selection.countryId].value},enumerable:!0,configurable:!0}),o.prototype.screenSizeChanged=function(){if(!this.loading&&this.autoResize){var e=this.mapContent.nativeElement;e.style.setProperty("height",e.clientWidth*this.proportion+"px"),this.redraw()}},o.prototype.getExtraSelected=function(e){var t=this.data[e].extra;return t&&Object.keys(t).map((function(e){return{key:e,val:t[e]}}))},o.prototype.selectCountry=function(e){this.selection=e?{countryId:e,countryName:l(e),extra:this.getExtraSelected(e)}:null,this.cdRef.detectChanges()},o.prototype.processInputData=function(){this.googleData=Object.entries(this.data).reduce((function(e,t){var o=a(t,2),n=o[0],r=o[1].value;return e.push([n,null===r?null:r?+r.toString():0]),e}),[["Country","Value"]])},o.prototype.ngOnChanges=function(t){var o=this;if(t.data){if(!this.data)return;var n={colorAxis:{colors:[this.minColor,this.maxColor],minValue:Number.isInteger(this.minValue)?this.minValue:void 0,maxValue:Number.isInteger(this.maxValue)?this.maxValue:void 0},datalessRegionColor:this.noDataColor,backgroundColor:this.backgroundColor,defaultColor:this.exceptionColor,legend:this.showCaption,tooltip:{trigger:"none"}};this.loaderService.load(this.apiKey).then((function(){o.processInputData(),o.wrapper=new google.visualization.ChartWrapper({chartType:"GeoChart",dataTable:o.googleData,options:Object.assign(n,o.options)}),o.registerChartWrapperEvents(),o.redraw();var e=o.el.nativeElement;o.proportion=e.clientHeight/e.clientWidth}),(function(){o.onCharterror({id:e.CharErrorCode.loading,message:"Could not load"})}))}},o.prototype.redraw=function(){this.wrapper.draw(this.el.nativeElement.querySelector("div.cm-map-content"))},o.prototype.onChartReady=function(){this.innerLoading=!1,this.chartReady.emit()},o.prototype.onCharterror=function(e){this.chartError.emit(e)},o.prototype.onMapSelect=function(){var e={selected:!1,value:null,country:null},t=this.wrapper.visualization.getSelection();if(t.length>0){var o=t[0].row,n=this.wrapper.getDataTable();e.selected=!0,e.value=n.getValue(o,1),e.country=n.getValue(o,0),this.selectCountry(e.country)}else this.selectCountry(null);this.chartSelect.emit(e)},o.prototype.registerChartWrapperEvents=function(){var e=google.visualization.events.addListener;e(this.wrapper,"ready",this.onChartReady.bind(this)),e(this.wrapper,"error",this.onCharterror.bind(this)),e(this.wrapper,"select",this.onMapSelect.bind(this))},o.prototype.ngOnDestroy=function(){var e=google.visualization.events.removeListener;e("ready"),e("error"),e("select")},o.ctorParameters=function(){return[{type:t.ChangeDetectorRef},{type:t.ElementRef},{type:i}]},r([t.Input()],o.prototype,"data",void 0),r([t.Input()],o.prototype,"apiKey",void 0),r([t.Input()],o.prototype,"options",void 0),r([t.Input()],o.prototype,"countryLabel",void 0),r([t.Input()],o.prototype,"valueLabel",void 0),r([t.Input()],o.prototype,"showCaption",void 0),r([t.Input()],o.prototype,"captionBelow",void 0),r([t.Input()],o.prototype,"autoResize",void 0),r([t.Input()],o.prototype,"minValue",void 0),r([t.Input()],o.prototype,"maxValue",void 0),r([t.Input()],o.prototype,"minColor",void 0),r([t.Input()],o.prototype,"maxColor",void 0),r([t.Input()],o.prototype,"backgroundColor",void 0),r([t.Input()],o.prototype,"noDataColor",void 0),r([t.Input()],o.prototype,"exceptionColor",void 0),r([t.Output()],o.prototype,"chartReady",void 0),r([t.Output()],o.prototype,"chartError",void 0),r([t.Output()],o.prototype,"chartSelect",void 0),r([t.ViewChild("mapContent",{static:!1})],o.prototype,"mapContent",void 0),r([t.HostListener("window:deviceorientation"),t.HostListener("window:resize")],o.prototype,"screenSizeChanged",null),o=r([t.Component({selector:"countries-map",changeDetection:t.ChangeDetectionStrategy.OnPush,template:'
Loading map...
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n {{countryLabel}}\r\n {{selection?.countryName}}\r\n
\r\n
\r\n {{valueLabel}}: \r\n {{selectionValue}}\r\n
\r\n
\r\n
\r\n
\r\n {{item.key}}:\r\n {{item.val}}\r\n
\r\n
\r\n
\r\n',styles:[":host{display:flex;flex-flow:column nowrap;justify-content:space-between;align-items:stretch;align-content:stretch}.major-block.loading{flex:0 1 auto;align-self:center}.loading .text{font-style:italic;font-family:sans-serif;color:gray}.major-block.cm-map-content{flex:0 1 auto}.major-block.goes-first{order:0}.major-block:not(.goes-first){order:1}.major-block.cm-caption-container{flex:0 1 auto;display:flex;flex-flow:column nowrap;justify-content:space-between}.cm-simple-caption{display:flex;flex-flow:row nowrap;justify-content:space-between}.cm-country-label{flex:0 1 auto;align-self:flex-start}.cm-value-label{flex:0 1 auto;align-self:flex-end}.cm-country-label,.cm-value-label{flex:0 1 auto}.cm-country-label .cm-country-name{font-weight:700}.cm-country-label .cm-country-name,.cm-value-label .cm-value-text{color:#333}.cm-country-label .cm-default-label,.cm-value-label .cm-value-text:not(.has-value){font-style:italic;color:#777}.cm-extended-caption{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));grid-gap:5px}.cm-extended-item{margin:5px auto}.cm-extended-item .cm-extended-label{font-weight:700}"]})],o)}(),s=function(){function e(){}return e=r([t.NgModule({imports:[o.CommonModule],declarations:[c],entryComponents:[c],providers:[i],exports:[c]})],e)}();e.CountriesMapComponent=c,e.CountriesMapModule=s,e.ɵa=i,Object.defineProperty(e,"__esModule",{value:!0})})); + ***************************************************************************** */function r(e,t,o,n){var r,a=arguments.length,i=a<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,n);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(i=(a<3?r(i):a>3?r(t,o,i):r(t,o))||i);return a>3&&i&&Object.defineProperty(t,o,i),i}function a(e,t){var o="function"==typeof Symbol&&e[Symbol.iterator];if(!o)return e;var n,r,a=o.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){r={error:e}}finally{try{n&&!n.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}return i}var i=function(){function e(e){this.googleScriptLoadingNotifier=new t.EventEmitter,this.googleScriptIsLoading=!1,this.localeId=e}var o,n;return e.prototype.load=function(e){var t=this;return new Promise((function(o,n){t.loadGoogleChartsScript().then((function(){var n={packages:["geochart"],language:t.localeId,callback:o};e&&(n.mapsApiKey=e),google.charts.load("45.2",n)})).catch((function(e){return n()}))}))},e.prototype.loadGoogleChartsScript=function(){var e=this;return new Promise((function(t,o){if("undefined"!=typeof google&&google.charts)t();else if(e.googleScriptIsLoading)e.googleScriptLoadingNotifier.subscribe((function(e){e?t():o()}));else{e.googleScriptIsLoading=!0;var n=document.createElement("script");n.type="text/javascript",n.src="https://www.gstatic.com/charts/loader.js",n.async=!0,n.defer=!0,n.onload=function(){e.googleScriptIsLoading=!1,e.googleScriptLoadingNotifier.emit(!0),t()},n.onerror=function(){e.googleScriptIsLoading=!1,e.googleScriptLoadingNotifier.emit(!1),o()},document.getElementsByTagName("head")[0].appendChild(n)}}))},e.ctorParameters=function(){return[{type:String,decorators:[{type:t.Inject,args:[t.LOCALE_ID]}]}]},e=r([t.Injectable(),(o=0,n=t.Inject(t.LOCALE_ID),function(e,t){n(e,t,o)})],e)}();(e.CharErrorCode||(e.CharErrorCode={})).loading="loading";var l=function(e){return n.en[e]},c=function(){function o(e,o,n){this.cdRef=e,this.el=o,this.loaderService=n,this.countryLabel="Country",this.valueLabel="Value",this.showCaption=!0,this.captionBelow=!0,this.autoResize=!1,this.minValue=0,this.minColor="white",this.maxColor="red",this.backgroundColor="white",this.noDataColor="#CFCFCF",this.exceptionColor="#FFEE58",this.chartReady=new t.EventEmitter,this.chartError=new t.EventEmitter,this.chartSelect=new t.EventEmitter,this.selection=null,this.innerLoading=!0,this.el=o,this.loaderService=n}return Object.defineProperty(o.prototype,"loading",{get:function(){return this.innerLoading},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"selectionValue",{get:function(){return this.data[this.selection.countryId].value},enumerable:!0,configurable:!0}),o.prototype.screenSizeChanged=function(){if(!this.loading&&this.autoResize){var e=this.mapContent.nativeElement;e.style.setProperty("height",e.clientWidth*this.proportion+"px"),this.redraw()}},o.prototype.getExtraSelected=function(e){var t=this.data[e].extra;return t&&Object.keys(t).map((function(e){return{key:e,val:t[e]}}))},o.prototype.selectCountry=function(e){this.selection=e?{countryId:e,countryName:l(e),extra:this.getExtraSelected(e)}:null,this.cdRef.detectChanges()},o.prototype.processInputData=function(){this.googleData=Object.entries(this.data).reduce((function(e,t){var o=a(t,2),n=o[0],r=o[1].value;return e.push([n,null===r?null:r?+r.toString():0]),e}),[["Country","Value"]])},o.prototype.ngOnChanges=function(t){var o=this;if(t.data){if(!this.data)return;var n={colorAxis:{colors:[this.minColor,this.maxColor],minValue:Number.isInteger(this.minValue)?this.minValue:void 0,maxValue:Number.isInteger(this.maxValue)?this.maxValue:void 0},datalessRegionColor:this.noDataColor,backgroundColor:this.backgroundColor,defaultColor:this.exceptionColor,legend:this.showCaption,tooltip:{trigger:"none"}};this.loaderService.load(this.apiKey).then((function(){o.processInputData(),o.wrapper=new google.visualization.ChartWrapper({chartType:"GeoChart",dataTable:o.googleData,options:Object.assign(n,o.options)}),o.registerChartWrapperEvents(),o.redraw();var e=o.el.nativeElement;o.proportion=e.clientHeight/e.clientWidth}),(function(){o.onCharterror({id:e.CharErrorCode.loading,message:"Could not load"})}))}},o.prototype.redraw=function(){this.wrapper.draw(this.el.nativeElement.querySelector("div.cm-map-content"))},o.prototype.onChartReady=function(){this.innerLoading&&(this.innerLoading=!1,this.chartReady.emit())},o.prototype.onCharterror=function(e){this.chartError.emit(e)},o.prototype.onMapSelect=function(){var e={selected:!1,value:null,country:null},t=this.wrapper.visualization.getSelection();if(t.length>0){var o=t[0].row,n=this.wrapper.getDataTable();e.selected=!0,e.value=n.getValue(o,1),e.country=n.getValue(o,0),this.selectCountry(e.country)}else this.selectCountry(null);this.chartSelect.emit(e)},o.prototype.registerChartWrapperEvents=function(){var e=google.visualization.events.addListener;e(this.wrapper,"ready",this.onChartReady.bind(this)),e(this.wrapper,"error",this.onCharterror.bind(this)),e(this.wrapper,"select",this.onMapSelect.bind(this))},o.prototype.ngOnDestroy=function(){var e=google.visualization.events.removeListener;e("ready"),e("error"),e("select")},o.ctorParameters=function(){return[{type:t.ChangeDetectorRef},{type:t.ElementRef},{type:i}]},r([t.Input()],o.prototype,"data",void 0),r([t.Input()],o.prototype,"apiKey",void 0),r([t.Input()],o.prototype,"options",void 0),r([t.Input()],o.prototype,"countryLabel",void 0),r([t.Input()],o.prototype,"valueLabel",void 0),r([t.Input()],o.prototype,"showCaption",void 0),r([t.Input()],o.prototype,"captionBelow",void 0),r([t.Input()],o.prototype,"autoResize",void 0),r([t.Input()],o.prototype,"minValue",void 0),r([t.Input()],o.prototype,"maxValue",void 0),r([t.Input()],o.prototype,"minColor",void 0),r([t.Input()],o.prototype,"maxColor",void 0),r([t.Input()],o.prototype,"backgroundColor",void 0),r([t.Input()],o.prototype,"noDataColor",void 0),r([t.Input()],o.prototype,"exceptionColor",void 0),r([t.Output()],o.prototype,"chartReady",void 0),r([t.Output()],o.prototype,"chartError",void 0),r([t.Output()],o.prototype,"chartSelect",void 0),r([t.ViewChild("mapContent",{static:!1})],o.prototype,"mapContent",void 0),r([t.HostListener("window:deviceorientation"),t.HostListener("window:resize")],o.prototype,"screenSizeChanged",null),o=r([t.Component({selector:"countries-map",changeDetection:t.ChangeDetectionStrategy.OnPush,template:'
Loading map...
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n {{countryLabel}}\r\n {{selection?.countryName}}\r\n
\r\n
\r\n {{valueLabel}}: \r\n {{selectionValue}}\r\n
\r\n
\r\n
\r\n
\r\n {{item.key}}:\r\n {{item.val}}\r\n
\r\n
\r\n
\r\n',styles:[":host{display:flex;flex-flow:column nowrap;justify-content:space-between;align-items:stretch;align-content:stretch}.major-block.loading{flex:0 1 auto;align-self:center}.loading .text{font-style:italic;font-family:sans-serif;color:gray}.major-block.cm-map-content{flex:0 1 auto}.major-block.goes-first{order:0}.major-block:not(.goes-first){order:1}.major-block.cm-caption-container{flex:0 1 auto;display:flex;flex-flow:column nowrap;justify-content:space-between}.cm-simple-caption{display:flex;flex-flow:row nowrap;justify-content:space-between}.cm-country-label{flex:0 1 auto;align-self:flex-start}.cm-value-label{flex:0 1 auto;align-self:flex-end}.cm-country-label,.cm-value-label{flex:0 1 auto}.cm-country-label .cm-country-name{font-weight:700}.cm-country-label .cm-country-name,.cm-value-label .cm-value-text{color:#333}.cm-country-label .cm-default-label,.cm-value-label .cm-value-text:not(.has-value){font-style:italic;color:#777}.cm-extended-caption{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));grid-gap:5px}.cm-extended-item{margin:5px auto}.cm-extended-item .cm-extended-label{font-weight:700}"]})],o)}(),s=function(){function e(){}return e=r([t.NgModule({imports:[o.CommonModule],declarations:[c],entryComponents:[c],providers:[i],exports:[c]})],e)}();e.CountriesMapComponent=c,e.CountriesMapModule=s,e.ɵa=i,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=countries-map.umd.min.js.map \ No newline at end of file diff --git a/dist/bundles/countries-map.umd.min.js.map b/dist/bundles/countries-map.umd.min.js.map index 4067536..ac64b76 100644 --- a/dist/bundles/countries-map.umd.min.js.map +++ b/dist/bundles/countries-map.umd.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__read","o","n","m","Symbol","iterator","e","call","ar","next","done","push","value","error","GoogleChartsLoaderService","localeId","this","googleScriptLoadingNotifier","EventEmitter","googleScriptIsLoading","paramIndex","decorator","prototype","load","apiKey","_this","Promise","resolve","reject","loadGoogleChartsScript","then","initializer","packages","language","callback","mapsApiKey","google","charts","catch","err","subscribe","loaded","script","document","createElement","type","src","async","defer","onload","emit","onerror","getElementsByTagName","appendChild","Inject","args","LOCALE_ID","Injectable","CharErrorCode","countryName","countryCode","countriesEN","CountriesMapComponent","cdRef","el","loaderService","countryLabel","valueLabel","showCaption","captionBelow","autoResize","minValue","minColor","maxColor","backgroundColor","noDataColor","exceptionColor","chartReady","chartError","chartSelect","selection","innerLoading","data","countryId","screenSizeChanged","loading","map","mapContent","nativeElement","style","setProperty","clientWidth","proportion","redraw","getExtraSelected","country","extra","keys","val","selectCountry","detectChanges","processInputData","googleData","entries","reduce","acc","_a","_b","rawValContent","toString","ngOnChanges","defaultOptions_1","colorAxis","colors","Number","isInteger","undefined","maxValue","datalessRegionColor","defaultColor","legend","tooltip","trigger","wrapper","visualization","ChartWrapper","chartType","dataTable","options","assign","registerChartWrapperEvents","self","clientHeight","onCharterror","id","message","draw","querySelector","onChartReady","onMapSelect","event","selected","getSelection","tableRow","row","getDataTable","getValue","addListener","events","bind","ngOnDestroy","removeListener","ChangeDetectorRef","ElementRef","Input","Output","ViewChild","static","HostListener","Component","selector","changeDetection","ChangeDetectionStrategy","OnPush","template","CountriesMapModule","NgModule","imports","CommonModule","declarations","entryComponents","providers","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__read","o","n","m","Symbol","iterator","e","call","ar","next","done","push","value","error","GoogleChartsLoaderService","localeId","this","googleScriptLoadingNotifier","EventEmitter","googleScriptIsLoading","paramIndex","decorator","prototype","load","apiKey","_this","Promise","resolve","reject","loadGoogleChartsScript","then","initializer","packages","language","callback","mapsApiKey","google","charts","catch","err","subscribe","loaded","script","document","createElement","type","src","async","defer","onload","emit","onerror","getElementsByTagName","appendChild","Inject","args","LOCALE_ID","Injectable","CharErrorCode","countryName","countryCode","countriesEN","CountriesMapComponent","cdRef","el","loaderService","countryLabel","valueLabel","showCaption","captionBelow","autoResize","minValue","minColor","maxColor","backgroundColor","noDataColor","exceptionColor","chartReady","chartError","chartSelect","selection","innerLoading","data","countryId","screenSizeChanged","loading","map","mapContent","nativeElement","style","setProperty","clientWidth","proportion","redraw","getExtraSelected","country","extra","keys","val","selectCountry","detectChanges","processInputData","googleData","entries","reduce","acc","_a","_b","rawValContent","toString","ngOnChanges","defaultOptions_1","colorAxis","colors","Number","isInteger","undefined","maxValue","datalessRegionColor","defaultColor","legend","tooltip","trigger","wrapper","visualization","ChartWrapper","chartType","dataTable","options","assign","registerChartWrapperEvents","self","clientHeight","onCharterror","id","message","draw","querySelector","onChartReady","onMapSelect","event","selected","getSelection","tableRow","row","getDataTable","getValue","addListener","events","bind","ngOnDestroy","removeListener","ChangeDetectorRef","ElementRef","Input","Output","ViewChild","static","HostListener","Component","selector","changeDetection","ChangeDetectionStrategy","OnPush","template","CountriesMapModule","NgModule","imports","CommonModule","declarations","entryComponents","providers","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n if (this.innerLoading) {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n"]} \ No newline at end of file diff --git a/dist/esm2015/app/modules/countries-map/countries-map.component.js b/dist/esm2015/app/modules/countries-map/countries-map.component.js index 7a63fc8..95a5b8b 100644 --- a/dist/esm2015/app/modules/countries-map/countries-map.component.js +++ b/dist/esm2015/app/modules/countries-map/countries-map.component.js @@ -108,8 +108,10 @@ let CountriesMapComponent = class CountriesMapComponent { this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content')); } onChartReady() { - this.innerLoading = false; - this.chartReady.emit(); + if (this.innerLoading) { + this.innerLoading = false; + this.chartReady.emit(); + } } onCharterror(error) { this.chartError.emit(error); @@ -223,4 +225,4 @@ CountriesMapComponent = __decorate([ ], CountriesMapComponent); export { CountriesMapComponent }; export { ɵ0 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyaWVzLW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb3VudHJpZXMtbWFwLyIsInNvdXJjZXMiOlsiYXBwL21vZHVsZXMvY291bnRyaWVzLW1hcC9jb3VudHJpZXMtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RixPQUFPLEVBQUUsRUFBRSxJQUFJLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUM1QixNQUFNLFdBQVcsR0FBRyxDQUFDLFdBQW1CLEVBQVUsRUFBRTtJQUNsRCxPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7O0FBUUYsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUF1Q2hDLFlBQ21CLEtBQXdCLEVBQ3hCLEVBQWMsRUFDZCxhQUF3QztRQUZ4QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQTJCO1FBckNsRCxpQkFBWSxHQUFHLFNBQVMsQ0FBQztRQUN6QixlQUFVLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFHLENBQUMs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b250ZW50IjpbImRlY2xhcmUgdmFyIGdvb2dsZTogeyB2aXN1YWxpemF0aW9uOiB7IENoYXJ0V3JhcHBlciwgZXZlbnRzOiB7XHJcbiAgYWRkTGlzdGVuZXI6ICh3cmFwcGVyLCBldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3M/OiBhbnkpID0+IHZvaWQpID0+IHZvaWQsIHJlbW92ZUxpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZykgPT4gdm9pZFxyXG59IH0gfTtcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR29vZ2xlQ2hhcnRzTG9hZGVyU2VydmljZSB9IGZyb20gJy4vZ29vZ2xlLWNoYXJ0cy1sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0U2VsZWN0RXZlbnQsIENoYXJ0RXJyb3JFdmVudCwgQ2hhckVycm9yQ29kZSB9IGZyb20gJy4vY2hhcnQtZXZlbnRzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvdW50cmllc0RhdGEsIFNlbGVjdGlvbkV4dHJhLCBTZWxlY3Rpb24sIFZhbGlkQ291bnRyeURhdGEgfSBmcm9tICcuL2RhdGEtdHlwZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZW4gYXMgY291bnRyaWVzRU4gfSBmcm9tICdAamFnb21mL2NvdW50cmllc2xpc3QnO1xyXG5cclxuY29uc3QgdmFsdWVIb2xkZXIgPSAndmFsdWUnO1xyXG5jb25zdCBjb3VudHJ5TmFtZSA9IChjb3VudHJ5Q29kZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gY291bnRyaWVzRU5bY291bnRyeUNvZGVdO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3VudHJpZXMtbWFwJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50cmllc01hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YTogQ291bnRyaWVzRGF0YTtcclxuICBASW5wdXQoKSBhcGlLZXk6IHN0cmluZztcclxuICBASW5wdXQoKSBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KCkgY291bnRyeUxhYmVsID0gJ0NvdW50cnknO1xyXG4gIEBJbnB1dCgpIHZhbHVlTGFiZWwgPSAnVmFsdWUnO1xyXG4gIEBJbnB1dCgpIHNob3dDYXB0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYXB0aW9uQmVsb3cgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtaW5WYWx1ZSA9IDA7XHJcbiAgQElucHV0KCkgbWF4VmFsdWU6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaW5Db2xvciA9ICd3aGl0ZSc7XHJcbiAgQElucHV0KCkgbWF4Q29sb3IgPSAncmVkJztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG4gIEBJbnB1dCgpIG5vRGF0YUNvbG9yID0gJyNDRkNGQ0YnO1xyXG4gIEBJbnB1dCgpIGV4Y2VwdGlvbkNvbG9yID0gJyNGRkVFNTgnO1xyXG5cclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0RXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPENoYXJ0RXJyb3JFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhcnRTZWxlY3RFdmVudD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWFwQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJlYWRvbmx5IG1hcENvbnRlbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcHJvcG9ydGlvbjogbnVtYmVyO1xyXG4gIHByaXZhdGUgZ29vZ2xlRGF0YTogVmFsaWRDb3VudHJ5RGF0YVtdW107XHJcbiAgcHJpdmF0ZSB3cmFwcGVyOiBhbnk7XHJcblxyXG4gIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgaW5uZXJMb2FkaW5nID0gdHJ1ZTtcclxuICBnZXQgbG9hZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3Rpb25WYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5zZWxlY3Rpb24uY291bnRyeUlkXS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJTZXJ2aWNlOiBHb29nbGVDaGFydHNMb2FkZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVsID0gZWw7XHJcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UgPSBsb2FkZXJTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmRldmljZW9yaWVudGF0aW9uJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBzY3JlZW5TaXplQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5sb2FkaW5nICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBtYXA6IEhUTUxFbGVtZW50ID0gdGhpcy5tYXBDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIG1hcC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7bWFwLmNsaWVudFdpZHRoICogdGhpcy5wcm9wb3J0aW9ufXB4YCk7XHJcbiAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4dHJhU2VsZWN0ZWQoY291bnRyeTogc3RyaW5nKTogU2VsZWN0aW9uRXh0cmFbXSB8IG51bGwge1xyXG4gICAgY29uc3QgeyBleHRyYSB9ID0gdGhpcy5kYXRhW2NvdW50cnldO1xyXG4gICAgcmV0dXJuIGV4dHJhICYmIE9iamVjdC5rZXlzKGV4dHJhKS5tYXAoa2V5ID0+ICh7IGtleSwgdmFsOiBleHRyYVtrZXldIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0Q291bnRyeShjb3VudHJ5Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IGNvdW50cnkgPyB7XHJcbiAgICAgIGNvdW50cnlJZDogY291bnRyeSxcclxuICAgICAgY291bnRyeU5hbWU6IGNvdW50cnlOYW1lKGNvdW50cnkpLFxyXG4gICAgICBleHRyYTogdGhpcy5nZXRFeHRyYVNlbGVjdGVkKGNvdW50cnkpXHJcbiAgICB9IDogbnVsbDtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBhIHRhYmxlIChvYmplY3QpIGZvcm1hdHRlZCBhc1xyXG4gICAqIGB7IEdCOiB7IHZhbHVlOjEyMywgLi4ub3RoZXJkYXRhIH0sIEVTOiB7IHZhbHVlOjQ1NiwgLi4ud2hhdGV2ZXIgfSB9YFxyXG4gICAqIHRvIGFuIGFycmF5IGZvciBHb29nbGUgQ2hhcnRzIGZvcm1hdHRlZCBhc1xyXG4gICAqIGBbIFsnQ291bnRyeScsICdWYWx1ZSddLCBbJ0dCJywgMTIzXSwgWydFUycsIDQ1Nl0gXWBcclxuICAgKiBhbmQgc2F2ZSB0byB0aGlzLnByb2Nlc3NlZERhdGFcclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3NJbnB1dERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvb2dsZURhdGEgPSBPYmplY3QuZW50cmllcyh0aGlzLmRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhd1ZhbENvbnRlbnQgPSB2YWxbdmFsdWVIb2xkZXJdO1xyXG4gICAgICBhY2MucHVzaChba2V5LCByYXdWYWxDb250ZW50ID09PSBudWxsID8gbnVsbCA6IHJhd1ZhbENvbnRlbnQgPyArcmF3VmFsQ29udGVudC50b1N0cmluZygpIDogMF0pO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW1snQ291bnRyeScsICdWYWx1ZSddXSBhcyBWYWxpZENvdW50cnlEYXRhW11bXSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyh7IGRhdGEgfTogeyBkYXRhOiBhbnkgfSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgICBjb2xvckF4aXM6IHtcclxuICAgICAgICAgIGNvbG9yczogW3RoaXMubWluQ29sb3IsIHRoaXMubWF4Q29sb3JdLFxyXG4gICAgICAgICAgbWluVmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbWF4VmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhbGVzc1JlZ2lvbkNvbG9yOiB0aGlzLm5vRGF0YUNvbG9yLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmV4Y2VwdGlvbkNvbG9yLFxyXG4gICAgICAgIGxlZ2VuZDogdGhpcy5zaG93Q2FwdGlvbixcclxuICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdub25lJyB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2UubG9hZCh0aGlzLmFwaUtleSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMud3JhcHBlciA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5DaGFydFdyYXBwZXIoe1xyXG4gICAgICAgICAgY2hhcnRUeXBlOiAnR2VvQ2hhcnQnLFxyXG4gICAgICAgICAgZGF0YVRhYmxlOiB0aGlzLmdvb2dsZURhdGEsXHJcbiAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTtcclxuICAgICAgICB0aGlzLnJlZHJhdygpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxmOiBIVE1MRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnByb3BvcnRpb24gPSBzZWxmLmNsaWVudEhlaWdodCAvIHNlbGYuY2xpZW50V2lkdGg7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2hhcnRlcnJvcih7IGlkOiBDaGFyRXJyb3JDb2RlLmxvYWRpbmcsIG1lc3NhZ2U6ICdDb3VsZCBub3QgbG9hZCcgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkcmF3KCk6IHZvaWQge1xyXG4gICAgdGhpcy53cmFwcGVyLmRyYXcodGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5jbS1tYXAtY29udGVudCcpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGFydFJlYWR5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhcnRSZWFkeS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhcnRlcnJvcihlcnJvcjogQ2hhcnRFcnJvckV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYXJ0RXJyb3IuZW1pdChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTWFwU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXZlbnQ6IENoYXJ0U2VsZWN0RXZlbnQgPSB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIGNvdW50cnk6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnlbXSA9IHRoaXMud3JhcHBlci52aXN1YWxpemF0aW9uLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB7IHJvdzogdGFibGVSb3cgfTogeyByb3c6IG51bWJlciB9ID0gc2VsZWN0aW9uWzBdO1xyXG4gICAgICBjb25zdCBkYXRhVGFibGUgPSB0aGlzLndyYXBwZXIuZ2V0RGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICBldmVudC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGV2ZW50LnZhbHVlID0gZGF0YVRhYmxlLmdldFZhbHVlKHRhYmxlUm93LCAxKTtcclxuICAgICAgZXZlbnQuY291bnRyeSA9IGRhdGFUYWJsZS5nZXRWYWx1ZSh0YWJsZVJvdywgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q291bnRyeShldmVudC5jb3VudHJ5KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdENvdW50cnkobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFydFNlbGVjdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGFkZExpc3RlbmVyIH0gPSBnb29nbGUudmlzdWFsaXphdGlvbi5ldmVudHM7XHJcbiAgICBhZGRMaXN0ZW5lcih0aGlzLndyYXBwZXIsICdyZWFkeScsIHRoaXMub25DaGFydFJlYWR5LmJpbmQodGhpcykpO1xyXG4gICAgYWRkTGlzdGVuZXIodGhpcy53cmFwcGVyLCAnZXJyb3InLCB0aGlzLm9uQ2hhcnRlcnJvci5iaW5kKHRoaXMpKTtcclxuICAgIGFkZExpc3RlbmVyKHRoaXMud3JhcHBlciwgJ3NlbGVjdCcsIHRoaXMub25NYXBTZWxlY3QuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGNvbnN0IHsgcmVtb3ZlTGlzdGVuZXIgfSA9IGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cztcclxuICAgIHJlbW92ZUxpc3RlbmVyKCdyZWFkeScpO1xyXG4gICAgcmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJyk7XHJcbiAgICByZW1vdmVMaXN0ZW5lcignc2VsZWN0Jyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyaWVzLW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb3VudHJpZXMtbWFwLyIsInNvdXJjZXMiOlsiYXBwL21vZHVsZXMvY291bnRyaWVzLW1hcC9jb3VudHJpZXMtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RixPQUFPLEVBQUUsRUFBRSxJQUFJLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUM1QixNQUFNLFdBQVcsR0FBRyxDQUFDLFdBQW1CLEVBQVUsRUFBRTtJQUNsRCxPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7O0FBUUYsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUF1Q2hDLFlBQ21CLEtBQXdCLEVBQ3hCLEVBQWMsRUFDZCxhQUF3QztRQUZ4QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQTJCO1FBckNsRCxpQkFBWSxHQUFHLFNBQVMsQ0FBQztRQUN6QixlQUFVLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFHLENBQUMs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QkFBcUIsQ0FxTGpDO1NBckxZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdmFyIGdvb2dsZTogeyB2aXN1YWxpemF0aW9uOiB7IENoYXJ0V3JhcHBlciwgZXZlbnRzOiB7XHJcbiAgYWRkTGlzdGVuZXI6ICh3cmFwcGVyLCBldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3M/OiBhbnkpID0+IHZvaWQpID0+IHZvaWQsIHJlbW92ZUxpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZykgPT4gdm9pZFxyXG59IH0gfTtcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR29vZ2xlQ2hhcnRzTG9hZGVyU2VydmljZSB9IGZyb20gJy4vZ29vZ2xlLWNoYXJ0cy1sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0U2VsZWN0RXZlbnQsIENoYXJ0RXJyb3JFdmVudCwgQ2hhckVycm9yQ29kZSB9IGZyb20gJy4vY2hhcnQtZXZlbnRzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvdW50cmllc0RhdGEsIFNlbGVjdGlvbkV4dHJhLCBTZWxlY3Rpb24sIFZhbGlkQ291bnRyeURhdGEgfSBmcm9tICcuL2RhdGEtdHlwZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZW4gYXMgY291bnRyaWVzRU4gfSBmcm9tICdAamFnb21mL2NvdW50cmllc2xpc3QnO1xyXG5cclxuY29uc3QgdmFsdWVIb2xkZXIgPSAndmFsdWUnO1xyXG5jb25zdCBjb3VudHJ5TmFtZSA9IChjb3VudHJ5Q29kZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gY291bnRyaWVzRU5bY291bnRyeUNvZGVdO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3VudHJpZXMtbWFwJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50cmllc01hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YTogQ291bnRyaWVzRGF0YTtcclxuICBASW5wdXQoKSBhcGlLZXk6IHN0cmluZztcclxuICBASW5wdXQoKSBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KCkgY291bnRyeUxhYmVsID0gJ0NvdW50cnknO1xyXG4gIEBJbnB1dCgpIHZhbHVlTGFiZWwgPSAnVmFsdWUnO1xyXG4gIEBJbnB1dCgpIHNob3dDYXB0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYXB0aW9uQmVsb3cgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtaW5WYWx1ZSA9IDA7XHJcbiAgQElucHV0KCkgbWF4VmFsdWU6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaW5Db2xvciA9ICd3aGl0ZSc7XHJcbiAgQElucHV0KCkgbWF4Q29sb3IgPSAncmVkJztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG4gIEBJbnB1dCgpIG5vRGF0YUNvbG9yID0gJyNDRkNGQ0YnO1xyXG4gIEBJbnB1dCgpIGV4Y2VwdGlvbkNvbG9yID0gJyNGRkVFNTgnO1xyXG5cclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0RXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPENoYXJ0RXJyb3JFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhcnRTZWxlY3RFdmVudD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWFwQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJlYWRvbmx5IG1hcENvbnRlbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcHJvcG9ydGlvbjogbnVtYmVyO1xyXG4gIHByaXZhdGUgZ29vZ2xlRGF0YTogVmFsaWRDb3VudHJ5RGF0YVtdW107XHJcbiAgcHJpdmF0ZSB3cmFwcGVyOiBhbnk7XHJcblxyXG4gIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgaW5uZXJMb2FkaW5nID0gdHJ1ZTtcclxuICBnZXQgbG9hZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3Rpb25WYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5zZWxlY3Rpb24uY291bnRyeUlkXS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJTZXJ2aWNlOiBHb29nbGVDaGFydHNMb2FkZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVsID0gZWw7XHJcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UgPSBsb2FkZXJTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmRldmljZW9yaWVudGF0aW9uJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBzY3JlZW5TaXplQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5sb2FkaW5nICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBtYXA6IEhUTUxFbGVtZW50ID0gdGhpcy5tYXBDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIG1hcC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7bWFwLmNsaWVudFdpZHRoICogdGhpcy5wcm9wb3J0aW9ufXB4YCk7XHJcbiAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4dHJhU2VsZWN0ZWQoY291bnRyeTogc3RyaW5nKTogU2VsZWN0aW9uRXh0cmFbXSB8IG51bGwge1xyXG4gICAgY29uc3QgeyBleHRyYSB9ID0gdGhpcy5kYXRhW2NvdW50cnldO1xyXG4gICAgcmV0dXJuIGV4dHJhICYmIE9iamVjdC5rZXlzKGV4dHJhKS5tYXAoa2V5ID0+ICh7IGtleSwgdmFsOiBleHRyYVtrZXldIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0Q291bnRyeShjb3VudHJ5Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IGNvdW50cnkgPyB7XHJcbiAgICAgIGNvdW50cnlJZDogY291bnRyeSxcclxuICAgICAgY291bnRyeU5hbWU6IGNvdW50cnlOYW1lKGNvdW50cnkpLFxyXG4gICAgICBleHRyYTogdGhpcy5nZXRFeHRyYVNlbGVjdGVkKGNvdW50cnkpXHJcbiAgICB9IDogbnVsbDtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBhIHRhYmxlIChvYmplY3QpIGZvcm1hdHRlZCBhc1xyXG4gICAqIGB7IEdCOiB7IHZhbHVlOjEyMywgLi4ub3RoZXJkYXRhIH0sIEVTOiB7IHZhbHVlOjQ1NiwgLi4ud2hhdGV2ZXIgfSB9YFxyXG4gICAqIHRvIGFuIGFycmF5IGZvciBHb29nbGUgQ2hhcnRzIGZvcm1hdHRlZCBhc1xyXG4gICAqIGBbIFsnQ291bnRyeScsICdWYWx1ZSddLCBbJ0dCJywgMTIzXSwgWydFUycsIDQ1Nl0gXWBcclxuICAgKiBhbmQgc2F2ZSB0byB0aGlzLnByb2Nlc3NlZERhdGFcclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3NJbnB1dERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvb2dsZURhdGEgPSBPYmplY3QuZW50cmllcyh0aGlzLmRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhd1ZhbENvbnRlbnQgPSB2YWxbdmFsdWVIb2xkZXJdO1xyXG4gICAgICBhY2MucHVzaChba2V5LCByYXdWYWxDb250ZW50ID09PSBudWxsID8gbnVsbCA6IHJhd1ZhbENvbnRlbnQgPyArcmF3VmFsQ29udGVudC50b1N0cmluZygpIDogMF0pO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW1snQ291bnRyeScsICdWYWx1ZSddXSBhcyBWYWxpZENvdW50cnlEYXRhW11bXSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyh7IGRhdGEgfTogeyBkYXRhOiBhbnkgfSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgICBjb2xvckF4aXM6IHtcclxuICAgICAgICAgIGNvbG9yczogW3RoaXMubWluQ29sb3IsIHRoaXMubWF4Q29sb3JdLFxyXG4gICAgICAgICAgbWluVmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbWF4VmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhbGVzc1JlZ2lvbkNvbG9yOiB0aGlzLm5vRGF0YUNvbG9yLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmV4Y2VwdGlvbkNvbG9yLFxyXG4gICAgICAgIGxlZ2VuZDogdGhpcy5zaG93Q2FwdGlvbixcclxuICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdub25lJyB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2UubG9hZCh0aGlzLmFwaUtleSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMud3JhcHBlciA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5DaGFydFdyYXBwZXIoe1xyXG4gICAgICAgICAgY2hhcnRUeXBlOiAnR2VvQ2hhcnQnLFxyXG4gICAgICAgICAgZGF0YVRhYmxlOiB0aGlzLmdvb2dsZURhdGEsXHJcbiAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTtcclxuICAgICAgICB0aGlzLnJlZHJhdygpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxmOiBIVE1MRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnByb3BvcnRpb24gPSBzZWxmLmNsaWVudEhlaWdodCAvIHNlbGYuY2xpZW50V2lkdGg7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2hhcnRlcnJvcih7IGlkOiBDaGFyRXJyb3JDb2RlLmxvYWRpbmcsIG1lc3NhZ2U6ICdDb3VsZCBub3QgbG9hZCcgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkcmF3KCk6IHZvaWQge1xyXG4gICAgdGhpcy53cmFwcGVyLmRyYXcodGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5jbS1tYXAtY29udGVudCcpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGFydFJlYWR5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5uZXJMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhcnRSZWFkeS5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhcnRlcnJvcihlcnJvcjogQ2hhcnRFcnJvckV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYXJ0RXJyb3IuZW1pdChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTWFwU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXZlbnQ6IENoYXJ0U2VsZWN0RXZlbnQgPSB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIGNvdW50cnk6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnlbXSA9IHRoaXMud3JhcHBlci52aXN1YWxpemF0aW9uLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB7IHJvdzogdGFibGVSb3cgfTogeyByb3c6IG51bWJlciB9ID0gc2VsZWN0aW9uWzBdO1xyXG4gICAgICBjb25zdCBkYXRhVGFibGUgPSB0aGlzLndyYXBwZXIuZ2V0RGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICBldmVudC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGV2ZW50LnZhbHVlID0gZGF0YVRhYmxlLmdldFZhbHVlKHRhYmxlUm93LCAxKTtcclxuICAgICAgZXZlbnQuY291bnRyeSA9IGRhdGFUYWJsZS5nZXRWYWx1ZSh0YWJsZVJvdywgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q291bnRyeShldmVudC5jb3VudHJ5KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdENvdW50cnkobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFydFNlbGVjdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGFkZExpc3RlbmVyIH0gPSBnb29nbGUudmlzdWFsaXphdGlvbi5ldmVudHM7XHJcbiAgICBhZGRMaXN0ZW5lcih0aGlzLndyYXBwZXIsICdyZWFkeScsIHRoaXMub25DaGFydFJlYWR5LmJpbmQodGhpcykpO1xyXG4gICAgYWRkTGlzdGVuZXIodGhpcy53cmFwcGVyLCAnZXJyb3InLCB0aGlzLm9uQ2hhcnRlcnJvci5iaW5kKHRoaXMpKTtcclxuICAgIGFkZExpc3RlbmVyKHRoaXMud3JhcHBlciwgJ3NlbGVjdCcsIHRoaXMub25NYXBTZWxlY3QuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGNvbnN0IHsgcmVtb3ZlTGlzdGVuZXIgfSA9IGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cztcclxuICAgIHJlbW92ZUxpc3RlbmVyKCdyZWFkeScpO1xyXG4gICAgcmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJyk7XHJcbiAgICByZW1vdmVMaXN0ZW5lcignc2VsZWN0Jyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/dist/esm5/app/modules/countries-map/countries-map.component.js b/dist/esm5/app/modules/countries-map/countries-map.component.js index 9485e93..529d888 100644 --- a/dist/esm5/app/modules/countries-map/countries-map.component.js +++ b/dist/esm5/app/modules/countries-map/countries-map.component.js @@ -119,8 +119,10 @@ var CountriesMapComponent = /** @class */ (function () { this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content')); }; CountriesMapComponent.prototype.onChartReady = function () { - this.innerLoading = false; - this.chartReady.emit(); + if (this.innerLoading) { + this.innerLoading = false; + this.chartReady.emit(); + } }; CountriesMapComponent.prototype.onCharterror = function (error) { this.chartError.emit(error); @@ -235,4 +237,4 @@ var CountriesMapComponent = /** @class */ (function () { }()); export { CountriesMapComponent }; export { ɵ0 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyaWVzLW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb3VudHJpZXMtbWFwLyIsInNvdXJjZXMiOlsiYXBwL21vZHVsZXMvY291bnRyaWVzLW1hcC9jb3VudHJpZXMtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RixPQUFPLEVBQUUsRUFBRSxJQUFJLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELElBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUM1QixJQUFNLFdBQVcsR0FBRyxVQUFDLFdBQW1CO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQzs7QUFRRjtJQXVDRSwrQkFDbUIsS0FBd0IsRUFDeEIsRUFBYyxFQUNkLGFBQXdDO1FBRnhDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUFyQ2xELGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFDckIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRWIsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUNuQixhQUFR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Q0MseUJBQXlCOztJQXhDbEQ7UUFBUixLQUFLLEVBQUU7dURBQXFCO0lBQ3BCO1FBQVIsS0FBSyxFQUFFO3lEQUFnQjtJQUNmO1FBQVIsS0FBSyxFQUFFOzBEQUFjO0lBQ2I7UUFBUixLQUFLLEVBQUU7K0RBQTBCO0lBQ3pCO1FBQVIsS0FBSyxFQUFFOzZEQUFzQjtJQUNyQjtRQUFSLEtBQUssRUFBRTs4REFBb0I7SUFDbkI7UUFBUixLQUFLLEVBQUU7K0RBQXFCO0lBQ3BCO1FBQVIsS0FBSyxFQUFFOzZEQUFvQjtJQUNuQjtRQUFSLEtBQUssRUFBRTsyREFBYztJQUNiO1FBQVIsS0FBSyxFQUFFOzJEQUFrQjtJQUNqQjtRQUFSLEtBQUssRUFBRTsyREFBb0I7SUFDbkI7UUFBUixLQUFLLEVBQUU7MkRBQWtCO0lBQ2pCO1FBQVIsS0FBSyxFQUFFO2tFQUEyQjtJQUMxQjtRQUFSLEtBQUssRUFBRTs4REFBeUI7SUFDeEI7UUFBUixLQUFLLEVBQUU7aUVBQTRCO0lBRTFCO1FBQVQsTUFBTSxFQUFFOzZEQUF3RDtJQUN2RDtRQUFULE1BQU0sRUFBRTs2REFBbUU7SUFDbEU7UUFBVCxNQUFNLEVBQUU7OERBQXFFO0lBRWxDO1FBQTNDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7NkRBQXlDO0lBNEJwRjtRQUZDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQztRQUN4QyxZQUFZLENBQUMsZUFBZSxDQUFDO2tFQU83QjtJQXhEVSxxQkFBcUI7UUFOakMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGVBQWU7WUFDekIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07WUFDL0Msa3dDQUE2Qzs7U0FFOUMsQ0FBQztPQUNXLHFCQUFxQixDQW1MakM7SUFBRCw0QkFBQztDQUFBLEFBbkxELElBbUxDO1NBbkxZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdmFyIGdvb2dsZTogeyB2aXN1YWxpemF0aW9uOiB7IENoYXJ0V3JhcHBlciwgZXZlbnRzOiB7XHJcbiAgYWRkTGlzdGVuZXI6ICh3cmFwcGVyLCBldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3M/OiBhbnkpID0+IHZvaWQpID0+IHZvaWQsIHJlbW92ZUxpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZykgPT4gdm9pZFxyXG59IH0gfTtcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR29vZ2xlQ2hhcnRzTG9hZGVyU2VydmljZSB9IGZyb20gJy4vZ29vZ2xlLWNoYXJ0cy1sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0U2VsZWN0RXZlbnQsIENoYXJ0RXJyb3JFdmVudCwgQ2hhckVycm9yQ29kZSB9IGZyb20gJy4vY2hhcnQtZXZlbnRzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvdW50cmllc0RhdGEsIFNlbGVjdGlvbkV4dHJhLCBTZWxlY3Rpb24sIFZhbGlkQ291bnRyeURhdGEgfSBmcm9tICcuL2RhdGEtdHlwZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZW4gYXMgY291bnRyaWVzRU4gfSBmcm9tICdAamFnb21mL2NvdW50cmllc2xpc3QnO1xyXG5cclxuY29uc3QgdmFsdWVIb2xkZXIgPSAndmFsdWUnO1xyXG5jb25zdCBjb3VudHJ5TmFtZSA9IChjb3VudHJ5Q29kZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gY291bnRyaWVzRU5bY291bnRyeUNvZGVdO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3VudHJpZXMtbWFwJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50cmllc01hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YTogQ291bnRyaWVzRGF0YTtcclxuICBASW5wdXQoKSBhcGlLZXk6IHN0cmluZztcclxuICBASW5wdXQoKSBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KCkgY291bnRyeUxhYmVsID0gJ0NvdW50cnknO1xyXG4gIEBJbnB1dCgpIHZhbHVlTGFiZWwgPSAnVmFsdWUnO1xyXG4gIEBJbnB1dCgpIHNob3dDYXB0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYXB0aW9uQmVsb3cgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtaW5WYWx1ZSA9IDA7XHJcbiAgQElucHV0KCkgbWF4VmFsdWU6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaW5Db2xvciA9ICd3aGl0ZSc7XHJcbiAgQElucHV0KCkgbWF4Q29sb3IgPSAncmVkJztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG4gIEBJbnB1dCgpIG5vRGF0YUNvbG9yID0gJyNDRkNGQ0YnO1xyXG4gIEBJbnB1dCgpIGV4Y2VwdGlvbkNvbG9yID0gJyNGRkVFNTgnO1xyXG5cclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0RXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPENoYXJ0RXJyb3JFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhcnRTZWxlY3RFdmVudD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWFwQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJlYWRvbmx5IG1hcENvbnRlbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcHJvcG9ydGlvbjogbnVtYmVyO1xyXG4gIHByaXZhdGUgZ29vZ2xlRGF0YTogVmFsaWRDb3VudHJ5RGF0YVtdW107XHJcbiAgcHJpdmF0ZSB3cmFwcGVyOiBhbnk7XHJcblxyXG4gIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgaW5uZXJMb2FkaW5nID0gdHJ1ZTtcclxuICBnZXQgbG9hZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3Rpb25WYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5zZWxlY3Rpb24uY291bnRyeUlkXS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJTZXJ2aWNlOiBHb29nbGVDaGFydHNMb2FkZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVsID0gZWw7XHJcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UgPSBsb2FkZXJTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmRldmljZW9yaWVudGF0aW9uJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBzY3JlZW5TaXplQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5sb2FkaW5nICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBtYXA6IEhUTUxFbGVtZW50ID0gdGhpcy5tYXBDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIG1hcC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7bWFwLmNsaWVudFdpZHRoICogdGhpcy5wcm9wb3J0aW9ufXB4YCk7XHJcbiAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4dHJhU2VsZWN0ZWQoY291bnRyeTogc3RyaW5nKTogU2VsZWN0aW9uRXh0cmFbXSB8IG51bGwge1xyXG4gICAgY29uc3QgeyBleHRyYSB9ID0gdGhpcy5kYXRhW2NvdW50cnldO1xyXG4gICAgcmV0dXJuIGV4dHJhICYmIE9iamVjdC5rZXlzKGV4dHJhKS5tYXAoa2V5ID0+ICh7IGtleSwgdmFsOiBleHRyYVtrZXldIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0Q291bnRyeShjb3VudHJ5Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IGNvdW50cnkgPyB7XHJcbiAgICAgIGNvdW50cnlJZDogY291bnRyeSxcclxuICAgICAgY291bnRyeU5hbWU6IGNvdW50cnlOYW1lKGNvdW50cnkpLFxyXG4gICAgICBleHRyYTogdGhpcy5nZXRFeHRyYVNlbGVjdGVkKGNvdW50cnkpXHJcbiAgICB9IDogbnVsbDtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBhIHRhYmxlIChvYmplY3QpIGZvcm1hdHRlZCBhc1xyXG4gICAqIGB7IEdCOiB7IHZhbHVlOjEyMywgLi4ub3RoZXJkYXRhIH0sIEVTOiB7IHZhbHVlOjQ1NiwgLi4ud2hhdGV2ZXIgfSB9YFxyXG4gICAqIHRvIGFuIGFycmF5IGZvciBHb29nbGUgQ2hhcnRzIGZvcm1hdHRlZCBhc1xyXG4gICAqIGBbIFsnQ291bnRyeScsICdWYWx1ZSddLCBbJ0dCJywgMTIzXSwgWydFUycsIDQ1Nl0gXWBcclxuICAgKiBhbmQgc2F2ZSB0byB0aGlzLnByb2Nlc3NlZERhdGFcclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3NJbnB1dERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvb2dsZURhdGEgPSBPYmplY3QuZW50cmllcyh0aGlzLmRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhd1ZhbENvbnRlbnQgPSB2YWxbdmFsdWVIb2xkZXJdO1xyXG4gICAgICBhY2MucHVzaChba2V5LCByYXdWYWxDb250ZW50ID09PSBudWxsID8gbnVsbCA6IHJhd1ZhbENvbnRlbnQgPyArcmF3VmFsQ29udGVudC50b1N0cmluZygpIDogMF0pO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW1snQ291bnRyeScsICdWYWx1ZSddXSBhcyBWYWxpZENvdW50cnlEYXRhW11bXSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyh7IGRhdGEgfTogeyBkYXRhOiBhbnkgfSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgICBjb2xvckF4aXM6IHtcclxuICAgICAgICAgIGNvbG9yczogW3RoaXMubWluQ29sb3IsIHRoaXMubWF4Q29sb3JdLFxyXG4gICAgICAgICAgbWluVmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbWF4VmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhbGVzc1JlZ2lvbkNvbG9yOiB0aGlzLm5vRGF0YUNvbG9yLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmV4Y2VwdGlvbkNvbG9yLFxyXG4gICAgICAgIGxlZ2VuZDogdGhpcy5zaG93Q2FwdGlvbixcclxuICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdub25lJyB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2UubG9hZCh0aGlzLmFwaUtleSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMud3JhcHBlciA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5DaGFydFdyYXBwZXIoe1xyXG4gICAgICAgICAgY2hhcnRUeXBlOiAnR2VvQ2hhcnQnLFxyXG4gICAgICAgICAgZGF0YVRhYmxlOiB0aGlzLmdvb2dsZURhdGEsXHJcbiAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTtcclxuICAgICAgICB0aGlzLnJlZHJhdygpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxmOiBIVE1MRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnByb3BvcnRpb24gPSBzZWxmLmNsaWVudEhlaWdodCAvIHNlbGYuY2xpZW50V2lkdGg7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2hhcnRlcnJvcih7IGlkOiBDaGFyRXJyb3JDb2RlLmxvYWRpbmcsIG1lc3NhZ2U6ICdDb3VsZCBub3QgbG9hZCcgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkcmF3KCk6IHZvaWQge1xyXG4gICAgdGhpcy53cmFwcGVyLmRyYXcodGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5jbS1tYXAtY29udGVudCcpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGFydFJlYWR5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhcnRSZWFkeS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhcnRlcnJvcihlcnJvcjogQ2hhcnRFcnJvckV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYXJ0RXJyb3IuZW1pdChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTWFwU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXZlbnQ6IENoYXJ0U2VsZWN0RXZlbnQgPSB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIGNvdW50cnk6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnlbXSA9IHRoaXMud3JhcHBlci52aXN1YWxpemF0aW9uLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB7IHJvdzogdGFibGVSb3cgfTogeyByb3c6IG51bWJlciB9ID0gc2VsZWN0aW9uWzBdO1xyXG4gICAgICBjb25zdCBkYXRhVGFibGUgPSB0aGlzLndyYXBwZXIuZ2V0RGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICBldmVudC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGV2ZW50LnZhbHVlID0gZGF0YVRhYmxlLmdldFZhbHVlKHRhYmxlUm93LCAxKTtcclxuICAgICAgZXZlbnQuY291bnRyeSA9IGRhdGFUYWJsZS5nZXRWYWx1ZSh0YWJsZVJvdywgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q291bnRyeShldmVudC5jb3VudHJ5KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdENvdW50cnkobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFydFNlbGVjdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGFkZExpc3RlbmVyIH0gPSBnb29nbGUudmlzdWFsaXphdGlvbi5ldmVudHM7XHJcbiAgICBhZGRMaXN0ZW5lcih0aGlzLndyYXBwZXIsICdyZWFkeScsIHRoaXMub25DaGFydFJlYWR5LmJpbmQodGhpcykpO1xyXG4gICAgYWRkTGlzdGVuZXIodGhpcy53cmFwcGVyLCAnZXJyb3InLCB0aGlzLm9uQ2hhcnRlcnJvci5iaW5kKHRoaXMpKTtcclxuICAgIGFkZExpc3RlbmVyKHRoaXMud3JhcHBlciwgJ3NlbGVjdCcsIHRoaXMub25NYXBTZWxlY3QuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGNvbnN0IHsgcmVtb3ZlTGlzdGVuZXIgfSA9IGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cztcclxuICAgIHJlbW92ZUxpc3RlbmVyKCdyZWFkeScpO1xyXG4gICAgcmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJyk7XHJcbiAgICByZW1vdmVMaXN0ZW5lcignc2VsZWN0Jyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyaWVzLW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb3VudHJpZXMtbWFwLyIsInNvdXJjZXMiOlsiYXBwL21vZHVsZXMvY291bnRyaWVzLW1hcC9jb3VudHJpZXMtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RixPQUFPLEVBQUUsRUFBRSxJQUFJLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELElBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUM1QixJQUFNLFdBQVcsR0FBRyxVQUFDLFdBQW1CO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQzs7QUFRRjtJQXVDRSwrQkFDbUIsS0FBd0IsRUFDeEIsRUFBYyxFQUNkLGFBQXdDO1FBRnhDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUFyQ2xELGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFDckIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRWIsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUNuQixhQUFR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emF0aW9uOiB7IENoYXJ0V3JhcHBlciwgZXZlbnRzOiB7XHJcbiAgYWRkTGlzdGVuZXI6ICh3cmFwcGVyLCBldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3M/OiBhbnkpID0+IHZvaWQpID0+IHZvaWQsIHJlbW92ZUxpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZykgPT4gdm9pZFxyXG59IH0gfTtcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR29vZ2xlQ2hhcnRzTG9hZGVyU2VydmljZSB9IGZyb20gJy4vZ29vZ2xlLWNoYXJ0cy1sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0U2VsZWN0RXZlbnQsIENoYXJ0RXJyb3JFdmVudCwgQ2hhckVycm9yQ29kZSB9IGZyb20gJy4vY2hhcnQtZXZlbnRzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvdW50cmllc0RhdGEsIFNlbGVjdGlvbkV4dHJhLCBTZWxlY3Rpb24sIFZhbGlkQ291bnRyeURhdGEgfSBmcm9tICcuL2RhdGEtdHlwZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZW4gYXMgY291bnRyaWVzRU4gfSBmcm9tICdAamFnb21mL2NvdW50cmllc2xpc3QnO1xyXG5cclxuY29uc3QgdmFsdWVIb2xkZXIgPSAndmFsdWUnO1xyXG5jb25zdCBjb3VudHJ5TmFtZSA9IChjb3VudHJ5Q29kZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gY291bnRyaWVzRU5bY291bnRyeUNvZGVdO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3VudHJpZXMtbWFwJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY291bnRyaWVzLW1hcC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50cmllc01hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YTogQ291bnRyaWVzRGF0YTtcclxuICBASW5wdXQoKSBhcGlLZXk6IHN0cmluZztcclxuICBASW5wdXQoKSBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KCkgY291bnRyeUxhYmVsID0gJ0NvdW50cnknO1xyXG4gIEBJbnB1dCgpIHZhbHVlTGFiZWwgPSAnVmFsdWUnO1xyXG4gIEBJbnB1dCgpIHNob3dDYXB0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYXB0aW9uQmVsb3cgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtaW5WYWx1ZSA9IDA7XHJcbiAgQElucHV0KCkgbWF4VmFsdWU6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaW5Db2xvciA9ICd3aGl0ZSc7XHJcbiAgQElucHV0KCkgbWF4Q29sb3IgPSAncmVkJztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG4gIEBJbnB1dCgpIG5vRGF0YUNvbG9yID0gJyNDRkNGQ0YnO1xyXG4gIEBJbnB1dCgpIGV4Y2VwdGlvbkNvbG9yID0gJyNGRkVFNTgnO1xyXG5cclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0RXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPENoYXJ0RXJyb3JFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBjaGFydFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhcnRTZWxlY3RFdmVudD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWFwQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJlYWRvbmx5IG1hcENvbnRlbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcHJvcG9ydGlvbjogbnVtYmVyO1xyXG4gIHByaXZhdGUgZ29vZ2xlRGF0YTogVmFsaWRDb3VudHJ5RGF0YVtdW107XHJcbiAgcHJpdmF0ZSB3cmFwcGVyOiBhbnk7XHJcblxyXG4gIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgaW5uZXJMb2FkaW5nID0gdHJ1ZTtcclxuICBnZXQgbG9hZGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3Rpb25WYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5zZWxlY3Rpb24uY291bnRyeUlkXS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJTZXJ2aWNlOiBHb29nbGVDaGFydHNMb2FkZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVsID0gZWw7XHJcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UgPSBsb2FkZXJTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmRldmljZW9yaWVudGF0aW9uJylcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBzY3JlZW5TaXplQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5sb2FkaW5nICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBtYXA6IEhUTUxFbGVtZW50ID0gdGhpcy5tYXBDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIG1hcC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7bWFwLmNsaWVudFdpZHRoICogdGhpcy5wcm9wb3J0aW9ufXB4YCk7XHJcbiAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4dHJhU2VsZWN0ZWQoY291bnRyeTogc3RyaW5nKTogU2VsZWN0aW9uRXh0cmFbXSB8IG51bGwge1xyXG4gICAgY29uc3QgeyBleHRyYSB9ID0gdGhpcy5kYXRhW2NvdW50cnldO1xyXG4gICAgcmV0dXJuIGV4dHJhICYmIE9iamVjdC5rZXlzKGV4dHJhKS5tYXAoa2V5ID0+ICh7IGtleSwgdmFsOiBleHRyYVtrZXldIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0Q291bnRyeShjb3VudHJ5Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IGNvdW50cnkgPyB7XHJcbiAgICAgIGNvdW50cnlJZDogY291bnRyeSxcclxuICAgICAgY291bnRyeU5hbWU6IGNvdW50cnlOYW1lKGNvdW50cnkpLFxyXG4gICAgICBleHRyYTogdGhpcy5nZXRFeHRyYVNlbGVjdGVkKGNvdW50cnkpXHJcbiAgICB9IDogbnVsbDtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBhIHRhYmxlIChvYmplY3QpIGZvcm1hdHRlZCBhc1xyXG4gICAqIGB7IEdCOiB7IHZhbHVlOjEyMywgLi4ub3RoZXJkYXRhIH0sIEVTOiB7IHZhbHVlOjQ1NiwgLi4ud2hhdGV2ZXIgfSB9YFxyXG4gICAqIHRvIGFuIGFycmF5IGZvciBHb29nbGUgQ2hhcnRzIGZvcm1hdHRlZCBhc1xyXG4gICAqIGBbIFsnQ291bnRyeScsICdWYWx1ZSddLCBbJ0dCJywgMTIzXSwgWydFUycsIDQ1Nl0gXWBcclxuICAgKiBhbmQgc2F2ZSB0byB0aGlzLnByb2Nlc3NlZERhdGFcclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3NJbnB1dERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvb2dsZURhdGEgPSBPYmplY3QuZW50cmllcyh0aGlzLmRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhd1ZhbENvbnRlbnQgPSB2YWxbdmFsdWVIb2xkZXJdO1xyXG4gICAgICBhY2MucHVzaChba2V5LCByYXdWYWxDb250ZW50ID09PSBudWxsID8gbnVsbCA6IHJhd1ZhbENvbnRlbnQgPyArcmF3VmFsQ29udGVudC50b1N0cmluZygpIDogMF0pO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW1snQ291bnRyeScsICdWYWx1ZSddXSBhcyBWYWxpZENvdW50cnlEYXRhW11bXSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyh7IGRhdGEgfTogeyBkYXRhOiBhbnkgfSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgICBjb2xvckF4aXM6IHtcclxuICAgICAgICAgIGNvbG9yczogW3RoaXMubWluQ29sb3IsIHRoaXMubWF4Q29sb3JdLFxyXG4gICAgICAgICAgbWluVmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbWF4VmFsdWU6IE51bWJlci5pc0ludGVnZXIodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhbGVzc1JlZ2lvbkNvbG9yOiB0aGlzLm5vRGF0YUNvbG9yLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiB0aGlzLmV4Y2VwdGlvbkNvbG9yLFxyXG4gICAgICAgIGxlZ2VuZDogdGhpcy5zaG93Q2FwdGlvbixcclxuICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdub25lJyB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2UubG9hZCh0aGlzLmFwaUtleSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMud3JhcHBlciA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5DaGFydFdyYXBwZXIoe1xyXG4gICAgICAgICAgY2hhcnRUeXBlOiAnR2VvQ2hhcnQnLFxyXG4gICAgICAgICAgZGF0YVRhYmxlOiB0aGlzLmdvb2dsZURhdGEsXHJcbiAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTtcclxuICAgICAgICB0aGlzLnJlZHJhdygpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxmOiBIVE1MRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnByb3BvcnRpb24gPSBzZWxmLmNsaWVudEhlaWdodCAvIHNlbGYuY2xpZW50V2lkdGg7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2hhcnRlcnJvcih7IGlkOiBDaGFyRXJyb3JDb2RlLmxvYWRpbmcsIG1lc3NhZ2U6ICdDb3VsZCBub3QgbG9hZCcgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkcmF3KCk6IHZvaWQge1xyXG4gICAgdGhpcy53cmFwcGVyLmRyYXcodGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5jbS1tYXAtY29udGVudCcpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGFydFJlYWR5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5uZXJMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhcnRSZWFkeS5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhcnRlcnJvcihlcnJvcjogQ2hhcnRFcnJvckV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYXJ0RXJyb3IuZW1pdChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTWFwU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXZlbnQ6IENoYXJ0U2VsZWN0RXZlbnQgPSB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIGNvdW50cnk6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnlbXSA9IHRoaXMud3JhcHBlci52aXN1YWxpemF0aW9uLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB7IHJvdzogdGFibGVSb3cgfTogeyByb3c6IG51bWJlciB9ID0gc2VsZWN0aW9uWzBdO1xyXG4gICAgICBjb25zdCBkYXRhVGFibGUgPSB0aGlzLndyYXBwZXIuZ2V0RGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICBldmVudC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGV2ZW50LnZhbHVlID0gZGF0YVRhYmxlLmdldFZhbHVlKHRhYmxlUm93LCAxKTtcclxuICAgICAgZXZlbnQuY291bnRyeSA9IGRhdGFUYWJsZS5nZXRWYWx1ZSh0YWJsZVJvdywgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q291bnRyeShldmVudC5jb3VudHJ5KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdENvdW50cnkobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFydFNlbGVjdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJDaGFydFdyYXBwZXJFdmVudHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGFkZExpc3RlbmVyIH0gPSBnb29nbGUudmlzdWFsaXphdGlvbi5ldmVudHM7XHJcbiAgICBhZGRMaXN0ZW5lcih0aGlzLndyYXBwZXIsICdyZWFkeScsIHRoaXMub25DaGFydFJlYWR5LmJpbmQodGhpcykpO1xyXG4gICAgYWRkTGlzdGVuZXIodGhpcy53cmFwcGVyLCAnZXJyb3InLCB0aGlzLm9uQ2hhcnRlcnJvci5iaW5kKHRoaXMpKTtcclxuICAgIGFkZExpc3RlbmVyKHRoaXMud3JhcHBlciwgJ3NlbGVjdCcsIHRoaXMub25NYXBTZWxlY3QuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGNvbnN0IHsgcmVtb3ZlTGlzdGVuZXIgfSA9IGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cztcclxuICAgIHJlbW92ZUxpc3RlbmVyKCdyZWFkeScpO1xyXG4gICAgcmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJyk7XHJcbiAgICByZW1vdmVMaXN0ZW5lcignc2VsZWN0Jyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/dist/fesm2015/countries-map.js b/dist/fesm2015/countries-map.js index a77a8e3..13a5a54 100644 --- a/dist/fesm2015/countries-map.js +++ b/dist/fesm2015/countries-map.js @@ -179,8 +179,10 @@ let CountriesMapComponent = class CountriesMapComponent { this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content')); } onChartReady() { - this.innerLoading = false; - this.chartReady.emit(); + if (this.innerLoading) { + this.innerLoading = false; + this.chartReady.emit(); + } } onCharterror(error) { this.chartError.emit(error); diff --git a/dist/fesm2015/countries-map.js.map b/dist/fesm2015/countries-map.js.map index af32532..71a6498 100644 --- a/dist/fesm2015/countries-map.js.map +++ b/dist/fesm2015/countries-map.js.map @@ -1 +1 @@ -{"version":3,"file":"countries-map.js","sources":["ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts","ng://countries-map/countries-map.ts"],"sourcesContent":["declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {GoogleChartsLoaderService as ɵa} from './app/modules/countries-map/google-charts-loader.service';"],"names":["countriesEN"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"countries-map.js","sources":["ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts","ng://countries-map/countries-map.ts"],"sourcesContent":["declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n if (this.innerLoading) {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {GoogleChartsLoaderService as ɵa} from './app/modules/countries-map/google-charts-loader.service';"],"names":["countriesEN"],"mappings":"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"} \ No newline at end of file diff --git a/dist/fesm5/countries-map.js b/dist/fesm5/countries-map.js index 52e88cc..deff74b 100644 --- a/dist/fesm5/countries-map.js +++ b/dist/fesm5/countries-map.js @@ -193,8 +193,10 @@ var CountriesMapComponent = /** @class */ (function () { this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content')); }; CountriesMapComponent.prototype.onChartReady = function () { - this.innerLoading = false; - this.chartReady.emit(); + if (this.innerLoading) { + this.innerLoading = false; + this.chartReady.emit(); + } }; CountriesMapComponent.prototype.onCharterror = function (error) { this.chartError.emit(error); diff --git a/dist/fesm5/countries-map.js.map b/dist/fesm5/countries-map.js.map index 865b7bf..009ab68 100644 --- a/dist/fesm5/countries-map.js.map +++ b/dist/fesm5/countries-map.js.map @@ -1 +1 @@ -{"version":3,"file":"countries-map.js","sources":["ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts","ng://countries-map/countries-map.ts"],"sourcesContent":["declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {GoogleChartsLoaderService as ɵa} from './app/modules/countries-map/google-charts-loader.service';"],"names":["countriesEN"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"countries-map.js","sources":["ng://countries-map/app/modules/countries-map/google-charts-loader.service.ts","ng://countries-map/app/modules/countries-map/chart-events.interface.ts","ng://countries-map/app/modules/countries-map/countries-map.component.ts","ng://countries-map/app/modules/countries-map/countries-map.module.ts","ng://countries-map/countries-map.ts"],"sourcesContent":["declare var google: { charts: { load: (version: string, initializer: any) => void } };\r\n\r\nimport { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GoogleChartsLoaderService {\r\n\r\n private readonly googleScriptLoadingNotifier = new EventEmitter();\r\n private googleScriptIsLoading = false;\r\n private readonly localeId: string;\r\n\r\n constructor(@Inject(LOCALE_ID) localeId: string) {\r\n this.localeId = localeId;\r\n }\r\n\r\n load(apiKey?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.loadGoogleChartsScript().then(() => {\r\n const initializer: any = {\r\n packages: ['geochart'],\r\n language: this.localeId,\r\n callback: resolve\r\n };\r\n if (apiKey) {\r\n initializer.mapsApiKey = apiKey;\r\n }\r\n google.charts.load('45.2', initializer);\r\n }).catch(err => reject());\r\n });\r\n }\r\n\r\n private loadGoogleChartsScript(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (typeof google !== 'undefined' && google.charts) {\r\n resolve();\r\n } else if (!this.googleScriptIsLoading) {\r\n\r\n this.googleScriptIsLoading = true;\r\n\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.gstatic.com/charts/loader.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(true);\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n this.googleScriptIsLoading = false;\r\n this.googleScriptLoadingNotifier.emit(false);\r\n reject();\r\n };\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n\r\n } else {\r\n this.googleScriptLoadingNotifier.subscribe((loaded: boolean) => {\r\n if (loaded) {\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n}\r\n","export interface ChartSelectEvent {\n selected: boolean;\n value: number | null;\n country: string;\n}\n\nexport enum CharErrorCode {loading = 'loading'}\n\nexport interface ChartErrorEvent {\n id: string | CharErrorCode;\n message: string;\n detailedMessage?: string;\n options?: Object;\n}\n","declare var google: { visualization: { ChartWrapper, events: {\r\n addListener: (wrapper, event: string, callback: (args?: any) => void) => void, removeListener: (event: string) => void\r\n} } };\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n HostListener,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\r\nimport { ChartSelectEvent, ChartErrorEvent, CharErrorCode } from './chart-events.interface';\r\nimport { CountriesData, SelectionExtra, Selection, ValidCountryData } from './data-types.interface';\r\nimport { en as countriesEN } from '@jagomf/countrieslist';\r\n\r\nconst valueHolder = 'value';\r\nconst countryName = (countryCode: string): string => {\r\n return countriesEN[countryCode];\r\n};\r\n\r\n@Component({\r\n selector: 'countries-map',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './countries-map.component.html',\r\n styleUrls: ['./countries-map.component.css']\r\n})\r\nexport class CountriesMapComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() data: CountriesData;\r\n @Input() apiKey: string;\r\n @Input() options: any;\r\n @Input() countryLabel = 'Country';\r\n @Input() valueLabel = 'Value';\r\n @Input() showCaption = true;\r\n @Input() captionBelow = true;\r\n @Input() autoResize = false;\r\n @Input() minValue = 0;\r\n @Input() maxValue: number;\r\n @Input() minColor = 'white';\r\n @Input() maxColor = 'red';\r\n @Input() backgroundColor = 'white';\r\n @Input() noDataColor = '#CFCFCF';\r\n @Input() exceptionColor = '#FFEE58';\r\n\r\n @Output() private readonly chartReady = new EventEmitter();\r\n @Output() private readonly chartError = new EventEmitter();\r\n @Output() private readonly chartSelect = new EventEmitter();\r\n\r\n @ViewChild('mapContent', { static: false }) private readonly mapContent: ElementRef;\r\n\r\n private proportion: number;\r\n private googleData: ValidCountryData[][];\r\n private wrapper: any;\r\n\r\n selection: Selection | null = null;\r\n\r\n private innerLoading = true;\r\n get loading() {\r\n return this.innerLoading;\r\n }\r\n\r\n get selectionValue() {\r\n return this.data[this.selection.countryId].value;\r\n }\r\n\r\n constructor(\r\n private readonly cdRef: ChangeDetectorRef,\r\n private readonly el: ElementRef,\r\n private readonly loaderService: GoogleChartsLoaderService\r\n ) {\r\n this.el = el;\r\n this.loaderService = loaderService;\r\n }\r\n\r\n @HostListener('window:deviceorientation')\r\n @HostListener('window:resize')\r\n screenSizeChanged(): void {\r\n if (!this.loading && this.autoResize) {\r\n const map: HTMLElement = this.mapContent.nativeElement;\r\n map.style.setProperty('height', `${map.clientWidth * this.proportion}px`);\r\n this.redraw();\r\n }\r\n }\r\n\r\n private getExtraSelected(country: string): SelectionExtra[] | null {\r\n const { extra } = this.data[country];\r\n return extra && Object.keys(extra).map(key => ({ key, val: extra[key] }));\r\n }\r\n\r\n private selectCountry(country?: string): void {\r\n this.selection = country ? {\r\n countryId: country,\r\n countryName: countryName(country),\r\n extra: this.getExtraSelected(country)\r\n } : null;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Convert a table (object) formatted as\r\n * `{ GB: { value:123, ...otherdata }, ES: { value:456, ...whatever } }`\r\n * to an array for Google Charts formatted as\r\n * `[ ['Country', 'Value'], ['GB', 123], ['ES', 456] ]`\r\n * and save to this.processedData\r\n */\r\n private processInputData(): void {\r\n this.googleData = Object.entries(this.data).reduce((acc, [key, val]) => {\r\n const rawValContent = val[valueHolder];\r\n acc.push([key, rawValContent === null ? null : rawValContent ? +rawValContent.toString() : 0]);\r\n return acc;\r\n }, [['Country', 'Value']] as ValidCountryData[][]);\r\n }\r\n\r\n ngOnChanges({ data }: { data: any }): void {\r\n if (data) {\r\n\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n const defaultOptions = {\r\n colorAxis: {\r\n colors: [this.minColor, this.maxColor],\r\n minValue: Number.isInteger(this.minValue) ? this.minValue : undefined,\r\n maxValue: Number.isInteger(this.maxValue) ? this.maxValue : undefined\r\n },\r\n datalessRegionColor: this.noDataColor,\r\n backgroundColor: this.backgroundColor,\r\n defaultColor: this.exceptionColor,\r\n legend: this.showCaption,\r\n tooltip: { trigger: 'none' }\r\n };\r\n\r\n this.loaderService.load(this.apiKey).then(() => {\r\n this.processInputData();\r\n\r\n this.wrapper = new google.visualization.ChartWrapper({\r\n chartType: 'GeoChart',\r\n dataTable: this.googleData,\r\n options: Object.assign(defaultOptions, this.options)\r\n });\r\n\r\n this.registerChartWrapperEvents();\r\n this.redraw();\r\n\r\n const self: HTMLElement = this.el.nativeElement;\r\n this.proportion = self.clientHeight / self.clientWidth;\r\n }, () => {\r\n this.onCharterror({ id: CharErrorCode.loading, message: 'Could not load' });\r\n });\r\n }\r\n }\r\n\r\n redraw(): void {\r\n this.wrapper.draw(this.el.nativeElement.querySelector('div.cm-map-content'));\r\n }\r\n\r\n private onChartReady(): void {\r\n if (this.innerLoading) {\r\n this.innerLoading = false;\r\n this.chartReady.emit();\r\n }\r\n }\r\n\r\n private onCharterror(error: ChartErrorEvent): void {\r\n this.chartError.emit(error);\r\n }\r\n\r\n private onMapSelect(): void {\r\n const event: ChartSelectEvent = {\r\n selected: false,\r\n value: null,\r\n country: null\r\n };\r\n\r\n const selection: any[] = this.wrapper.visualization.getSelection();\r\n\r\n if (selection.length > 0) {\r\n const { row: tableRow }: { row: number } = selection[0];\r\n const dataTable = this.wrapper.getDataTable();\r\n\r\n event.selected = true;\r\n event.value = dataTable.getValue(tableRow, 1);\r\n event.country = dataTable.getValue(tableRow, 0);\r\n this.selectCountry(event.country);\r\n\r\n } else {\r\n this.selectCountry(null);\r\n }\r\n\r\n this.chartSelect.emit(event);\r\n }\r\n\r\n private registerChartWrapperEvents(): void {\r\n const { addListener } = google.visualization.events;\r\n addListener(this.wrapper, 'ready', this.onChartReady.bind(this));\r\n addListener(this.wrapper, 'error', this.onCharterror.bind(this));\r\n addListener(this.wrapper, 'select', this.onMapSelect.bind(this));\r\n }\r\n\r\n ngOnDestroy() {\r\n const { removeListener } = google.visualization.events;\r\n removeListener('ready');\r\n removeListener('error');\r\n removeListener('select');\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CountriesMapComponent } from './countries-map.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [CountriesMapComponent],\n entryComponents: [CountriesMapComponent],\n providers: [GoogleChartsLoaderService],\n exports: [\n CountriesMapComponent\n ]\n})\nexport class CountriesMapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {GoogleChartsLoaderService as ɵa} from './app/modules/countries-map/google-charts-loader.service';"],"names":["countriesEN"],"mappings":"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"} \ No newline at end of file diff --git a/dist/package.json b/dist/package.json index f67a494..0917a2d 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,6 +1,6 @@ { "name": "countries-map", - "version": "3.1.0", + "version": "3.1.1", "description": "World countries datamaps component for Angular, based on Google GeoCharts", "license": "MIT", "author": "Jago MF ", diff --git a/package.json b/package.json index b7d5d46..97142a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "countries-map", - "version": "3.1.0", + "version": "3.1.1", "description": "World countries datamaps component for Angular, based on Google GeoCharts", "license": "MIT", "author": "Jago MF ", diff --git a/src/app/modules/countries-map/countries-map.component.ts b/src/app/modules/countries-map/countries-map.component.ts index 97f677c..a8d3de0 100644 --- a/src/app/modules/countries-map/countries-map.component.ts +++ b/src/app/modules/countries-map/countries-map.component.ts @@ -163,8 +163,10 @@ export class CountriesMapComponent implements OnChanges, OnDestroy { } private onChartReady(): void { - this.innerLoading = false; - this.chartReady.emit(); + if (this.innerLoading) { + this.innerLoading = false; + this.chartReady.emit(); + } } private onCharterror(error: ChartErrorEvent): void {