UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

146 lines 19.4 kB
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==