UNPKG

ontimize-web-ngx

Version:
89 lines 20.9 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, ViewEncapsulation } from '@angular/core'; import { PermissionsService } from '../../services'; import { AppMenuService } from '../../services/app-menu.service'; import { OTranslateService } from '../../services/translate/o-translate.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../components/card-menu-item/o-card-menu-item.component"; import * as i3 from "@angular/flex-layout/flex"; import * as i4 from "@angular/flex-layout/extended"; export const DEFAULT_INPUTS_O_MENU_LAYOUT = [ 'parentMenuId : parent-menu-id', 'excludeMenusId : exclude-menus-id' ]; export const DEFAULT_OUTPUTS_O_MENU_LAYOUT = []; export class OCardMenuLayoutComponent { constructor(injector, cd) { this.injector = injector; this.cd = cd; this.translateService = this.injector.get(OTranslateService); this.appMenuService = this.injector.get(AppMenuService); this.menuRoots = this.appMenuService.getMenuRoots(); this.permissionsService = this.injector.get(PermissionsService); this.translateServiceSubscription = this.translateService.onLanguageChanged.subscribe(() => { this.cd.detectChanges(); }); } ngAfterViewInit() { this.setCardMenuItems(); } ngOnDestroy() { if (this.translateServiceSubscription) { this.translateServiceSubscription.unsubscribe(); } } setCardMenuItems() { let cardItemsAux = []; if (!this.parentMenuId) { cardItemsAux = this.menuRoots.filter(item => !this.appMenuService.isMenuGroup(item)); } else { this.parentMenuIds = (this.parentMenuId || '').split(';').map(id => id.trim()); this.excludeIds = (this.excludeMenusId || '').split(';').map(id => id.trim()); cardItemsAux = this.getItemsFilteredByParentId(this.menuRoots, this.parentMenuIds); } this.cardItems = cardItemsAux; } get cardItems() { return this.cardItemsArray; } set cardItems(val) { this.cardItemsArray = val; this.cd.detectChanges(); } getItemsFilteredByParentId(array, parentMenuIds) { let result = []; const groups = array.filter(item => this.appMenuService.isMenuGroup(item)); parentMenuIds.forEach(parentMenuId => { for (let i = 0, len = groups.length; i < len; i++) { const menuGroup = groups[i]; if (menuGroup.id === parentMenuId) { let permissions = this.permissionsService.getMenuPermissions(parentMenuId); menuGroup.items.forEach(item => { let hidden = permissions?.visible === false || this.excludeIds.includes(item.id); item['show-in-card-menu'] = !hidden; }); result = result.concat(menuGroup.items); break; } else { const childResult = this.getItemsFilteredByParentId(menuGroup.items, [parentMenuId]); if (childResult.length) { result = result.concat(childResult); break; } } } }); return result; } } OCardMenuLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OCardMenuLayoutComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); OCardMenuLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OCardMenuLayoutComponent, selector: "o-card-menu-layout", inputs: { parentMenuId: ["parent-menu-id", "parentMenuId"], excludeMenusId: ["exclude-menus-id", "excludeMenusId"] }, host: { properties: { "class.o-menu-layout": "true" } }, ngImport: i0, template: "<div fxLayout=\"row wrap\" class=\"scrolling\" fxLayout.lt-md=\"column\" fxLayoutAlign=\"space-around center\" fxLayoutGap=\"8px\">\n <ng-container *ngFor=\"let item of cardItems\">\n <o-card-menu-item *ngIf=\"item['show-in-card-menu'] !== false\" button-text=\"CARD_MENU_LAYOUT.BUTTON_TEXT\" [route]=\"item.route\" [title]=\"item.name\"\n [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [image]=\"item.image\" [detail-component]=\"item.component\"\n [detail-component-inputs]=\"item['component-inputs']\" [ngClass]=\"item.class\">\n </o-card-menu-item>\n </ng-container>\n <ng-content select=\"o-card-menu-item\"></ng-content>\n</div>\n", styles: [".o-menu-layout{position:relative;width:100%}.o-menu-layout .scrolling{width:100%;min-width:100%;min-height:100%;overflow-y:auto}.o-menu-layout .o-card-menu-item{height:45%;margin-bottom:12px;max-width:300px;min-width:300px}.o-menu-layout .o-card-menu-item.compact{height:30%;max-height:250px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.OCardMenuItemComponent, selector: "o-card-menu-item", inputs: ["title", "image", "icon", "tooltip", "button-text", "disabled-button", "main-container-layout", "secondary-container-layout", "route", "detail-component", "detail-component-inputs", "action"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OCardMenuLayoutComponent, decorators: [{ type: Component, args: [{ selector: 'o-card-menu-layout', inputs: DEFAULT_INPUTS_O_MENU_LAYOUT, outputs: DEFAULT_OUTPUTS_O_MENU_LAYOUT, encapsulation: ViewEncapsulation.None, host: { '[class.o-menu-layout]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div fxLayout=\"row wrap\" class=\"scrolling\" fxLayout.lt-md=\"column\" fxLayoutAlign=\"space-around center\" fxLayoutGap=\"8px\">\n <ng-container *ngFor=\"let item of cardItems\">\n <o-card-menu-item *ngIf=\"item['show-in-card-menu'] !== false\" button-text=\"CARD_MENU_LAYOUT.BUTTON_TEXT\" [route]=\"item.route\" [title]=\"item.name\"\n [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [image]=\"item.image\" [detail-component]=\"item.component\"\n [detail-component-inputs]=\"item['component-inputs']\" [ngClass]=\"item.class\">\n </o-card-menu-item>\n </ng-container>\n <ng-content select=\"o-card-menu-item\"></ng-content>\n</div>\n", styles: [".o-menu-layout{position:relative;width:100%}.o-menu-layout .scrolling{width:100%;min-width:100%;min-height:100%;overflow-y:auto}.o-menu-layout .o-card-menu-item{height:45%;margin-bottom:12px;max-width:300px;min-width:300px}.o-menu-layout .o-card-menu-item.compact{height:30%;max-height:250px}\n"] }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jYXJkLW1lbnUtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2NhcmQtbWVudS1sYXlvdXQvby1jYXJkLW1lbnUtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2NhcmQtbWVudS1sYXlvdXQvby1jYXJkLW1lbnUtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1IsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7O0FBSWpGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHO0lBQzFDLCtCQUErQjtJQUMvQixtQ0FBbUM7Q0FDcEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLEVBQzVDLENBQUM7QUFjRixNQUFNLE9BQU8sd0JBQXdCO0lBZ0JuQyxZQUNVLFFBQWtCLEVBQ2xCLEVBQXFCO1FBRHJCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxj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QUFDLEVBQUU7d0JBQzdCLElBQUksTUFBTSxHQUFHLFdBQVcsRUFBRSxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFakYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLENBQUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEMsTUFBTTtpQkFDUDtxQkFBTTtvQkFDTCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ3JGLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTt3QkFDdEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ3BDLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7c0hBM0ZVLHdCQUF3QjswR0FBeEIsd0JBQXdCLHlPQ3ZDckMsa3BCQVNBOzRGRDhCYSx3QkFBd0I7a0JBWnBDLFNBQVM7K0JBQ0Usb0JBQW9CLFVBR3RCLDRCQUE0QixXQUMzQiw2QkFBNkIsaUJBQ3ZCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osdUJBQXVCLEVBQUUsTUFBTTtxQkFDaEMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVHlwZSxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTWVudUdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hcHAtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVudVJvb3RJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMvbWVudS1yb290LWl0ZW0udHlwZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX01FTlVfTEFZT1VUID0gW1xuICAncGFyZW50TWVudUlkIDogcGFyZW50LW1lbnUtaWQnLFxuICAnZXhjbHVkZU1lbnVzSWQgOiBleGNsdWRlLW1lbnVzLWlkJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX01FTlVfTEFZT1VUID0gW1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1jYXJkLW1lbnUtbGF5b3V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tY2FyZC1tZW51LWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tY2FyZC1tZW51LWxheW91dC5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fTUVOVV9MQVlPVVQsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX01FTlVfTEFZT1VULFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLW1lbnUtbGF5b3V0XSc6ICd0cnVlJ1xuICB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBPQ2FyZE1lbnVMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGFwcE1lbnVTZXJ2aWNlOiBBcHBNZW51U2VydmljZTtcbiAgcHJvdGVjdGVkIG1lbnVSb290czogTWVudVJvb3RJdGVtW107XG4gIHByb3RlY3RlZCBjYXJkSXRlbXNBcnJheTogTWVudVJvb3RJdGVtW107XG4gIHByb3RlY3RlZCBwYXJlbnRNZW51SWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIGV4Y2x1ZGVNZW51c0lkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2U7XG4gIHByb3RlY3RlZCBwYXJlbnRNZW51SWRzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIGV4Y2x1ZGVJZHM6IHN0cmluZ1tdO1xuXG4gIGhpZGRlbjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5hcHBNZW51U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcE1lbnVTZXJ2aWNlKTtcbiAgICB0aGlzLm1lbnVSb290cyA9IHRoaXMuYXBwTWVudVNlcnZpY2UuZ2V0TWVudVJvb3RzKCk7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxQZXJtaXNzaW9uc1NlcnZpY2U+KFBlcm1pc3Npb25zU2VydmljZSBhcyBUeXBlPFBlcm1pc3Npb25zU2VydmljZT4pO1xuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ3VhZ2VDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDYXJkTWVudUl0ZW1zKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldENhcmRNZW51SXRlbXMoKTogdm9pZCB7XG4gICAgbGV0IGNhcmRJdGVtc0F1eCA9IFtdO1xuICAgIGlmICghdGhpcy5wYXJlbnRNZW51SWQpIHtcbiAgICAgIGNhcmRJdGVtc0F1eCA9IHRoaXMubWVudVJvb3RzLmZpbHRlcihpdGVtID0+ICF0aGlzLmFwcE1lbnVTZXJ2aWNlLmlzTWVudUdyb3VwKGl0ZW0pKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLnBhcmVudE1lbnVJZHMgPSAodGhpcy5wYXJlbnRNZW51SWQgfHwgJycpLnNwbGl0KCc7JykubWFwKGlkID0+IGlkLnRyaW0oKSk7XG4gICAgICB0aGlzLmV4Y2x1ZGVJZHMgPSAodGhpcy5leGNsdWRlTWVudXNJZCB8fCAnJykuc3BsaXQoJzsnKS5tYXAoaWQgPT4gaWQudHJpbSgpKTtcblxuICAgICAgY2FyZEl0ZW1zQXV4ID0gdGhpcy5nZXRJdGVtc0ZpbHRlcmVkQnlQYXJlbnRJZCh0aGlzLm1lbnVSb290cywgdGhpcy5wYXJlbnRNZW51SWRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhcmRJdGVtcyA9IGNhcmRJdGVtc0F1eDtcbiAgfVxuXG4gIGdldCBjYXJkSXRlbXMoKTogTWVudVJvb3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNhcmRJdGVtc0FycmF5O1xuICB9XG5cbiAgc2V0IGNhcmRJdGVtcyh2YWw6IE1lbnVSb290SXRlbVtdKSB7XG4gICAgdGhpcy5jYXJkSXRlbXNBcnJheSA9IHZhbDtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtc0ZpbHRlcmVkQnlQYXJlbnRJZChhcnJheTogTWVudVJvb3RJdGVtW10sIHBhcmVudE1lbnVJZHM6IHN0cmluZ1tdKTogTWVudVJvb3RJdGVtW10ge1xuICAgIGxldCByZXN1bHQ6IE1lbnVSb290SXRlbVtdID0gW107XG4gICAgY29uc3QgZ3JvdXBzID0gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5hcHBNZW51U2VydmljZS5pc01lbnVHcm91cChpdGVtKSk7XG5cbiAgICBwYXJlbnRNZW51SWRzLmZvckVhY2gocGFyZW50TWVudUlkID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBncm91cHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgbWVudUdyb3VwID0gZ3JvdXBzW2ldIGFzIE1lbnVHcm91cDtcbiAgICAgICAgaWYgKG1lbnVHcm91cC5pZCA9PT0gcGFyZW50TWVudUlkKSB7XG4gICAgICAgICAgbGV0IHBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZ2V0TWVudVBlcm1pc3Npb25zKHBhcmVudE1lbnVJZCk7XG4gICAgICAgICAgbWVudUdyb3VwLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgaGlkZGVuID0gcGVybWlzc2lvbnM/LnZpc2libGUgPT09IGZhbHNlIHx8IHRoaXMuZXhjbHVkZUlkcy5pbmNsdWRlcyhpdGVtLmlkKTtcblxuICAgICAgICAgICAgaXRlbVsnc2hvdy1pbi1jYXJkLW1lbnUnXSA9ICFoaWRkZW47XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChtZW51R3JvdXAuaXRlbXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNoaWxkUmVzdWx0ID0gdGhpcy5nZXRJdGVtc0ZpbHRlcmVkQnlQYXJlbnRJZChtZW51R3JvdXAuaXRlbXMsIFtwYXJlbnRNZW51SWRdKTtcbiAgICAgICAgICBpZiAoY2hpbGRSZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGNoaWxkUmVzdWx0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGNsYXNzPVwic2Nyb2xsaW5nXCIgZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3BhY2UtYXJvdW5kIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiOHB4XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2FyZEl0ZW1zXCI+XG4gICAgPG8tY2FyZC1tZW51LWl0ZW0gKm5nSWY9XCJpdGVtWydzaG93LWluLWNhcmQtbWVudSddICE9PSBmYWxzZVwiIGJ1dHRvbi10ZXh0PVwiQ0FSRF9NRU5VX0xBWU9VVC5CVVRUT05fVEVYVFwiIFtyb3V0ZV09XCJpdGVtLnJvdXRlXCIgW3RpdGxlXT1cIml0ZW0ubmFtZVwiXG4gICAgICBbdG9vbHRpcF09XCJpdGVtLnRvb2x0aXBcIiBbaWNvbl09XCJpdGVtLmljb25cIiBbaW1hZ2VdPVwiaXRlbS5pbWFnZVwiIFtkZXRhaWwtY29tcG9uZW50XT1cIml0ZW0uY29tcG9uZW50XCJcbiAgICAgIFtkZXRhaWwtY29tcG9uZW50LWlucHV0c109XCJpdGVtWydjb21wb25lbnQtaW5wdXRzJ11cIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzXCI+XG4gICAgPC9vLWNhcmQtbWVudS1pdGVtPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1jYXJkLW1lbnUtaXRlbVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19