@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
163 lines • 21.7 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.preferences);
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.preferences);
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, headers) {
this._preferences.headers[viewId] = headers;
this._savePreferences();
}
setHeadersAndSorts(viewId, headers, sorts) {
if (!!sorts) {
this._preferences.sorts[viewId] = sorts;
}
this.setHeaders(viewId, headers);
}
getHeaders(viewId) {
return this._preferences.headers[viewId];
}
setSorts(viewId, sorts) {
this._preferences.sorts[viewId] = sorts;
}
setSortsAndSave(viewId, sorts) {
this.setSorts(viewId, sorts);
this._savePreferences();
}
getSorts(viewId) {
return this._preferences.sorts[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: {},
sorts: {}
};
}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcmVmZXJlbmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3VzZXIvc2VydmljZXMvdXNlci1wcmVmZXJlbmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQU1wRCxPQUFPLEVBQWEsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUc1QyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUNqQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFLN0IsTUFBTSxPQUFPLHFCQUFxQjtJQVNSO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFYWixZQUFZLENBQWM7SUFDMUIsb0JBQW9CLENBQWdCO0lBQ3BDLElBQUksQ0FBZTtJQUNuQixVQUFVLENBQWU7SUFDNUIsb0JBQW9CLENBQWtCO0lBQ25DLE9BQU8sQ0FBVTtJQUUzQixZQUFzQixZQUF5QixFQUN6QixvQkFBeUMsRUFDekMsT0FBc0IsRUFDdEIsU0FBMEIsRUFDMUIsVUFBNEI7UUFKNUIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7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QU07WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN4RTtJQUNMLENBQUM7SUFFUyxpQkFBaUI7UUFDdkIsT0FBTztZQUNILFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsT0FBTyxFQUFFLEVBQUU7WUFDWCxXQUFXLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxFQUFFO1lBQ2YsS0FBSyxFQUFFLEVBQUU7U0FDWixDQUFDO0lBQ04sQ0FBQzt3R0EvSlEscUJBQXFCOzRHQUFyQixxQkFBcUIsY0FGbEIsTUFBTTs7NEZBRVQscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJlZmVyZW5jZXN9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcHJlZmVyZW5jZXMnO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3VzZXItcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTb3J0aW5nSGVhZGVyfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9zb3J0aW5nLWhlYWRlclwiO1xuXG5jb25zdCBEUkFXRVJfREVGQVVMVF9XSURUSCA9IDIwMDtcbmNvbnN0IERSQVdFUl9ERUJPVU5DRSA9IDEwMDA7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlclByZWZlcmVuY2VTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByb3RlY3RlZCBfcHJlZmVyZW5jZXM6IFByZWZlcmVuY2VzO1xuICAgIHByb3RlY3RlZCBfcHJlZmVyZW5jZXNDaGFuZ2VkJDogU3ViamVjdDx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgX3N1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBfc3ViQW5vbnltOiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIF9kcmF3ZXJXaWR0aENoYW5nZWQkOiBTdWJqZWN0PG51bWJlcj47XG4gICAgcHJvdGVjdGVkIF9hbm9ueW06IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJSZXNvdXJjZVNlcnZpY2U6IFVzZXJSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja2JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzID0gdGhpcy5fZW1wdHlQcmVmZXJlbmNlcygpO1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlc0NoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgdGhpcy5fZHJhd2VyV2lkdGhDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgICAgICAgdGhpcy5fYW5vbnltID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5fdXNlclNlcnZpY2UudXNlciQuc3Vic2NyaWJlKGxvZ2dlZFVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxvZ2dlZFVzZXIgJiYgbG9nZ2VkVXNlci5pZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyUmVzb3VyY2VTZXJ2aWNlLmdldFByZWZlcmVuY2VzKCkuc3Vic2NyaWJlKHByZWZzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzID0gdGhpcy5fZW1wdHlQcmVmZXJlbmNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcmVmZXJlbmNlcywgcHJlZnMucHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcyA9IHRoaXMuX2VtcHR5UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlc0NoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc3ViQW5vbnltID0gdGhpcy5fdXNlclNlcnZpY2UuYW5vbnltb3VzVXNlciQuc3Vic2NyaWJlKGxvZ2dlZFVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxvZ2dlZFVzZXIgJiYgbG9nZ2VkVXNlci5pZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyUmVzb3VyY2VTZXJ2aWNlLmdldFB1YmxpY1ByZWZlcmVuY2VzKCkuc3Vic2NyaWJlKHByZWZzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzID0gdGhpcy5fZW1wdHlQcmVmZXJlbmNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcmVmZXJlbmNlcywgcHJlZnMucHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbm9ueW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMgPSB0aGlzLl9lbXB0eVByZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYW5vbnltID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RyYXdlcldpZHRoQ2hhbmdlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZShEUkFXRVJfREVCT1VOQ0UpXG4gICAgICAgICkuc3Vic2NyaWJlKG5ld1dpZHRoID0+IHtcbiAgICAgICAgICAgIHRoaXMuZHJhd2VyV2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlc0NoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRhc2tGaWx0ZXJzKHZpZXdJZDogc3RyaW5nLCB2YWx1ZTogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy50YXNrRmlsdGVyc1t2aWV3SWRdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NhdmVQcmVmZXJlbmNlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUYXNrRmlsdGVycyh2aWV3SWQ6IHN0cmluZyk6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMudGFza0ZpbHRlcnNbdmlld0lkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2FzZUZpbHRlcnModmlld0lkOiBzdHJpbmcsIHZhbHVlOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLmNhc2VGaWx0ZXJzW3ZpZXdJZF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2F2ZVByZWZlcmVuY2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENhc2VGaWx0ZXJzKHZpZXdJZDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlcy5jYXNlRmlsdGVyc1t2aWV3SWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIZWFkZXJzKHZpZXdJZDogc3RyaW5nLCBoZWFkZXJzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLmhlYWRlcnNbdmlld0lkXSA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuX3NhdmVQcmVmZXJlbmNlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIZWFkZXJzQW5kU29ydHModmlld0lkOiBzdHJpbmcsIGhlYWRlcnM6IEFycmF5PHN0cmluZz4sIHNvcnRzPzogQXJyYXk8U29ydGluZ0hlYWRlcj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhc29ydHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLnNvcnRzW3ZpZXdJZF0gPSBzb3J0cztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEhlYWRlcnModmlld0lkLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGVhZGVycyh2aWV3SWQ6IHN0cmluZyk6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMuaGVhZGVyc1t2aWV3SWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTb3J0cyh2aWV3SWQ6IHN0cmluZywgc29ydHM6IEFycmF5PFNvcnRpbmdIZWFkZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLnNvcnRzW3ZpZXdJZF0gPSBzb3J0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U29ydHNBbmRTYXZlKHZpZXdJZDogc3RyaW5nLCBzb3J0czogQXJyYXk8U29ydGluZ0hlYWRlcj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTb3J0cyh2aWV3SWQsIHNvcnRzKTtcbiAgICAgICAgdGhpcy5fc2F2ZVByZWZlcmVuY2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNvcnRzKHZpZXdJZDogc3RyaW5nKTogQXJyYXk8U29ydGluZ0hlYWRlcj4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMuc29ydHNbdmlld0lkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxlKGxvY2FsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5fc2F2ZVByZWZlcmVuY2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMubG9jYWxlO1xuICAgIH1cblxuICAgIHNldCBkcmF3ZXJXaWR0aChkcmF3ZXJXaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLmRyYXdlcldpZHRoID0gZHJhd2VyV2lkdGg7XG4gICAgICAgIHRoaXMuX3NhdmVQcmVmZXJlbmNlcygpO1xuICAgIH1cblxuICAgIGdldCBkcmF3ZXJXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMuZHJhd2VyV2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcmVmZXJlbmNlc0NoYW5nZWQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNDaGFuZ2VkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3NhdmVQcmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hbm9ueW0pIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJSZXNvdXJjZVNlcnZpY2Uuc2V0UHJlZmVyZW5jZXModGhpcy5fcHJlZmVyZW5jZXMpLnN1YnNjcmliZShyZXN1bHRNZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdE1lc3NhZ2UocmVzdWx0TWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJSZXNvdXJjZVNlcnZpY2Uuc2V0UHVibGljUHJlZmVyZW5jZXModGhpcy5fcHJlZmVyZW5jZXMpLnN1YnNjcmliZShyZXN1bHRNZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdE1lc3NhZ2UocmVzdWx0TWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXN1bHRNZXNzYWdlKHJlc3VsdE1lc3NhZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRNZXNzYWdlLnN1Y2Nlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuU3VjY2Vzc1NuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdwcmVmZXJlbmNlcy5zbmFja2Jhci5zYXZlU3VjY2VzcycpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdwcmVmZXJlbmNlcy5zbmFja2Jhci5zYXZlRmFpbHVyZScpKTtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVXNlciBwcmVmZXJlbmNlcyBmYWlsZWQgdG8gc2F2ZScsIHJlc3VsdE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9lbXB0eVByZWZlcmVuY2VzKCk6IFByZWZlcmVuY2VzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRyYXdlcldpZHRoOiBEUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgY2FzZUZpbHRlcnM6IHt9LFxuICAgICAgICAgICAgdGFza0ZpbHRlcnM6IHt9LFxuICAgICAgICAgICAgc29ydHM6IHt9XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19