@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
146 lines • 19.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "./user.service";
import * as i2 from "../../resources/engine-endpoint/user-resource.service";
import * as i3 from "../../logger/services/logger.service";
import * as i4 from "../../snack-bar/services/snack-bar.service";
import * as i5 from "@ngx-translate/core";
const DRAWER_DEFAULT_WIDTH = 200;
const DRAWER_DEBOUNCE = 1000;
export class UserPreferenceService {
_userService;
_userResourceService;
_logger;
_snackbar;
_translate;
_preferences;
_preferencesChanged$;
_sub;
_subAnonym;
_drawerWidthChanged$;
_anonym;
constructor(_userService, _userResourceService, _logger, _snackbar, _translate) {
this._userService = _userService;
this._userResourceService = _userResourceService;
this._logger = _logger;
this._snackbar = _snackbar;
this._translate = _translate;
this._preferences = this._emptyPreferences();
this._preferencesChanged$ = new Subject();
this._drawerWidthChanged$ = new Subject();
this._anonym = false;
this._sub = this._userService.user$.subscribe(loggedUser => {
if (loggedUser && loggedUser.id !== '') {
this._userResourceService.getPreferences().subscribe(prefs => {
this._preferences = this._emptyPreferences();
Object.assign(this._preferences, prefs);
this._preferencesChanged$.next();
});
}
else {
this._preferences = this._emptyPreferences();
this._preferencesChanged$.next();
}
});
this._subAnonym = this._userService.anonymousUser$.subscribe(loggedUser => {
if (loggedUser && loggedUser.id !== '') {
this._userResourceService.getPublicPreferences().subscribe(prefs => {
this._preferences = this._emptyPreferences();
Object.assign(this._preferences, prefs);
this._preferencesChanged$.next();
this._anonym = true;
});
}
else {
this._preferences = this._emptyPreferences();
this._preferencesChanged$.next();
this._anonym = false;
}
});
this._drawerWidthChanged$.asObservable().pipe(debounceTime(DRAWER_DEBOUNCE)).subscribe(newWidth => {
this.drawerWidth = newWidth;
});
}
ngOnDestroy() {
this._sub.unsubscribe();
this._preferencesChanged$.complete();
}
setTaskFilters(viewId, value) {
this._preferences.taskFilters[viewId] = value;
this._savePreferences();
}
getTaskFilters(viewId) {
return this._preferences.taskFilters[viewId];
}
setCaseFilters(viewId, value) {
this._preferences.caseFilters[viewId] = value;
this._savePreferences();
}
getCaseFilters(viewId) {
return this._preferences.caseFilters[viewId];
}
setHeaders(viewId, value) {
this._preferences.headers[viewId] = value;
this._savePreferences();
}
getHeaders(viewId) {
return this._preferences.headers[viewId];
}
setLocale(locale) {
this._preferences.locale = locale;
this._savePreferences();
}
getLocale() {
return this._preferences.locale;
}
set drawerWidth(drawerWidth) {
this._preferences.drawerWidth = drawerWidth;
this._savePreferences();
}
get drawerWidth() {
return this._preferences.drawerWidth;
}
get preferencesChanged$() {
return this._preferencesChanged$.asObservable();
}
_savePreferences() {
if (!this._anonym) {
this._userResourceService.setPreferences(this._preferences).subscribe(resultMessage => {
this.resultMessage(resultMessage);
});
}
else {
this._userResourceService.setPublicPreferences(this._preferences).subscribe(resultMessage => {
this.resultMessage(resultMessage);
});
}
}
resultMessage(resultMessage) {
if (typeof resultMessage.success === 'string') {
this._snackbar.openSuccessSnackBar(this._translate.instant('preferences.snackbar.saveSuccess'));
}
else {
this._snackbar.openErrorSnackBar(this._translate.instant('preferences.snackbar.saveFailure'));
this._logger.error('User preferences failed to save', resultMessage);
}
}
_emptyPreferences() {
return {
drawerWidth: DRAWER_DEFAULT_WIDTH,
headers: {},
caseFilters: {},
taskFilters: {}
};
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserPreferenceService, deps: [{ token: i1.UserService }, { token: i2.UserResourceService }, { token: i3.LoggerService }, { token: i4.SnackBarService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserPreferenceService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserPreferenceService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.UserService }, { type: i2.UserResourceService }, { type: i3.LoggerService }, { type: i4.SnackBarService }, { type: i5.TranslateService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcmVmZXJlbmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3VzZXIvc2VydmljZXMvdXNlci1wcmVmZXJlbmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQU1wRCxPQUFPLEVBQWEsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUU1QyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUNqQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFLN0IsTUFBTSxPQUFPLHFCQUFxQjtJQVNSO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFYWixZQUFZLENBQWM7SUFDMUIsb0JBQW9CLENBQWdCO0lBQ3BDLElBQUksQ0FBZTtJQUNuQixVQUFVLENBQWU7SUFDNUIsb0JBQW9CLENBQWtCO0lBQ25DLE9BQU8sQ0FBVTtJQUUzQixZQUFzQixZQUF5QixFQUN6QixvQkFBeUMsRUFDekMsT0FBc0IsRUFDdEIsU0FBMEIsRUFDMUIsVUFBNEI7UUFKNUIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7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WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ3hGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFUyxhQUFhLENBQUMsYUFBYTtRQUNqQyxJQUFJLE9BQU8sYUFBYSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7U0FDbkc7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO1lBQzlGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3hFO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQjtRQUN2QixPQUFPO1lBQ0gsV0FBVyxFQUFFLG9CQUFvQjtZQUNqQyxPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEVBQUU7U0FDbEIsQ0FBQztJQUNOLENBQUM7d0dBMUlRLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRmxCLE1BQU07OzRGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1ByZWZlcmVuY2VzfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3ByZWZlcmVuY2VzJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC91c2VyLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuY29uc3QgRFJBV0VSX0RFRkFVTFRfV0lEVEggPSAyMDA7XG5jb25zdCBEUkFXRVJfREVCT1VOQ0UgPSAxMDAwO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJQcmVmZXJlbmNlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwcm90ZWN0ZWQgX3ByZWZlcmVuY2VzOiBQcmVmZXJlbmNlcztcbiAgICBwcm90ZWN0ZWQgX3ByZWZlcmVuY2VzQ2hhbmdlZCQ6IFN1YmplY3Q8dm9pZD47XG4gICAgcHJvdGVjdGVkIF9zdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgX3N1YkFub255bTogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBfZHJhd2VyV2lkdGhDaGFuZ2VkJDogU3ViamVjdDxudW1iZXI+O1xuICAgIHByb3RlY3RlZCBfYW5vbnltOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF91c2VyUmVzb3VyY2VTZXJ2aWNlOiBVc2VyUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tiYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcyA9IHRoaXMuX2VtcHR5UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICAgIHRoaXMuX2RyYXdlcldpZHRoQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgICAgIHRoaXMuX2Fub255bSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZShsb2dnZWRVc2VyID0+IHtcbiAgICAgICAgICAgIGlmIChsb2dnZWRVc2VyICYmIGxvZ2dlZFVzZXIuaWQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlclJlc291cmNlU2VydmljZS5nZXRQcmVmZXJlbmNlcygpLnN1YnNjcmliZShwcmVmcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcyA9IHRoaXMuX2VtcHR5UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJlZmVyZW5jZXMsIHByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMgPSB0aGlzLl9lbXB0eVByZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3N1YkFub255bSA9IHRoaXMuX3VzZXJTZXJ2aWNlLmFub255bW91c1VzZXIkLnN1YnNjcmliZShsb2dnZWRVc2VyID0+IHtcbiAgICAgICAgICAgIGlmIChsb2dnZWRVc2VyICYmIGxvZ2dlZFVzZXIuaWQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlclJlc291cmNlU2VydmljZS5nZXRQdWJsaWNQcmVmZXJlbmNlcygpLnN1YnNjcmliZShwcmVmcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcyA9IHRoaXMuX2VtcHR5UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJlZmVyZW5jZXMsIHByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYW5vbnltID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzID0gdGhpcy5fZW1wdHlQcmVmZXJlbmNlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Fub255bSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kcmF3ZXJXaWR0aENoYW5nZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoRFJBV0VSX0RFQk9VTkNFKVxuICAgICAgICApLnN1YnNjcmliZShuZXdXaWR0aCA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyYXdlcldpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUYXNrRmlsdGVycyh2aWV3SWQ6IHN0cmluZywgdmFsdWU6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMudGFza0ZpbHRlcnNbdmlld0lkXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zYXZlUHJlZmVyZW5jZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFza0ZpbHRlcnModmlld0lkOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnRhc2tGaWx0ZXJzW3ZpZXdJZF07XG4gICAgfVxuXG4gICAgcHVibGljIHNldENhc2VGaWx0ZXJzKHZpZXdJZDogc3RyaW5nLCB2YWx1ZTogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy5jYXNlRmlsdGVyc1t2aWV3SWRdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NhdmVQcmVmZXJlbmNlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDYXNlRmlsdGVycyh2aWV3SWQ6IHN0cmluZyk6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMuY2FzZUZpbHRlcnNbdmlld0lkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SGVhZGVycyh2aWV3SWQ6IHN0cmluZywgdmFsdWU6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuaGVhZGVyc1t2aWV3SWRdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NhdmVQcmVmZXJlbmNlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIZWFkZXJzKHZpZXdJZDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlcy5oZWFkZXJzW3ZpZXdJZF07XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsZShsb2NhbGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHRoaXMuX3NhdmVQcmVmZXJlbmNlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLmxvY2FsZTtcbiAgICB9XG5cbiAgICBzZXQgZHJhd2VyV2lkdGgoZHJhd2VyV2lkdGg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy5kcmF3ZXJXaWR0aCA9IGRyYXdlcldpZHRoO1xuICAgICAgICB0aGlzLl9zYXZlUHJlZmVyZW5jZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZHJhd2VyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLmRyYXdlcldpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJlZmVyZW5jZXNDaGFuZ2VkJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzQ2hhbmdlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9zYXZlUHJlZmVyZW5jZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fYW5vbnltKSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyUmVzb3VyY2VTZXJ2aWNlLnNldFByZWZlcmVuY2VzKHRoaXMuX3ByZWZlcmVuY2VzKS5zdWJzY3JpYmUocmVzdWx0TWVzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRNZXNzYWdlKHJlc3VsdE1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyUmVzb3VyY2VTZXJ2aWNlLnNldFB1YmxpY1ByZWZlcmVuY2VzKHRoaXMuX3ByZWZlcmVuY2VzKS5zdWJzY3JpYmUocmVzdWx0TWVzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRNZXNzYWdlKHJlc3VsdE1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzdWx0TWVzc2FnZShyZXN1bHRNZXNzYWdlKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0TWVzc2FnZS5zdWNjZXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlblN1Y2Nlc3NTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgncHJlZmVyZW5jZXMuc25hY2tiYXIuc2F2ZVN1Y2Nlc3MnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgncHJlZmVyZW5jZXMuc25hY2tiYXIuc2F2ZUZhaWx1cmUnKSk7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1VzZXIgcHJlZmVyZW5jZXMgZmFpbGVkIHRvIHNhdmUnLCByZXN1bHRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZW1wdHlQcmVmZXJlbmNlcygpOiBQcmVmZXJlbmNlcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkcmF3ZXJXaWR0aDogRFJBV0VSX0RFRkFVTFRfV0lEVEgsXG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIGNhc2VGaWx0ZXJzOiB7fSxcbiAgICAgICAgICAgIHRhc2tGaWx0ZXJzOiB7fVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==