@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
156 lines • 16.6 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { TreePetriflowIdentifiers } from '../model/tree-petriflow-identifiers';
import * as i0 from "@angular/core";
import * as i1 from "./case-tree.service";
export class AbstractTreeComponent {
_treeService;
/**
* `true` is emitted whenever the tree's root node is in it's loading state.
*
* `false` is emitted when the root node is no longer in the loading state.
*
* The first value emitted from this Output is `false`, when the tree finishes initializing.
*
* The root node enters it's loading state when it's children are being loaded.
*/
treeRootLoading = new EventEmitter();
/**
* `true` is emitted whenever the tree's root node is adding a new child node.
*
* `false` is emitted when the root node is no longer adding a new child node.
*
* The first value emitted from this Output is `false`, when the tree finishes initializing.
*
* No further calls to add a child node should be made, while a child is being added.
*/
treeRootAddingChild = new EventEmitter();
constructor(_treeService) {
this._treeService = _treeService;
this._treeService.treeRootLoaded$.subscribe(success => {
if (success) {
this._treeService.rootNodeLoading$.subscribe(loading => {
this.treeRootLoading.emit(loading);
});
this._treeService.rootNodeAddingChild$.subscribe(addingChild => {
this.treeRootAddingChild.emit(addingChild);
});
}
});
}
/**
* The {@link Filter} that determines the root node of the tree.
*
* The tree can only have one root. If more than one case is returned by the Filter.
* The first result will be used as the tree root.
*
* If you want to have multiple nodes in the first level checkout the [showTreeRoot]{@link AbstractTreeComponent#showTreeRoot} property.
* @param filter Case Filter that determines the tree root
*/
set filter(filter) {
this._treeService.rootFilter = filter;
}
/**
* Whether the tree root should be displayed as a node or not.
*
* `true` displays the root as the only node in the first level.
*
* `false` displays the root's child nodes in the first level.
*
* If you want to add more children while the root is hidden use the [addRootChildNode]
* {@link AbstractTreeComponent#addRootChildNode} method.
* @param showTreeRoot whether the root node should be displayed in the tree or not
*/
set showTreeRoot(showTreeRoot) {
this._treeService.treeRootLoaded$.subscribe(success => {
if (success) {
this._treeService.initializeTree(showTreeRoot);
}
});
}
/**
* Weather the tree is eager loaded or not.
*
* Defaults to `false`.
*
* It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
*
* @param eager the new setting for eager loading
*/
set eagerLoaded(eager) {
this._treeService.isEagerLoaded = eager;
}
/**
* @ignore
*/
get dataSource() {
return this._treeService.dataSource;
}
/**
* @ignore
*/
get treeControl() {
return this._treeService.treeControl;
}
/**
* @ignore
*/
hasChild = (_, node) => {
const childrenCaseRef = node.case.immediateData.find(data => data.stringId === TreePetriflowIdentifiers.CHILDREN_CASE_REF);
return !!childrenCaseRef && !!childrenCaseRef.value && childrenCaseRef.value.length > 0;
};
/**
* @ignore
*/
caseNodeClicked(node) {
this._treeService.changeActiveNode(node);
}
/**
* @ignore
*/
toggleCaseNode(event, node) {
event.stopPropagation();
this._treeService.toggleNode(node);
}
/**
* @ignore
*/
selectedCaseNode(node) {
return node === this._treeService.currentNode;
}
/**
* Adds a child to the root node.
*
* Useful if you set the [showTreeRoot]{@link AbstractTreeComponent#showTreeRoot} property to `false`.
*/
addRootChildNode() {
this._treeService.addRootChildNode();
}
/**
* Expands all nodes in the tree dictated by the argument.
*
* @param path nodes that should be expanded along with their path from the root node
*/
expandPath(path) {
this._treeService.expandPath(path);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractTreeComponent, deps: [{ token: i1.CaseTreeService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractTreeComponent, selector: "ncc-abstract-tree", inputs: { filter: "filter", showTreeRoot: "showTreeRoot", eagerLoaded: "eagerLoaded" }, outputs: { treeRootLoading: "treeRootLoading", treeRootAddingChild: "treeRootAddingChild" }, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractTreeComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-tree',
template: ''
}]
}], ctorParameters: () => [{ type: i1.CaseTreeService }], propDecorators: { treeRootLoading: [{
type: Output
}], treeRootAddingChild: [{
type: Output
}], filter: [{
type: Input
}], showTreeRoot: [{
type: Input
}], eagerLoaded: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3ZpZXcvdHJlZS1jYXNlLXZpZXcvdHJlZS1jb21wb25lbnQvYWJzdHJhY3QtdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBUTdFLE1BQU0sT0FBZ0IscUJBQXFCO0lBd0JQO0lBdEJoQzs7Ozs7Ozs7T0FRRztJQUNPLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRXhEOzs7Ozs7OztPQVFHO0lBQ08sbUJBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUU1RCxZQUFnQyxZQUE2QjtRQUE3QixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xELElBQUksT0FBTyxFQUFFO2dCQUNULElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQWEsTUFBTSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsSUFBYSxZQUFZLENBQUMsWUFBcUI7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xELElBQUksT0FBTyxFQUFFO2dCQUNULElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUFhLFdBQVcsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLEdBQUcsQ0FBQyxDQUFTLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzSCxPQUFPLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVGLENBQUMsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLElBQWtCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQVksRUFBRSxJQUFrQjtRQUMzQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsSUFBa0I7UUFDL0IsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0I7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLElBQWtCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7d0dBOUlpQixxQkFBcUI7NEZBQXJCLHFCQUFxQiw4T0FGN0IsRUFBRTs7NEZBRU0scUJBQXFCO2tCQUoxQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxFQUFFO2lCQUNmO29GQVlhLGVBQWU7c0JBQXhCLE1BQU07Z0JBV0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQXdCTSxNQUFNO3NCQUFsQixLQUFLO2dCQWVPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBaUJPLFdBQVc7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmVzdGVkVHJlZUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge0Nhc2VUcmVlU2VydmljZX0gZnJvbSAnLi9jYXNlLXRyZWUuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmVlTm9kZX0gZnJvbSAnLi9tb2RlbC9jYXNlLXRyZWUtbm9kZSc7XG5pbXBvcnQge1RyZWVQZXRyaWZsb3dJZGVudGlmaWVyc30gZnJvbSAnLi4vbW9kZWwvdHJlZS1wZXRyaWZsb3ctaWRlbnRpZmllcnMnO1xuaW1wb3J0IHtNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge0Nhc2VUcmVlUGF0aH0gZnJvbSAnLi9tb2RlbC9jYXNlLXRyZWUtcGF0aCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LXRyZWUnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRyZWVDb21wb25lbnQge1xuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlzIGVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHRyZWUncyByb290IG5vZGUgaXMgaW4gaXQncyBsb2FkaW5nIHN0YXRlLlxuICAgICAqXG4gICAgICogYGZhbHNlYCBpcyBlbWl0dGVkIHdoZW4gdGhlIHJvb3Qgbm9kZSBpcyBubyBsb25nZXIgaW4gdGhlIGxvYWRpbmcgc3RhdGUuXG4gICAgICpcbiAgICAgKiBUaGUgZmlyc3QgdmFsdWUgZW1pdHRlZCBmcm9tIHRoaXMgT3V0cHV0IGlzIGBmYWxzZWAsIHdoZW4gdGhlIHRyZWUgZmluaXNoZXMgaW5pdGlhbGl6aW5nLlxuICAgICAqXG4gICAgICogVGhlIHJvb3Qgbm9kZSBlbnRlcnMgaXQncyBsb2FkaW5nIHN0YXRlIHdoZW4gaXQncyBjaGlsZHJlbiBhcmUgYmVpbmcgbG9hZGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0cmVlUm9vdExvYWRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaXMgZW1pdHRlZCB3aGVuZXZlciB0aGUgdHJlZSdzIHJvb3Qgbm9kZSBpcyBhZGRpbmcgYSBuZXcgY2hpbGQgbm9kZS5cbiAgICAgKlxuICAgICAqIGBmYWxzZWAgaXMgZW1pdHRlZCB3aGVuIHRoZSByb290IG5vZGUgaXMgbm8gbG9uZ2VyIGFkZGluZyBhIG5ldyBjaGlsZCBub2RlLlxuICAgICAqXG4gICAgICogVGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgZnJvbSB0aGlzIE91dHB1dCBpcyBgZmFsc2VgLCB3aGVuIHRoZSB0cmVlIGZpbmlzaGVzIGluaXRpYWxpemluZy5cbiAgICAgKlxuICAgICAqIE5vIGZ1cnRoZXIgY2FsbHMgdG8gYWRkIGEgY2hpbGQgbm9kZSBzaG91bGQgYmUgbWFkZSwgd2hpbGUgYSBjaGlsZCBpcyBiZWluZyBhZGRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdHJlZVJvb3RBZGRpbmdDaGlsZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3RyZWVTZXJ2aWNlOiBDYXNlVHJlZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UudHJlZVJvb3RMb2FkZWQkLnN1YnNjcmliZShzdWNjZXNzID0+IHtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2Uucm9vdE5vZGVMb2FkaW5nJC5zdWJzY3JpYmUobG9hZGluZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVJvb3RMb2FkaW5nLmVtaXQobG9hZGluZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2Uucm9vdE5vZGVBZGRpbmdDaGlsZCQuc3Vic2NyaWJlKGFkZGluZ0NoaWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlUm9vdEFkZGluZ0NoaWxkLmVtaXQoYWRkaW5nQ2hpbGQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUge0BsaW5rIEZpbHRlcn0gdGhhdCBkZXRlcm1pbmVzIHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUuXG4gICAgICpcbiAgICAgKiBUaGUgdHJlZSBjYW4gb25seSBoYXZlIG9uZSByb290LiBJZiBtb3JlIHRoYW4gb25lIGNhc2UgaXMgcmV0dXJuZWQgYnkgdGhlIEZpbHRlci5cbiAgICAgKiBUaGUgZmlyc3QgcmVzdWx0IHdpbGwgYmUgdXNlZCBhcyB0aGUgdHJlZSByb290LlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSBub2RlcyBpbiB0aGUgZmlyc3QgbGV2ZWwgY2hlY2tvdXQgdGhlIFtzaG93VHJlZVJvb3Rde0BsaW5rIEFic3RyYWN0VHJlZUNvbXBvbmVudCNzaG93VHJlZVJvb3R9IHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBmaWx0ZXIgQ2FzZSBGaWx0ZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSB0cmVlIHJvb3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgZmlsdGVyKGZpbHRlcjogRmlsdGVyKSB7XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnJvb3RGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdHJlZSByb290IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgYSBub2RlIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIGB0cnVlYCBkaXNwbGF5cyB0aGUgcm9vdCBhcyB0aGUgb25seSBub2RlIGluIHRoZSBmaXJzdCBsZXZlbC5cbiAgICAgKlxuICAgICAqIGBmYWxzZWAgZGlzcGxheXMgdGhlIHJvb3QncyBjaGlsZCBub2RlcyBpbiB0aGUgZmlyc3QgbGV2ZWwuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBhZGQgbW9yZSBjaGlsZHJlbiB3aGlsZSB0aGUgcm9vdCBpcyBoaWRkZW4gdXNlIHRoZSBbYWRkUm9vdENoaWxkTm9kZV1cbiAgICAgKiB7QGxpbmsgQWJzdHJhY3RUcmVlQ29tcG9uZW50I2FkZFJvb3RDaGlsZE5vZGV9IG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gc2hvd1RyZWVSb290IHdoZXRoZXIgdGhlIHJvb3Qgbm9kZSBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSB0cmVlIG9yIG5vdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCBzaG93VHJlZVJvb3Qoc2hvd1RyZWVSb290OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnRyZWVSb290TG9hZGVkJC5zdWJzY3JpYmUoc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmluaXRpYWxpemVUcmVlKHNob3dUcmVlUm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlYWdlciB0aGUgbmV3IHNldHRpbmcgZm9yIGVhZ2VyIGxvYWRpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgZWFnZXJMb2FkZWQoZWFnZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuaXNFYWdlckxvYWRlZCA9IGVhZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogTWF0VHJlZU5lc3RlZERhdGFTb3VyY2U8Q2FzZVRyZWVOb2RlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmVlU2VydmljZS5kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRyZWVDb250cm9sKCk6IE5lc3RlZFRyZWVDb250cm9sPENhc2VUcmVlTm9kZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZVNlcnZpY2UudHJlZUNvbnRyb2w7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogQ2FzZVRyZWVOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuQ2FzZVJlZiA9IG5vZGUuY2FzZS5pbW1lZGlhdGVEYXRhLmZpbmQoZGF0YSA9PiBkYXRhLnN0cmluZ0lkID09PSBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuICAgICAgICByZXR1cm4gISFjaGlsZHJlbkNhc2VSZWYgJiYgISFjaGlsZHJlbkNhc2VSZWYudmFsdWUgJiYgY2hpbGRyZW5DYXNlUmVmLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIGNhc2VOb2RlQ2xpY2tlZChub2RlOiBDYXNlVHJlZU5vZGUpIHtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuY2hhbmdlQWN0aXZlTm9kZShub2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgdG9nZ2xlQ2FzZU5vZGUoZXZlbnQ6IEV2ZW50LCBub2RlOiBDYXNlVHJlZU5vZGUpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnRvZ2dsZU5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHNlbGVjdGVkQ2FzZU5vZGUobm9kZTogQ2FzZVRyZWVOb2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlID09PSB0aGlzLl90cmVlU2VydmljZS5jdXJyZW50Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hpbGQgdG8gdGhlIHJvb3Qgbm9kZS5cbiAgICAgKlxuICAgICAqIFVzZWZ1bCBpZiB5b3Ugc2V0IHRoZSBbc2hvd1RyZWVSb290XXtAbGluayBBYnN0cmFjdFRyZWVDb21wb25lbnQjc2hvd1RyZWVSb290fSBwcm9wZXJ0eSB0byBgZmFsc2VgLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRSb290Q2hpbGROb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5hZGRSb290Q2hpbGROb2RlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIHRyZWUgZGljdGF0ZWQgYnkgdGhlIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhdGggbm9kZXMgdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQgYWxvbmcgd2l0aCB0aGVpciBwYXRoIGZyb20gdGhlIHJvb3Qgbm9kZVxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmRQYXRoKHBhdGg6IENhc2VUcmVlUGF0aCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5leHBhbmRQYXRoKHBhdGgpO1xuICAgIH1cbn1cbiJdfQ==