@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
172 lines • 20 kB
JavaScript
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==