ng2-tree
Version:
angular2 component for visualizing data that can be naturally represented as a tree
137 lines • 18.6 kB
JavaScript
import { Component, ContentChild, EventEmitter, Inject, Input, Output, TemplateRef, ViewChild } from '@angular/core';
import { TreeService } from './tree.service';
import { Tree } from './tree';
import * as i0 from "@angular/core";
import * as i1 from "./tree-internal.component";
import * as i2 from "./tree.service";
export class TreeComponent {
treeService;
static EMPTY_TREE = new Tree({ value: '' });
/* tslint:disable:no-input-rename */
treeModel;
/* tslint:enable:no-input-rename */
settings;
nodeCreated = new EventEmitter();
nodeRemoved = new EventEmitter();
nodeRenamed = new EventEmitter();
nodeSelected = new EventEmitter();
nodeUnselected = new EventEmitter();
nodeMoved = new EventEmitter();
nodeExpanded = new EventEmitter();
nodeCollapsed = new EventEmitter();
loadNextLevel = new EventEmitter();
nodeChecked = new EventEmitter();
nodeUnchecked = new EventEmitter();
menuItemSelected = new EventEmitter();
tree;
rootComponent;
template;
subscriptions = [];
constructor(treeService) {
this.treeService = treeService;
}
ngOnChanges(changes) {
if (!this.treeModel) {
this.tree = TreeComponent.EMPTY_TREE;
}
else {
this.tree = new Tree(this.treeModel);
}
}
ngOnInit() {
this.subscriptions.push(this.treeService.nodeRemoved$.subscribe((e) => {
this.nodeRemoved.emit(e);
}));
this.subscriptions.push(this.treeService.nodeRenamed$.subscribe((e) => {
this.nodeRenamed.emit(e);
}));
this.subscriptions.push(this.treeService.nodeCreated$.subscribe((e) => {
this.nodeCreated.emit(e);
}));
this.subscriptions.push(this.treeService.nodeSelected$.subscribe((e) => {
this.nodeSelected.emit(e);
}));
this.subscriptions.push(this.treeService.nodeUnselected$.subscribe((e) => {
this.nodeUnselected.emit(e);
}));
this.subscriptions.push(this.treeService.nodeMoved$.subscribe((e) => {
this.nodeMoved.emit(e);
}));
this.subscriptions.push(this.treeService.nodeExpanded$.subscribe((e) => {
this.nodeExpanded.emit(e);
}));
this.subscriptions.push(this.treeService.nodeCollapsed$.subscribe((e) => {
this.nodeCollapsed.emit(e);
}));
this.subscriptions.push(this.treeService.menuItemSelected$.subscribe((e) => {
this.menuItemSelected.emit(e);
}));
this.subscriptions.push(this.treeService.loadNextLevel$.subscribe((e) => {
this.loadNextLevel.emit(e);
}));
this.subscriptions.push(this.treeService.nodeChecked$.subscribe((e) => {
this.nodeChecked.emit(e);
}));
this.subscriptions.push(this.treeService.nodeUnchecked$.subscribe((e) => {
this.nodeUnchecked.emit(e);
}));
}
getController() {
return this.rootComponent.controller;
}
getControllerByNodeId(id) {
return this.treeService.getController(id);
}
ngOnDestroy() {
this.subscriptions.forEach(sub => sub && sub.unsubscribe());
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeComponent, deps: [{ token: TreeService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeComponent, selector: "tree", inputs: { treeModel: ["tree", "treeModel"], settings: "settings" }, outputs: { nodeCreated: "nodeCreated", nodeRemoved: "nodeRemoved", nodeRenamed: "nodeRenamed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", nodeMoved: "nodeMoved", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", loadNextLevel: "loadNextLevel", nodeChecked: "nodeChecked", nodeUnchecked: "nodeUnchecked", menuItemSelected: "menuItemSelected" }, providers: [TreeService], queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "rootComponent", first: true, predicate: ["rootComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `<tree-internal #rootComponent [tree]="tree" [settings]="settings" [template]="template"></tree-internal>`, isInline: true, dependencies: [{ kind: "component", type: i1.TreeInternalComponent, selector: "tree-internal", inputs: ["tree", "settings", "template"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeComponent, decorators: [{
type: Component,
args: [{
selector: 'tree',
template: `<tree-internal #rootComponent [tree]="tree" [settings]="settings" [template]="template"></tree-internal>`,
providers: [TreeService]
}]
}], ctorParameters: function () { return [{ type: i2.TreeService, decorators: [{
type: Inject,
args: [TreeService]
}] }]; }, propDecorators: { treeModel: [{
type: Input,
args: ['tree']
}], settings: [{
type: Input
}], nodeCreated: [{
type: Output
}], nodeRemoved: [{
type: Output
}], nodeRenamed: [{
type: Output
}], nodeSelected: [{
type: Output
}], nodeUnselected: [{
type: Output
}], nodeMoved: [{
type: Output
}], nodeExpanded: [{
type: Output
}], nodeCollapsed: [{
type: Output
}], loadNextLevel: [{
type: Output
}], nodeChecked: [{
type: Output
}], nodeUnchecked: [{
type: Output
}], menuItemSelected: [{
type: Output
}], rootComponent: [{
type: ViewChild,
args: ['rootComponent', { static: false }]
}], template: [{
type: ContentChild,
args: [TemplateRef, { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7QUFTOUIsTUFBTSxPQUFPLGFBQWE7SUEyQ3dCO0lBMUN4QyxNQUFNLENBQUMsVUFBVSxHQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFMUQsb0NBQW9DO0lBQ2QsU0FBUyxDQUFzQjtJQUNyRCxtQ0FBbUM7SUFFbkIsUUFBUSxDQUE0QjtJQUVuQyxXQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFcEQsV0FBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXBELFdBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVwRCxZQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFckQsY0FBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXZELFNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVsRCxZQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFckQsYUFBYSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXRELGFBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUV0RCxXQUFXLEdBQW1DLElBQUksWUFBWSxFQUFFLENBQUM7SUFFakUsYUFBYSxHQUFxQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXJFLGdC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QUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO3dHQXpJVSxhQUFhLGtCQTJDRyxXQUFXOzRGQTNDM0IsYUFBYSw0ZEFGYixDQUFDLFdBQVcsQ0FBQyxnRUF3Q1YsV0FBVyxxTEF6Q2YsMEdBQTBHOzs0RkFHekcsYUFBYTtrQkFMekIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsTUFBTTtvQkFDaEIsUUFBUSxFQUFFLDBHQUEwRztvQkFDcEgsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN6Qjs7MEJBNENxQixNQUFNOzJCQUFDLFdBQVc7NENBdkNoQixTQUFTO3NCQUE5QixLQUFLO3VCQUFDLE1BQU07Z0JBR0csUUFBUTtzQkFBdkIsS0FBSztnQkFFVyxXQUFXO3NCQUEzQixNQUFNO2dCQUVVLFdBQVc7c0JBQTNCLE1BQU07Z0JBRVUsV0FBVztzQkFBM0IsTUFBTTtnQkFFVSxZQUFZO3NCQUE1QixNQUFNO2dCQUVVLGNBQWM7c0JBQTlCLE1BQU07Z0JBRVUsU0FBUztzQkFBekIsTUFBTTtnQkFFVSxZQUFZO3NCQUE1QixNQUFNO2dCQUVVLGFBQWE7c0JBQTdCLE1BQU07Z0JBRVUsYUFBYTtzQkFBN0IsTUFBTTtnQkFFVSxXQUFXO3NCQUEzQixNQUFNO2dCQUVVLGFBQWE7c0JBQTdCLE1BQU07Z0JBRVUsZ0JBQWdCO3NCQUFoQyxNQUFNO2dCQUtBLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJdEMsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIFRyZWVUeXBlcyBmcm9tICcuL3RyZWUudHlwZXMnO1xuXG5pbXBvcnQgeyBNZW51SXRlbVNlbGVjdGVkRXZlbnQsIE5vZGVDaGVja2VkRXZlbnQsIE5vZGVFdmVudCwgTm9kZVVuY2hlY2tlZEV2ZW50IH0gZnJvbSAnLi90cmVlLmV2ZW50cyc7XG5cbmltcG9ydCB7IFRyZWUgfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgVHJlZUNvbnRyb2xsZXIgfSBmcm9tICcuL3RyZWUtY29udHJvbGxlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndHJlZScsXG4gIHRlbXBsYXRlOiBgPHRyZWUtaW50ZXJuYWwgI3Jvb3RDb21wb25lbnQgW3RyZWVdPVwidHJlZVwiIFtzZXR0aW5nc109XCJzZXR0aW5nc1wiIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiPjwvdHJlZS1pbnRlcm5hbD5gLFxuICBwcm92aWRlcnM6IFtUcmVlU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyBFTVBUWV9UUkVFOiBUcmVlID0gbmV3IFRyZWUoeyB2YWx1ZTogJycgfSk7XG5cbiAgLyogdHNsaW50OmRpc2FibGU6bm8taW5wdXQtcmVuYW1lICovXG4gIEBJbnB1dCgndHJlZScpIHB1YmxpYyB0cmVlTW9kZWw6IFRyZWVUeXBlcy5UcmVlTW9kZWw7XG4gIC8qIHRzbGludDplbmFibGU6bm8taW5wdXQtcmVuYW1lICovXG5cbiAgQElucHV0KCkgcHVibGljIHNldHRpbmdzOiBUcmVlVHlwZXMuTmcyVHJlZVNldHRpbmdzO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgbm9kZUNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgbm9kZVJlbW92ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgbm9kZVJlbmFtZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgbm9kZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHVibGljIG5vZGVVbnNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHVibGljIG5vZGVNb3ZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBub2RlRXhwYW5kZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgbm9kZUNvbGxhcHNlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBsb2FkTmV4dExldmVsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHVibGljIG5vZGVDaGVja2VkOiBFdmVudEVtaXR0ZXI8Tm9kZUNoZWNrZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBub2RlVW5jaGVja2VkOiBFdmVudEVtaXR0ZXI8Tm9kZVVuY2hlY2tlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHVibGljIG1lbnVJdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyB0cmVlOiBUcmVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jvb3RDb21wb25lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIHJvb3RDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0ZW1wbGF0ZTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKEBJbmplY3QoVHJlZVNlcnZpY2UpIHByaXZhdGUgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyZWVNb2RlbCkge1xuICAgICAgdGhpcy50cmVlID0gVHJlZUNvbXBvbmVudC5FTVBUWV9UUkVFO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWUgPSBuZXcgVHJlZSh0aGlzLnRyZWVNb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50cmVlU2VydmljZS5ub2RlUmVtb3ZlZCQuc3Vic2NyaWJlKChlOiBOb2RlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5ub2RlUmVtb3ZlZC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5vZGVSZW5hbWVkJC5zdWJzY3JpYmUoKGU6IE5vZGVFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLm5vZGVSZW5hbWVkLmVtaXQoZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uubm9kZUNyZWF0ZWQkLnN1YnNjcmliZSgoZTogTm9kZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubm9kZUNyZWF0ZWQuZW1pdChlKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50cmVlU2VydmljZS5ub2RlU2VsZWN0ZWQkLnN1YnNjcmliZSgoZTogTm9kZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGVkLmVtaXQoZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uubm9kZVVuc2VsZWN0ZWQkLnN1YnNjcmliZSgoZTogTm9kZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubm9kZVVuc2VsZWN0ZWQuZW1pdChlKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50cmVlU2VydmljZS5ub2RlTW92ZWQkLnN1YnNjcmliZSgoZTogTm9kZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubm9kZU1vdmVkLmVtaXQoZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uubm9kZUV4cGFuZGVkJC5zdWJzY3JpYmUoKGU6IE5vZGVFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLm5vZGVFeHBhbmRlZC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5vZGVDb2xsYXBzZWQkLnN1YnNjcmliZSgoZTogTm9kZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubm9kZUNvbGxhcHNlZC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm1lbnVJdGVtU2VsZWN0ZWQkLnN1YnNjcmliZSgoZTogTWVudUl0ZW1TZWxlY3RlZEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubWVudUl0ZW1TZWxlY3RlZC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmxvYWROZXh0TGV2ZWwkLnN1YnNjcmliZSgoZTogTm9kZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE5leHRMZXZlbC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5vZGVDaGVja2VkJC5zdWJzY3JpYmUoKGU6IE5vZGVDaGVja2VkRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5ub2RlQ2hlY2tlZC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5vZGVVbmNoZWNrZWQkLnN1YnNjcmliZSgoZTogTm9kZVVuY2hlY2tlZEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubm9kZVVuY2hlY2tlZC5lbWl0KGUpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRyb2xsZXIoKTogVHJlZUNvbnRyb2xsZXIge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuY29udHJvbGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250cm9sbGVyQnlOb2RlSWQoaWQ6IG51bWJlciB8IHN0cmluZyk6IFRyZWVDb250cm9sbGVyIHtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5nZXRDb250cm9sbGVyKGlkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIgJiYgc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iXX0=