UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

172 lines 20 kB
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import 'hammerjs'; import { Breakpoints } from '@angular/cdk/layout'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/layout"; import * as i2 from "../../logger/services/logger.service"; import * as i3 from "../../user/services/user-preference.service"; const DRAWER_DEFAULT_MIN_WIDTH = 200; const DRAWER_MAX_WIDTH = 450; export class AbstractNavigationDrawerComponent { breakpoint; _log; userPreferenceService; showUser; user; showQuickPanel; quickPanelItems; // QuickPanelItem navigation; openedChange; resized; _sideNav; opened; _fixed; subBreakpoint; width; contentWidth; _config = { mode: 'over', opened: true, disableClose: false, }; constructor(breakpoint, _log, userPreferenceService) { this.breakpoint = breakpoint; this._log = _log; this.userPreferenceService = userPreferenceService; this.openedChange = new EventEmitter(); this.resized = new EventEmitter(); this._fixed = true; this.opened = true; this.quickPanelItems = ['language', 'settings', 'logout', 'impersonation']; if (this.userPreferenceService.drawerWidth !== undefined) { this.contentWidth = new BehaviorSubject(this.userPreferenceService.drawerWidth); } else { this.contentWidth = new BehaviorSubject(DRAWER_DEFAULT_MIN_WIDTH); } } ngOnInit() { this.resolveLayout(this._fixed); this.subBreakpoint = this.breakpoint.observe([Breakpoints.HandsetLandscape]).subscribe(result => { this._log.info('BreakpointObserver matches width of window: ' + this.breakpoint.isMatched('(max-width: 959.99px)')); if (this.breakpoint.isMatched('(max-width: 959.99px)')) { this.resolveLayout(false); this.opened = this._config.opened; } else { this.resolveLayout(this._fixed); this.opened = this._config.opened; } }); this.opened = this._config.opened; this.userPreferenceService.preferencesChanged$.subscribe(() => { this.width = this.userPreferenceService.drawerWidth; this.contentWidth.next(this.width); }); // this.width = this.userPreferenceService.getDrawerWidth(); } ngAfterViewInit() { this.openedChange = this._sideNav.openedChange; } ngOnDestroy() { this.subBreakpoint.unsubscribe(); this.openedChange.complete(); this.resized.complete(); } get config() { return this._config; } get fixed() { return this._fixed; } set fixed(value) { this._fixed = value; this.resolveLayout(this._fixed); } open() { if (!this._sideNav.opened) { this._sideNav.open(); } return Promise.resolve('open'); } close() { if (this._fixed) { return Promise.resolve('close'); } return this._sideNav.close(); } toggle() { if (this._fixed) { return Promise.resolve('open'); } return this._sideNav.toggle(); } resolveLayout(bool) { this._config = bool ? { mode: 'side', opened: true, disableClose: true, } : { mode: 'over', opened: false, disableClose: false, }; if (bool && this._sideNav) { this._sideNav.open(); } } swipeRight() { if (this.breakpoint.isMatched('(max-width: 959.99px)')) { this._sideNav.open(); } } swipeLeft() { if (this.breakpoint.isMatched('(max-width: 959.99px)')) { this._sideNav.close(); } } onResizeEvent(event) { if (event.rectangle.width > DRAWER_MAX_WIDTH) { this.width = DRAWER_MAX_WIDTH; } else if (event.rectangle.width < DRAWER_DEFAULT_MIN_WIDTH) { this.width = DRAWER_DEFAULT_MIN_WIDTH; } else { this.width = event.rectangle.width; } this.userPreferenceService._drawerWidthChanged$.next(this.width); this.contentWidth.next(this.width); this.resized.emit({ width: this.width }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractNavigationDrawerComponent, deps: [{ token: i1.BreakpointObserver }, { token: i2.LoggerService }, { token: i3.UserPreferenceService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractNavigationDrawerComponent, selector: "ncc-abstract-navigation-drawer", inputs: { showUser: "showUser", user: "user", showQuickPanel: "showQuickPanel", quickPanelItems: "quickPanelItems", navigation: "navigation", fixed: "fixed" }, outputs: { openedChange: "openedChange", resized: "resized" }, viewQueries: [{ propertyName: "_sideNav", first: true, predicate: ["sidenav"], descendants: true }], ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractNavigationDrawerComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-navigation-drawer', template: '', }] }], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i2.LoggerService }, { type: i3.UserPreferenceService }], propDecorators: { showUser: [{ type: Input }], user: [{ type: Input }], showQuickPanel: [{ type: Input }], quickPanelItems: [{ type: Input }], navigation: [{ type: Input }], openedChange: [{ type: Output }], resized: [{ type: Output }], _sideNav: [{ type: ViewChild, args: ['sidenav'] }], fixed: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZHJhd2VyL2Fic3RyYWN0LW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBcUIsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHcEUsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFLbkQsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFNN0IsTUFBTSxPQUFnQixpQ0FBaUM7SUEyQjdCO0lBQ0E7SUFDQTtJQTFCTixRQUFRLENBQVU7SUFDbEIsSUFBSSxDQUFPO0lBQ1gsY0FBYyxDQUFVO0lBQ3hCLGVBQWUsQ0FBYSxDQUFDLGlCQUFpQjtJQUM5QyxVQUFVLENBQVU7SUFFbkIsWUFBWSxDQUF3QjtJQUNwQyxPQUFPLENBQWdDO0lBRXhCLFFBQVEsQ0FBYTtJQUU5QyxNQUFNLENBQVU7SUFDYixNQUFNLENBQVU7SUFDaEIsYUFBYSxDQUFlO0lBRS9CLEtBQUssQ0FBUztJQUNkLFlBQVksQ0FBMEI7SUFFbkMsT0FBTyxHQUFHO1FBQ2hCLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLElBQUk7UUFDWixZQUFZLEVBQUUsS0FBSztLQUN0QixDQUFDO0lBRUYsWUFBc0IsVUFBOEIsRUFDOUIsSUFBbUIsRUFDbkIscUJBQTRDO1FBRjVDLGVB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QXpCLEtBQUs7Z0JBRVcsWUFBWTtzQkFBNUIsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQUV5QixRQUFRO3NCQUF2QyxTQUFTO3VCQUFDLFNBQVM7Z0JBcUVoQixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vLi4vdXNlci9tb2RlbHMvdXNlcic7XG5pbXBvcnQgJ2hhbW1lcmpzJztcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge01hdERyYXdlclRvZ2dsZVJlc3VsdCwgTWF0U2lkZW5hdn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7UmVzaXplRXZlbnR9IGZyb20gJ2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQnO1xuaW1wb3J0IHtVc2VyUHJlZmVyZW5jZVNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci1wcmVmZXJlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtNZW51UmVzaXplRXZlbnR9IGZyb20gJy4uL21vZGVsL25hdmlnYXRpb24tbWVudS1ldmVudHMnO1xuXG5jb25zdCBEUkFXRVJfREVGQVVMVF9NSU5fV0lEVEggPSAyMDA7XG5jb25zdCBEUkFXRVJfTUFYX1dJRFRIID0gNDUwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLWRyYXdlcicsXG4gICAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25EcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cblxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93VXNlcjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdXNlcjogVXNlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd1F1aWNrUGFuZWw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHF1aWNrUGFuZWxJdGVtczogQXJyYXk8YW55PjsgLy8gUXVpY2tQYW5lbEl0ZW1cbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGlvbjogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb3BlbmVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgQE91dHB1dCgpIHB1YmxpYyByZXNpemVkOiBFdmVudEVtaXR0ZXI8TWVudVJlc2l6ZUV2ZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3NpZGVuYXYnKSBwcm90ZWN0ZWQgX3NpZGVOYXY6IE1hdFNpZGVuYXY7XG5cbiAgICBwdWJsaWMgb3BlbmVkOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfZml4ZWQ6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIHN1YkJyZWFrcG9pbnQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xuICAgIHB1YmxpYyBjb250ZW50V2lkdGg6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuXG4gICAgcHJvdGVjdGVkIF9jb25maWcgPSB7XG4gICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnJlYWtwb2ludDogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1c2VyUHJlZmVyZW5jZVNlcnZpY2U6IFVzZXJQcmVmZXJlbmNlU2VydmljZSkge1xuICAgICAgICB0aGlzLm9wZW5lZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5yZXNpemVkID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51UmVzaXplRXZlbnQ+KCk7XG4gICAgICAgIHRoaXMuX2ZpeGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1aWNrUGFuZWxJdGVtcyA9IFsnbGFuZ3VhZ2UnLCAnc2V0dGluZ3MnLCAnbG9nb3V0JywgJ2ltcGVyc29uYXRpb24nXTtcbiAgICAgICAgaWYgKHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLmRyYXdlcldpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudFdpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLmRyYXdlcldpZHRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudFdpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERSQVdFUl9ERUZBVUxUX01JTl9XSURUSCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KHRoaXMuX2ZpeGVkKTtcbiAgICAgICAgdGhpcy5zdWJCcmVha3BvaW50ID0gdGhpcy5icmVha3BvaW50Lm9ic2VydmUoW0JyZWFrcG9pbnRzLkhhbmRzZXRMYW5kc2NhcGVdKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdCcmVha3BvaW50T2JzZXJ2ZXIgbWF0Y2hlcyB3aWR0aCBvZiB3aW5kb3c6ICcgKyB0aGlzLmJyZWFrcG9pbnQuaXNNYXRjaGVkKCcobWF4LXdpZHRoOiA5NTkuOTlweCknKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5icmVha3BvaW50LmlzTWF0Y2hlZCgnKG1heC13aWR0aDogOTU5Ljk5cHgpJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMYXlvdXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gdGhpcy5fY29uZmlnLm9wZW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KHRoaXMuX2ZpeGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IHRoaXMuX2NvbmZpZy5vcGVuZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9wZW5lZCA9IHRoaXMuX2NvbmZpZy5vcGVuZWQ7XG4gICAgICAgIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnByZWZlcmVuY2VzQ2hhbmdlZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5kcmF3ZXJXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY29udGVudFdpZHRoLm5leHQodGhpcy53aWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB0aGlzLndpZHRoID0gdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UuZ2V0RHJhd2VyV2lkdGgoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbmVkQ2hhbmdlID0gdGhpcy5fc2lkZU5hdi5vcGVuZWRDaGFuZ2U7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViQnJlYWtwb2ludC51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm9wZW5lZENoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJlc2l6ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgIH1cblxuICAgIGdldCBmaXhlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpeGVkO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZpeGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZpeGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVzb2x2ZUxheW91dCh0aGlzLl9maXhlZCk7XG4gICAgfVxuXG4gICAgb3BlbigpOiBQcm9taXNlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD4ge1xuICAgICAgICBpZiAoIXRoaXMuX3NpZGVOYXYub3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zaWRlTmF2Lm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCdvcGVuJyk7XG4gICAgfVxuXG4gICAgY2xvc2UoKTogUHJvbWlzZTxNYXREcmF3ZXJUb2dnbGVSZXN1bHQ+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpeGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCdjbG9zZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWRlTmF2LmNsb3NlKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKCk6IFByb21pc2U8TWF0RHJhd2VyVG9nZ2xlUmVzdWx0PiB7XG4gICAgICAgIGlmICh0aGlzLl9maXhlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnb3BlbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWRlTmF2LnRvZ2dsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZUxheW91dChib29sOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGJvb2wgPyB7XG4gICAgICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBtb2RlOiAnb3ZlcicsXG4gICAgICAgICAgICBvcGVuZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGJvb2wgJiYgdGhpcy5fc2lkZU5hdikge1xuICAgICAgICAgICAgdGhpcy5fc2lkZU5hdi5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2lwZVJpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5icmVha3BvaW50LmlzTWF0Y2hlZCgnKG1heC13aWR0aDogOTU5Ljk5cHgpJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpZGVOYXYub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3dpcGVMZWZ0KCkge1xuICAgICAgICBpZiAodGhpcy5icmVha3BvaW50LmlzTWF0Y2hlZCgnKG1heC13aWR0aDogOTU5Ljk5cHgpJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpZGVOYXYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVzaXplRXZlbnQoZXZlbnQ6IFJlc2l6ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPiBEUkFXRVJfTUFYX1dJRFRIKSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gRFJBV0VSX01BWF9XSURUSDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPCBEUkFXRVJfREVGQVVMVF9NSU5fV0lEVEgpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBEUkFXRVJfREVGQVVMVF9NSU5fV0lEVEg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZXZlbnQucmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLl9kcmF3ZXJXaWR0aENoYW5nZWQkLm5leHQodGhpcy53aWR0aCk7XG4gICAgICAgIHRoaXMuY29udGVudFdpZHRoLm5leHQodGhpcy53aWR0aCk7XG4gICAgICAgIHRoaXMucmVzaXplZC5lbWl0KHt3aWR0aDogdGhpcy53aWR0aH0pO1xuICAgIH1cbn1cbiJdfQ==