UNPKG

angular-google-charts

Version:

A wrapper for the Google Charts library written with Angular

112 lines 16 kB
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core'; import { ReplaySubject } from 'rxjs'; import { generateRandomId } from '../../helpers/id.helper'; import { ScriptLoaderService } from '../../services/script-loader.service'; import { FilterType } from '../../types/control-type'; import * as i0 from "@angular/core"; import * as i1 from "../../services/script-loader.service"; export class ControlWrapperComponent { constructor(loaderService) { this.loaderService = loaderService; /** * Emits when an error occurs when attempting to render the control. */ this.error = new EventEmitter(); /** * The control is ready to accept user interaction and for external method calls. * * Alternatively, you can listen for a ready event on the dashboard holding the control * and call control methods only after the event was fired. */ this.ready = new EventEmitter(); /** * Emits when the user interacts with the control, affecting its state. * For example, a `stateChange` event will be emitted whenever you move the thumbs of a range slider control. * * To retrieve an updated control state after the event fired, call `ControlWrapper.getState()`. */ this.stateChange = new EventEmitter(); /** * A generated id assigned to this components DOM element. */ this.id = generateRandomId(); this.wrapperReadySubject = new ReplaySubject(1); } /** * Emits after the `ControlWrapper` was created. */ get wrapperReady$() { return this.wrapperReadySubject.asObservable(); } get controlWrapper() { if (!this._controlWrapper) { throw new Error(`Cannot access the control wrapper before it being initialized.`); } return this._controlWrapper; } ngOnInit() { this.loaderService.loadChartPackages('controls').subscribe(() => { this.createControlWrapper(); }); } ngOnChanges(changes) { if (!this._controlWrapper) { return; } if (changes.type) { this._controlWrapper.setControlType(this.type); } if (changes.options) { this._controlWrapper.setOptions(this.options || {}); } if (changes.state) { this._controlWrapper.setState(this.state || {}); } } createControlWrapper() { this._controlWrapper = new google.visualization.ControlWrapper({ containerId: this.id, controlType: this.type, state: this.state, options: this.options }); this.addEventListeners(); this.wrapperReadySubject.next(this._controlWrapper); } addEventListeners() { google.visualization.events.removeAllListeners(this._controlWrapper); google.visualization.events.addListener(this._controlWrapper, 'ready', (event) => this.ready.emit(event)); google.visualization.events.addListener(this._controlWrapper, 'error', (event) => this.error.emit(event)); google.visualization.events.addListener(this._controlWrapper, 'statechange', (event) => this.stateChange.emit(event)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ControlWrapperComponent, deps: [{ token: i1.ScriptLoaderService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ControlWrapperComponent, selector: "control-wrapper", inputs: { for: "for", type: "type", options: "options", state: "state" }, outputs: { error: "error", ready: "ready", stateChange: "stateChange" }, host: { properties: { "id": "this.id" }, classAttribute: "control-wrapper" }, exportAs: ["controlWrapper"], usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ControlWrapperComponent, decorators: [{ type: Component, args: [{ selector: 'control-wrapper', template: '', host: { class: 'control-wrapper' }, exportAs: 'controlWrapper', changeDetection: ChangeDetectionStrategy.OnPush }] }], ctorParameters: function () { return [{ type: i1.ScriptLoaderService }]; }, propDecorators: { for: [{ type: Input }], type: [{ type: Input }], options: [{ type: Input }], state: [{ type: Input }], error: [{ type: Output }], ready: [{ type: Output }], stateChange: [{ type: Output }], id: [{ type: HostBinding, args: ['id'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZ29vZ2xlLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvY29udHJvbC13cmFwcGVyL2NvbnRyb2wtd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFXdEQsTUFBTSxPQUFPLHVCQUF1QjtJQW1GbEMsWUFBb0IsYUFBa0M7UUFBbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBakN0RDs7V0FFRztRQUVJLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUVuRDs7Ozs7V0FLRztRQUVJLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUVuRDs7Ozs7V0FLRztRQUVJLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVqRDs7V0FFRztRQUVhLE9BQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBR2hDLHdCQUFtQixHQUFHLElBQUksYUFBYSxDQUFzQyxDQUFDLENBQUMsQ0FBQztJQUUvQixDQUFDO0lBRTFEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzlELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixPQUFPO1NBQ1I7UUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1lBQzdELFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVyRSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FDaEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQ3ZCLENBQUM7UUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FDaEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQ3ZCLENBQUM7UUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUM5RixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDN0IsQ0FBQztJQUNKLENBQUM7K0dBcEpVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDJVQUx4QixFQUFFOzs0RkFLRCx1QkFBdUI7a0JBUG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFLEVBQUU7b0JBQ1osSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO29CQUNsQyxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7MEdBTVEsR0FBRztzQkFEVCxLQUFLO2dCQWNDLElBQUk7c0JBRFYsS0FBSztnQkFjQyxPQUFPO3NCQURiLEtBQUs7Z0JBa0JDLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxLQUFLO3NCQURYLE1BQU07Z0JBVUEsS0FBSztzQkFEWCxNQUFNO2dCQVVBLFdBQVc7c0JBRGpCLE1BQU07Z0JBT1MsRUFBRTtzQkFEakIsV0FBVzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tSWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2lkLmhlbHBlcic7XG5pbXBvcnQgeyBTY3JpcHRMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9jb250cm9sLXR5cGUnO1xuaW1wb3J0IHsgQ2hhcnRFcnJvckV2ZW50LCBDaGFydFJlYWR5RXZlbnQgfSBmcm9tICcuLi8uLi90eXBlcy9ldmVudHMnO1xuaW1wb3J0IHsgQ2hhcnRCYXNlIH0gZnJvbSAnLi4vY2hhcnQtYmFzZS9jaGFydC1iYXNlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvbnRyb2wtd3JhcHBlcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgaG9zdDogeyBjbGFzczogJ2NvbnRyb2wtd3JhcHBlcicgfSxcbiAgZXhwb3J0QXM6ICdjb250cm9sV3JhcHBlcicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENvbnRyb2xXcmFwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQ2hhcnRzIGNvbnRyb2xsZWQgYnkgdGhpcyBjb250cm9sIHdyYXBwZXIuIENhbiBiZSBhIHNpbmdsZSBjaGFydCBvciBhbiBhcnJheSBvZiBjaGFydHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZm9yITogQ2hhcnRCYXNlIHwgQ2hhcnRCYXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjb250cm9sLlxuICAgKiBUaGUgYGdvb2dsZS52aXN1YWxpemF0aW9uYCBwYWNrYWdlIG5hbWUgY2FuIGJlIG9taXR0ZWQgZm9yIEdvb2dsZSBjb250cm9scy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBgaHRtbFxuICAgKiA8Y29udHJvbC13cmFwcGVyIHR5cGU9XCJDYXRlZ29yeUZpbHRlclwiPjwvY29udHJvbC13cmFwcGVyPlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0eXBlITogRmlsdGVyVHlwZTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG9wdGlvbnMgZm9yIHRoZSBjb250cm9sLlxuICAgKiBZb3UgY2FuIHVzZSBlaXRoZXIgSmF2YVNjcmlwdCBsaXRlcmFsIG5vdGF0aW9uLCBvciBwcm92aWRlIGEgaGFuZGxlIHRvIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPGNvbnRyb2wtd3JhcHBlciBbb3B0aW9uc109XCJ7J2ZpbHRlckNvbHVtbkxhYmVsJzogJ0FnZScsICdtaW5WYWx1ZSc6IDEwLCAnbWF4VmFsdWUnOiA4MH1cIj48L2NvbnRyb2wtd3JhcHBlcj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3B0aW9ucz86IG9iamVjdDtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb250cm9sLlxuICAgKiBUaGUgc3RhdGUgY29sbGVjdHMgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCB0aGUgdXNlciBvcGVyYXRpbmcgdGhlIGNvbnRyb2wgY2FuIGFmZmVjdC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGEgcmFuZ2Ugc2xpZGVyIHN0YXRlIGNhbiBiZSBkZXNjcmliZWQgaW4gdGVybSBvZiB0aGUgcG9zaXRpb25zIHRoYXQgdGhlIGxvdyBhbmQgaGlnaCB0aHVtYlxuICAgKiBvZiB0aGUgc2xpZGVyIG9jY3VweS5cbiAgICogWW91IGNhbiB1c2UgZWl0aGVyIEphdmFzY3JpcHQgbGl0ZXJhbCBub3RhdGlvbiwgb3IgcHJvdmlkZSBhIGhhbmRsZSB0byB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgYGBgaHRtbFxuICAgKiA8Y29udHJvbC13cmFwcGVyIFtzdGF0ZV09XCJ7J2xvd1ZhbHVlJzogMjAsICdoaWdoVmFsdWUnOiA1MH1cIj48L2NvbnRyb2wtd3JhcHBlcj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RhdGU/OiBvYmplY3Q7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byByZW5kZXIgdGhlIGNvbnRyb2wuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFydEVycm9yRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250cm9sIGlzIHJlYWR5IHRvIGFjY2VwdCB1c2VyIGludGVyYWN0aW9uIGFuZCBmb3IgZXh0ZXJuYWwgbWV0aG9kIGNhbGxzLlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGxpc3RlbiBmb3IgYSByZWFkeSBldmVudCBvbiB0aGUgZGFzaGJvYXJkIGhvbGRpbmcgdGhlIGNvbnRyb2xcbiAgICogYW5kIGNhbGwgY29udHJvbCBtZXRob2RzIG9ubHkgYWZ0ZXIgdGhlIGV2ZW50IHdhcyBmaXJlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPENoYXJ0UmVhZHlFdmVudD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCwgYWZmZWN0aW5nIGl0cyBzdGF0ZS5cbiAgICogRm9yIGV4YW1wbGUsIGEgYHN0YXRlQ2hhbmdlYCBldmVudCB3aWxsIGJlIGVtaXR0ZWQgd2hlbmV2ZXIgeW91IG1vdmUgdGhlIHRodW1icyBvZiBhIHJhbmdlIHNsaWRlciBjb250cm9sLlxuICAgKlxuICAgKiBUbyByZXRyaWV2ZSBhbiB1cGRhdGVkIGNvbnRyb2wgc3RhdGUgYWZ0ZXIgdGhlIGV2ZW50IGZpcmVkLCBjYWxsIGBDb250cm9sV3JhcHBlci5nZXRTdGF0ZSgpYC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgLyoqXG4gICAqIEEgZ2VuZXJhdGVkIGlkIGFzc2lnbmVkIHRvIHRoaXMgY29tcG9uZW50cyBET00gZWxlbWVudC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgcmVhZG9ubHkgaWQgPSBnZW5lcmF0ZVJhbmRvbUlkKCk7XG5cbiAgcHJpdmF0ZSBfY29udHJvbFdyYXBwZXI/OiBnb29nbGUudmlzdWFsaXphdGlvbi5Db250cm9sV3JhcHBlcjtcbiAgcHJpdmF0ZSB3cmFwcGVyUmVhZHlTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Z29vZ2xlLnZpc3VhbGl6YXRpb24uQ29udHJvbFdyYXBwZXI+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9hZGVyU2VydmljZTogU2NyaXB0TG9hZGVyU2VydmljZSkge31cblxuICAvKipcbiAgICogRW1pdHMgYWZ0ZXIgdGhlIGBDb250cm9sV3JhcHBlcmAgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdyYXBwZXJSZWFkeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlclJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udHJvbFdyYXBwZXIoKTogZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29udHJvbFdyYXBwZXIge1xuICAgIGlmICghdGhpcy5fY29udHJvbFdyYXBwZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFjY2VzcyB0aGUgY29udHJvbCB3cmFwcGVyIGJlZm9yZSBpdCBiZWluZyBpbml0aWFsaXplZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29udHJvbFdyYXBwZXI7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmxvYWRDaGFydFBhY2thZ2VzKCdjb250cm9scycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNyZWF0ZUNvbnRyb2xXcmFwcGVyKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udHJvbFdyYXBwZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy50eXBlKSB7XG4gICAgICB0aGlzLl9jb250cm9sV3JhcHBlci5zZXRDb250cm9sVHlwZSh0aGlzLnR5cGUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2xXcmFwcGVyLnNldE9wdGlvbnModGhpcy5vcHRpb25zIHx8IHt9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5zdGF0ZSkge1xuICAgICAgdGhpcy5fY29udHJvbFdyYXBwZXIuc2V0U3RhdGUodGhpcy5zdGF0ZSB8fCB7fSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250cm9sV3JhcHBlcigpIHtcbiAgICB0aGlzLl9jb250cm9sV3JhcHBlciA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db250cm9sV3JhcHBlcih7XG4gICAgICBjb250YWluZXJJZDogdGhpcy5pZCxcbiAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLnR5cGUsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9uc1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMud3JhcHBlclJlYWR5U3ViamVjdC5uZXh0KHRoaXMuX2NvbnRyb2xXcmFwcGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgZ29vZ2xlLnZpc3VhbGl6YXRpb24uZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycyh0aGlzLl9jb250cm9sV3JhcHBlcik7XG5cbiAgICBnb29nbGUudmlzdWFsaXphdGlvbi5ldmVudHMuYWRkTGlzdGVuZXIodGhpcy5fY29udHJvbFdyYXBwZXIsICdyZWFkeScsIChldmVudDogQ2hhcnRSZWFkeUV2ZW50KSA9PlxuICAgICAgdGhpcy5yZWFkeS5lbWl0KGV2ZW50KVxuICAgICk7XG4gICAgZ29vZ2xlLnZpc3VhbGl6YXRpb24uZXZlbnRzLmFkZExpc3RlbmVyKHRoaXMuX2NvbnRyb2xXcmFwcGVyLCAnZXJyb3InLCAoZXZlbnQ6IENoYXJ0RXJyb3JFdmVudCkgPT5cbiAgICAgIHRoaXMuZXJyb3IuZW1pdChldmVudClcbiAgICApO1xuICAgIGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcih0aGlzLl9jb250cm9sV3JhcHBlciwgJ3N0YXRlY2hhbmdlJywgKGV2ZW50OiB1bmtub3duKSA9PlxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KGV2ZW50KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==