UNPKG

lamb-web-lib

Version:

LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).

257 lines 24.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ /** * @license * Copyright Lamb Team. All Rights Reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ import { Component, Input, HostBinding } from '@angular/core'; import { convertToBoolProperty } from './helpers'; import { filter, takeWhile } from 'rxjs/operators'; import { Router, NavigationEnd } from '@angular/router'; import { LambMenuInternalService } from './menu-internal.service'; export class LambMenuComponent { /** * @param {?} lambMenuInternalService * @param {?} router */ constructor(lambMenuInternalService, router) { this.lambMenuInternalService = lambMenuInternalService; this.router = router; /** * Lista de elementos de menú. */ // @Input() lambItems: LambMenuItem[]; this.lambItems = []; this.alive = true; this.autoCollapseValue = false; } /** * @param {?} lambItems * @return {?} */ set items(lambItems) { if (lambItems) { // setTimeout(() => { this.lambItems = lambItems; // }, 0); this.afterLoadItems(); } } /** * Hace que los colores sean inversos según el tema actual. * El valor predeterminado es "false" * @param {?} val * @return {?} */ set inverse(val) { this.inverseValue = convertToBoolProperty(val); } /** * Contraer todos los submenus abiertos en el event de aternar (toggle event) * El valor predeterminado es "false". * @param {?} val * @return {?} */ set autoCollapse(val) { this.autoCollapseValue = convertToBoolProperty(val); } /** * @return {?} */ ngOnInit() { this.lambMenuInternalService .onAddItem() .pipe(takeWhile(() => this.alive), filter((data) => this.compareTag(data.tag))) .subscribe(data => this.onAddItem(data)); this.lambMenuInternalService .onNavigateHome() .pipe(takeWhile(() => this.alive), filter((data) => this.compareTag(data.tag))) .subscribe(() => this.navigateHome()); this.lambMenuInternalService .onGetSelectedItem() .pipe(takeWhile(() => this.alive), filter((data) => this.compareTag(data.tag))) .subscribe((data) => { data.listener.next({ tag: this.tag, item: this.getSelectedItem(this.lambItems) }); }); this.router.events .pipe(takeWhile(() => this.alive), filter(event => event instanceof NavigationEnd)) .subscribe(() => { this.lambMenuInternalService.resetItems(this.lambItems); this.lambMenuInternalService.updateSelection(this.lambItems, this.tag, this.autoCollapseValue); }); this.lambItems.push(...this.lambMenuInternalService.getItems()); } /** * @param {?} items * @return {?} */ getSelectedItem(items) { /** @type {?} */ let selected = null; items.forEach((item) => { if (item.selected) { selected = item; } if (item.selected && item.children && item.children.length > 0) { selected = this.getSelectedItem(item.children); } }); return selected; } /** * @return {?} */ afterLoadItems() { // Codigo extra, propio del proyecto this.lambMenuInternalService.prepareItems(this.lambItems); setTimeout(() => this.lambMenuInternalService.updateSelection(this.lambItems, this.tag)); } /** * @return {?} */ ngAfterViewInit() { } /** * @param {?} data * @return {?} */ onAddItem(data) { this.lambItems.push(...data.items); this.lambMenuInternalService.prepareItems(this.lambItems); this.lambMenuInternalService.updateSelection(this.lambItems, this.tag, this.autoCollapseValue); } /** * Attr Menus * @param {?} item * @return {?} */ onHoverItem(item) { this.lambMenuInternalService.itemHover(item, this.tag); } // TODO: No se dispara cuando la pagina se recarga. /** * @param {?} item * @return {?} */ onSelectItem(item) { this.lambMenuInternalService.resetItems(this.lambItems); this.lambMenuInternalService.selectItem(item, this.tag); } /** * @param {?} item * @return {?} */ onItemClick(item) { this.lambMenuInternalService.itemClick(item, this.tag); } /** * @return {?} */ ngOnDestroy() { this.alive = false; } /** * @param {?} item * @return {?} */ onToggleSubMenu(item) { if (this.autoCollapseValue) { this.lambMenuInternalService.collapseAll(this.lambItems, this.tag, item); } item.expanded = !item.expanded; this.lambMenuInternalService.submenuToggle(item, this.tag); } /** * @param {?} tag * @return {?} */ compareTag(tag) { return !tag || tag === this.tag; } /** * @return {?} */ navigateHome() { /** @type {?} */ const homeItem = this.getHomeItem(this.lambItems); if (homeItem) { if (homeItem.link) { this.router.navigate([homeItem.link]); } if (homeItem.url) { window.location.href = homeItem.url; } } } /** * @param {?} items * @return {?} */ getHomeItem(items) { for (const item of items) { if (item.home) { return item; } /** @type {?} */ const homeItem = item.children && this.getHomeItem(item.children); if (homeItem) { return homeItem; } } } } LambMenuComponent.decorators = [ { type: Component, args: [{ selector: 'lamb-menu', template: ` <ul class="lamb-menu-items"> <li lambMenuItem *ngFor="let item of lambItems" [lambMenuItemm]="item" (hoverItem)="onHoverItem($event)" (toggleSubMenu)="onToggleSubMenu($event)" (selectItem)="onSelectItem($event)" (itemClick)="onItemClick($event)" class="lamb-menu-item"></li> </ul> `, styles: [`@charset "UTF-8";:host ::ng-deep{display:block;margin:0 -1.25rem -1.25rem}:host ::ng-deep .lamb-menu-item>.lamb-menu-items,:host ::ng-deep .lamb-menu-items{list-style-type:none;overflow:hidden;transition:max-height .3s ease-in}:host ::ng-deep .lamb-menu-item a{display:flex;color:inherit;text-decoration:none;align-items:center}:host ::ng-deep .lamb-menu-item a .lamb-menu-title{flex:1}`], },] }, ]; LambMenuComponent.ctorParameters = () => [ { type: LambMenuInternalService }, { type: Router } ]; LambMenuComponent.propDecorators = { inverseValue: [{ type: HostBinding, args: ['class.inverse',] }], tag: [{ type: Input }], items: [{ type: Input }], inverse: [{ type: Input }], autoCollapse: [{ type: Input }] }; if (false) { /** @type {?} */ LambMenuComponent.prototype.inverseValue; /** * Las etiquetas de un menú con un Id, se pueden usar posteriormente en el servicio * de menú para determinar qué menú desencadenó la acción, si existen varios menús en la página. * @type {?} */ LambMenuComponent.prototype.tag; /** * Lista de elementos de menú. * @type {?} */ LambMenuComponent.prototype.lambItems; /** @type {?} */ LambMenuComponent.prototype.alive; /** @type {?} */ LambMenuComponent.prototype.autoCollapseValue; /** @type {?} */ LambMenuComponent.prototype.lambMenuInternalService; /** @type {?} */ LambMenuComponent.prototype.router; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9sYW1iLXdlYi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9tZW51L21lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU9BLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFdBQVcsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFaEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWlCbEUsTUFBTTs7Ozs7SUE2Q0osWUFBb0IsdUJBQWdELEVBRTFELE1BQWM7UUFGSiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBRTFELFdBQU0sR0FBTixNQUFNLENBQVE7UUF0Q3hCOztXQUVHO1FBQ0gsc0NBQXNDO1FBQy9CLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBNkI5QixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2Isc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBSzlCLENBQUM7Ozs7O0lBbENMLElBQ0ksS0FBSyxDQUFDLFNBQXlCO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsU0FBUztZQUNULElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQzs7Ozs7OztJQU1ELElBQ0ksT0FBTyxDQUFDLEdBQVk7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJ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QUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs7Ozs7SUFFTyxXQUFXLENBQUMsS0FBcUI7UUFDdkMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2QsQ0FBQzs7a0JBRUssUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OztZQTlMRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO2dCQUNELE1BQU0sRUFBRSxDQUFDLG9ZQUFvWSxDQUFDO2FBQy9ZOzs7WUFoQlEsdUJBQXVCO1lBRnZCLE1BQU07OzsyQkFvQlosV0FBVyxTQUFDLGVBQWU7a0JBTTNCLEtBQUs7b0JBT0wsS0FBSztzQkFjTCxLQUFLOzJCQVNMLEtBQUs7Ozs7SUFwQ04seUNBQW9EOzs7Ozs7SUFNcEQsZ0NBQXFCOzs7OztJQU1yQixzQ0FBc0M7O0lBNkJ0QyxrQ0FBcUI7O0lBQ3JCLDhDQUFrQzs7SUFFdEIsb0RBQXdEOztJQUVsRSxtQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBMYW1iIFRlYW0uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBIb3N0QmluZGluZywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExhbWJNZW51SXRlbSwgTGFtYk1lbnVCYWcgfSBmcm9tICcuL21lbnUtaXRlbSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UgfSBmcm9tICcuL21lbnUtaW50ZXJuYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xhbWItbWVudScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDx1bCBjbGFzcz1cImxhbWItbWVudS1pdGVtc1wiPlxyXG4gICAgICA8bGkgbGFtYk1lbnVJdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxhbWJJdGVtc1wiXHJcbiAgICAgICAgW2xhbWJNZW51SXRlbW1dPVwiaXRlbVwiXHJcbiAgICAgICAgKGhvdmVySXRlbSk9XCJvbkhvdmVySXRlbSgkZXZlbnQpXCJcclxuICAgICAgICAodG9nZ2xlU3ViTWVudSk9XCJvblRvZ2dsZVN1Yk1lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdEl0ZW0pPVwib25TZWxlY3RJdGVtKCRldmVudClcIlxyXG4gICAgICAgIChpdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgY2xhc3M9XCJsYW1iLW1lbnUtaXRlbVwiPjwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYEBjaGFyc2V0IFwiVVRGLThcIjs6aG9zdCA6Om5nLWRlZXB7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMS4yNXJlbSAtMS4yNXJlbX06aG9zdCA6Om5nLWRlZXAgLmxhbWItbWVudS1pdGVtPi5sYW1iLW1lbnUtaXRlbXMsOmhvc3QgOjpuZy1kZWVwIC5sYW1iLW1lbnUtaXRlbXN7bGlzdC1zdHlsZS10eXBlOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246bWF4LWhlaWdodCAuM3MgZWFzZS1pbn06aG9zdCA6Om5nLWRlZXAgLmxhbWItbWVudS1pdGVtIGF7ZGlzcGxheTpmbGV4O2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YWxpZ24taXRlbXM6Y2VudGVyfTpob3N0IDo6bmctZGVlcCAubGFtYi1tZW51LWl0ZW0gYSAubGFtYi1tZW51LXRpdGxle2ZsZXg6MX1gXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExhbWJNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW52ZXJzZScpIGludmVyc2VWYWx1ZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogTGFzIGV0aXF1ZXRhcyBkZSB1biBtZW7DuiBjb24gdW4gSWQsIHNlIHB1ZWRlbiB1c2FyIHBvc3Rlcmlvcm1lbnRlIGVuIGVsIHNlcnZpY2lvXHJcbiAgICogZGUgbWVuw7ogcGFyYSBkZXRlcm1pbmFyIHF1w6kgbWVuw7ogZGVzZW5jYWRlbsOzIGxhIGFjY2nDs24sIHNpIGV4aXN0ZW4gdmFyaW9zIG1lbsO6cyBlbiBsYSBww6FnaW5hLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhZzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBMaXN0YSBkZSBlbGVtZW50b3MgZGUgbWVuw7ouXHJcbiAgICovXHJcbiAgLy8gQElucHV0KCkgbGFtYkl0ZW1zOiBMYW1iTWVudUl0ZW1bXTtcclxuICBwdWJsaWMgbGFtYkl0ZW1zOiBMYW1iTWVudUl0ZW1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zKGxhbWJJdGVtczogTGFtYk1lbnVJdGVtW10pIHtcclxuICAgIGlmIChsYW1iSXRlbXMpIHtcclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubGFtYkl0ZW1zID0gbGFtYkl0ZW1zO1xyXG4gICAgICAvLyB9LCAwKTtcclxuICAgICAgdGhpcy5hZnRlckxvYWRJdGVtcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFjZSBxdWUgbG9zIGNvbG9yZXMgc2VhbiBpbnZlcnNvcyBzZWfDum4gZWwgdGVtYSBhY3R1YWwuXHJcbiAgICogRWwgdmFsb3IgcHJlZGV0ZXJtaW5hZG8gZXMgXCJmYWxzZVwiXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaW52ZXJzZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52ZXJzZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb250cmFlciB0b2RvcyBsb3Mgc3VibWVudXMgYWJpZXJ0b3MgZW4gZWwgZXZlbnQgZGUgYXRlcm5hciAodG9nZ2xlIGV2ZW50KVxyXG4gICAqIEVsIHZhbG9yIHByZWRldGVybWluYWRvIGVzIFwiZmFsc2VcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBhdXRvQ29sbGFwc2UodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmF1dG9Db2xsYXBzZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcclxuICBwcml2YXRlIGF1dG9Db2xsYXBzZVZhbHVlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFtYk1lbnVJbnRlcm5hbFNlcnZpY2U6IExhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBhY2Nlc3NPYnNlcnZhYmxlU2VydmljZTogQWNjZXNzT2JzZXJ2YWJsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2VcclxuICAgICAgLm9uQWRkSXRlbSgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSxcclxuICAgICAgICBmaWx0ZXIoKGRhdGE6IHsgdGFnOiBzdHJpbmc7IGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSB9KSA9PiB0aGlzLmNvbXBhcmVUYWcoZGF0YS50YWcpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5vbkFkZEl0ZW0oZGF0YSkpO1xyXG5cclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2VcclxuICAgICAgLm9uTmF2aWdhdGVIb21lKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YTogeyB0YWc6IHN0cmluZzsgaXRlbXM6IExhbWJNZW51SXRlbSB9KSA9PiB0aGlzLmNvbXBhcmVUYWcoZGF0YS50YWcpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVIb21lKCkpO1xyXG5cclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2VcclxuICAgICAgLm9uR2V0U2VsZWN0ZWRJdGVtKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YTogeyB0YWc6IHN0cmluZzsgbGlzdGVuZXI6IEJlaGF2aW9yU3ViamVjdDxMYW1iTWVudUJhZz4gfSkgPT4gdGhpcy5jb21wYXJlVGFnKGRhdGEudGFnKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogeyB0YWc6IHN0cmluZzsgbGlzdGVuZXI6IEJlaGF2aW9yU3ViamVjdDxMYW1iTWVudUJhZz4gfSkgPT4ge1xyXG4gICAgICAgIGRhdGEubGlzdGVuZXIubmV4dCh7IHRhZzogdGhpcy50YWcsIGl0ZW06IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKHRoaXMubGFtYkl0ZW1zKSB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSxcclxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmxhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLnJlc2V0SXRlbXModGhpcy5sYW1iSXRlbXMpO1xyXG4gICAgICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UudXBkYXRlU2VsZWN0aW9uKHRoaXMubGFtYkl0ZW1zLCB0aGlzLnRhZywgdGhpcy5hdXRvQ29sbGFwc2VWYWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGFtYkl0ZW1zLnB1c2goLi4udGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5nZXRJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJdGVtKGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSk6IExhbWJNZW51SXRlbSB7XHJcbiAgICBsZXQgc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTGFtYk1lbnVJdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBpdGVtO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkSXRlbShpdGVtLmNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyTG9hZEl0ZW1zKCkge1xyXG4gICAgLy8gQ29kaWdvIGV4dHJhLCBwcm9waW8gZGVsIHByb3llY3RvXHJcbiAgICB0aGlzLmxhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLnByZXBhcmVJdGVtcyh0aGlzLmxhbWJJdGVtcyk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UudXBkYXRlU2VsZWN0aW9uKHRoaXMubGFtYkl0ZW1zLCB0aGlzLnRhZykpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFkZEl0ZW0oZGF0YTogeyB0YWc6IHN0cmluZywgaXRlbXM6IExhbWJNZW51SXRlbVtdIH0pIHtcclxuICAgIHRoaXMubGFtYkl0ZW1zLnB1c2goLi4uZGF0YS5pdGVtcyk7XHJcblxyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5wcmVwYXJlSXRlbXModGhpcy5sYW1iSXRlbXMpO1xyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS51cGRhdGVTZWxlY3Rpb24odGhpcy5sYW1iSXRlbXMsIHRoaXMudGFnLCB0aGlzLmF1dG9Db2xsYXBzZVZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBBdHRyIE1lbnVzICovXHJcbiAgcHVibGljIG9uSG92ZXJJdGVtKGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5pdGVtSG92ZXIoaXRlbSwgdGhpcy50YWcpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogTm8gc2UgZGlzcGFyYSBjdWFuZG8gbGEgcGFnaW5hIHNlIHJlY2FyZ2EuXHJcbiAgcHVibGljIG9uU2VsZWN0SXRlbShpdGVtOiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UucmVzZXRJdGVtcyh0aGlzLmxhbWJJdGVtcyk7XHJcbiAgICB0aGlzLmxhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLnNlbGVjdEl0ZW0oaXRlbSwgdGhpcy50YWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbUNsaWNrKGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5pdGVtQ2xpY2soaXRlbSwgdGhpcy50YWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVG9nZ2xlU3ViTWVudShpdGVtOiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmF1dG9Db2xsYXBzZVZhbHVlKSB7XHJcbiAgICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UuY29sbGFwc2VBbGwodGhpcy5sYW1iSXRlbXMsIHRoaXMudGFnLCBpdGVtKTtcclxuICAgIH1cclxuICAgIGl0ZW0uZXhwYW5kZWQgPSAhaXRlbS5leHBhbmRlZDtcclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2Uuc3VibWVudVRvZ2dsZShpdGVtLCB0aGlzLnRhZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVUYWcodGFnOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAhdGFnIHx8IHRhZyA9PT0gdGhpcy50YWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlSG9tZSgpIHtcclxuICAgIGNvbnN0IGhvbWVJdGVtID0gdGhpcy5nZXRIb21lSXRlbSh0aGlzLmxhbWJJdGVtcyk7XHJcblxyXG4gICAgaWYgKGhvbWVJdGVtKSB7XHJcbiAgICAgIGlmIChob21lSXRlbS5saW5rKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2hvbWVJdGVtLmxpbmtdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhvbWVJdGVtLnVybCkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaG9tZUl0ZW0udXJsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhvbWVJdGVtKGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSk6IExhbWJNZW51SXRlbSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKGl0ZW0uaG9tZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBob21lSXRlbSA9IGl0ZW0uY2hpbGRyZW4gJiYgdGhpcy5nZXRIb21lSXRlbShpdGVtLmNoaWxkcmVuKTtcclxuICAgICAgaWYgKGhvbWVJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGhvbWVJdGVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==