@trudb/tru-common-lib 0.1.397 → 0.1.409
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/app-settings-dialog/windows/classes/tru-window-open-on-start-setting.mjs +3 -0
- package/esm2022/lib/components/app-settings-dialog/windows/on-starup/tru-app-window-open-on-startup-setting.mjs +29 -23
- package/esm2022/lib/components/app-settings-dialog/windows/tru-app-window-settings.mjs +4 -11
- package/esm2022/lib/services/tru-user-preference-manager.mjs +120 -0
- package/fesm2022/trudb-tru-common-lib.mjs +234 -121
- package/fesm2022/trudb-tru-common-lib.mjs.map +1 -1
- package/lib/components/app-settings-dialog/windows/classes/tru-window-open-on-start-setting.d.ts +6 -0
- package/lib/components/app-settings-dialog/windows/on-starup/tru-app-window-open-on-startup-setting.d.ts +5 -3
- package/lib/components/app-settings-dialog/windows/tru-app-window-settings.d.ts +1 -5
- package/lib/services/tru-user-preference-manager.d.ts +39 -0
- package/package.json +1 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export class TruWindowOpenOnStartSetting {
|
|
2
|
+
}
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LXdpbmRvdy1vcGVuLW9uLXN0YXJ0LXNldHRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXNldHRpbmdzLWRpYWxvZy93aW5kb3dzL2NsYXNzZXMvdHJ1LXdpbmRvdy1vcGVuLW9uLXN0YXJ0LXNldHRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFnQiwyQkFBMkI7Q0FLaEQiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJ1V2luZG93T3Blbk9uU3RhcnRTZXR0aW5nIHtcclxuICBhYnN0cmFjdCBuYW1lOiBzdHJpbmc7XHJcbiAgYWJzdHJhY3QgbGFiZWw6IHN0cmluZztcclxuICBhYnN0cmFjdCBjaGVja2VkOiBib29sZWFuO1xyXG4gIGFic3RyYWN0IG1vZGlmaWVkOiBib29sZWFuO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,41 +1,47 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../../../services/tru-
|
|
4
|
-
import * as i2 from "
|
|
5
|
-
import * as i3 from "@angular/
|
|
6
|
-
import * as i4 from "@angular/material/
|
|
3
|
+
import * as i1 from "../../../../services/tru-user-preference-manager";
|
|
4
|
+
import * as i2 from "../../../../services/tru-model-table-lookup";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "@angular/material/checkbox";
|
|
7
|
+
import * as i5 from "@angular/material/table";
|
|
7
8
|
export class TruAppWindowOpenOnStartupSetting {
|
|
9
|
+
userPreferenceManager;
|
|
8
10
|
modelTableLookup;
|
|
9
|
-
|
|
11
|
+
settings = [];
|
|
10
12
|
displayedColumns = [];
|
|
11
|
-
constructor(modelTableLookup) {
|
|
13
|
+
constructor(userPreferenceManager, modelTableLookup) {
|
|
14
|
+
this.userPreferenceManager = userPreferenceManager;
|
|
12
15
|
this.modelTableLookup = modelTableLookup;
|
|
13
16
|
let tables = this.modelTableLookup.all;
|
|
14
|
-
let
|
|
17
|
+
let openOnStartSettings = [];
|
|
15
18
|
tables.forEach((table) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
let name = table.name?.toUpperCase() + '_OPEN_ON_START';
|
|
20
|
+
let openOnStart = table.openOnStart;
|
|
21
|
+
let userPreferenceOpenOnStart = this.userPreferenceManager.get(name);
|
|
22
|
+
if (userPreferenceOpenOnStart)
|
|
23
|
+
openOnStart = Boolean(userPreferenceOpenOnStart);
|
|
24
|
+
openOnStartSettings.push({
|
|
25
|
+
name: name,
|
|
26
|
+
label: table.name,
|
|
27
|
+
checked: openOnStart,
|
|
28
|
+
modified: false
|
|
29
|
+
});
|
|
25
30
|
});
|
|
26
|
-
this.
|
|
31
|
+
this.settings = openOnStartSettings;
|
|
27
32
|
}
|
|
28
33
|
onRowClicked = (row) => {
|
|
29
|
-
row.
|
|
34
|
+
row.checked = !row.checked;
|
|
35
|
+
row.modified = true;
|
|
30
36
|
};
|
|
31
37
|
ngOnInit() {
|
|
32
38
|
this.displayedColumns = ['label', 'checked'];
|
|
33
39
|
}
|
|
34
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruAppWindowOpenOnStartupSetting, deps: [{ token: i1.TruModelTableLookup }], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruAppWindowOpenOnStartupSetting, selector: "tru-app-window-open-on-startup-setting", ngImport: i0, template: "<p>Open Window(s) On Startup</p>\r\n<table mat-table [dataSource]=\"
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruAppWindowOpenOnStartupSetting, deps: [{ token: i1.TruUserPreferenceManager }, { token: i2.TruModelTableLookup }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruAppWindowOpenOnStartupSetting, selector: "tru-app-window-open-on-startup-setting", ngImport: i0, template: "<p>Open Window(s) On Startup</p>\r\n<table mat-table [dataSource]=\"settings\">\r\n <ng-container matColumnDef=\"label\">\r\n <th mat-header-cell *matHeaderCellDef> Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.label}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"checked\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"tru-app-window-open-on-startup-checkbox\">\r\n <mat-checkbox [(ngModel)]=\"element.checked\"></mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onRowClicked(row)\"></tr>\r\n</table>\r\n", styles: [".tru-app-window-open-on-startup-checkbox{text-align:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }] });
|
|
36
42
|
}
|
|
37
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruAppWindowOpenOnStartupSetting, decorators: [{
|
|
38
44
|
type: Component,
|
|
39
|
-
args: [{ selector: 'tru-app-window-open-on-startup-setting', template: "<p>Open Window(s) On Startup</p>\r\n<table mat-table [dataSource]=\"
|
|
40
|
-
}], ctorParameters: () => [{ type: i1.TruModelTableLookup }] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
args: [{ selector: 'tru-app-window-open-on-startup-setting', template: "<p>Open Window(s) On Startup</p>\r\n<table mat-table [dataSource]=\"settings\">\r\n <ng-container matColumnDef=\"label\">\r\n <th mat-header-cell *matHeaderCellDef> Name </th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.label}} </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"checked\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"tru-app-window-open-on-startup-checkbox\">\r\n <mat-checkbox [(ngModel)]=\"element.checked\"></mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onRowClicked(row)\"></tr>\r\n</table>\r\n", styles: [".tru-app-window-open-on-startup-checkbox{text-align:center;justify-content:center}\n"] }]
|
|
46
|
+
}], ctorParameters: () => [{ type: i1.TruUserPreferenceManager }, { type: i2.TruModelTableLookup }] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWFwcC13aW5kb3ctb3Blbi1vbi1zdGFydHVwLXNldHRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXNldHRpbmdzLWRpYWxvZy93aW5kb3dzL29uLXN0YXJ1cC90cnUtYXBwLXdpbmRvdy1vcGVuLW9uLXN0YXJ0dXAtc2V0dGluZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9hcHAtc2V0dGluZ3MtZGlhbG9nL3dpbmRvd3Mvb24tc3RhcnVwL3RydS1hcHAtd2luZG93LW9wZW4tb24tc3RhcnR1cC1zZXR0aW5nLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sZ0NBQWdDO0lBTWpDO0lBQ0E7SUFMVixRQUFRLEdBQXVDLEVBQUUsQ0FBQztJQUNsRCxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFFaEMsWUFDVSxxQkFBK0MsRUFDL0MsZ0JBQXFDO1FBRHJDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBMEI7UUFDL0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUU3QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLElBQUksbUJBQW1CLEdBQXVDLEVBQUUsQ0FBQztRQUNqRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBeUIsRUFBRSxFQUFFO1lBQzNDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7WUFDeEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLHlCQUF5QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckUsSUFBSSx5QkFBeUI7Z0JBQzNCLFdBQVcsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUVuRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJO2dCQUNWLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBYztnQkFDM0IsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxLQUFLO2FBQ2UsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7UUFDMUIsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxDQUFBO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO3VHQW5DVSxnQ0FBZ0M7MkZBQWhDLGdDQUFnQyw4RUNYN0MsbXdCQWlCQTs7MkZETmEsZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLHdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVRhYmxlQ29uZmlnQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtdGFibGUtY29uZmlnLWJhc2UnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFRhYmxlTG9va3VwIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLXRhYmxlLWxvb2t1cCc7XHJcbmltcG9ydCB7IFRydVVzZXJQcmVmZXJlbmNlTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RydS11c2VyLXByZWZlcmVuY2UtbWFuYWdlcic7XHJcbmltcG9ydCB7IFRydVdpbmRvd09wZW5PblN0YXJ0U2V0dGluZyB9IGZyb20gJy4uL2NsYXNzZXMvdHJ1LXdpbmRvdy1vcGVuLW9uLXN0YXJ0LXNldHRpbmcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cnUtYXBwLXdpbmRvdy1vcGVuLW9uLXN0YXJ0dXAtc2V0dGluZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1hcHAtd2luZG93LW9wZW4tb24tc3RhcnR1cC1zZXR0aW5nLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1hcHAtd2luZG93LW9wZW4tb24tc3RhcnR1cC1zZXR0aW5nLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVBcHBXaW5kb3dPcGVuT25TdGFydHVwU2V0dGluZyBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHNldHRpbmdzOiBBcnJheTxUcnVXaW5kb3dPcGVuT25TdGFydFNldHRpbmc+ID0gW107XHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlTWFuYWdlcjogVHJ1VXNlclByZWZlcmVuY2VNYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSBtb2RlbFRhYmxlTG9va3VwOiBUcnVNb2RlbFRhYmxlTG9va3VwKSB7XHJcblxyXG4gICAgbGV0IHRhYmxlcyA9IHRoaXMubW9kZWxUYWJsZUxvb2t1cC5hbGw7XHJcbiAgICBsZXQgb3Blbk9uU3RhcnRTZXR0aW5nczogQXJyYXk8VHJ1V2luZG93T3Blbk9uU3RhcnRTZXR0aW5nPiA9IFtdOyAgXHJcbiAgICB0YWJsZXMuZm9yRWFjaCgodGFibGU6IFRydVRhYmxlQ29uZmlnQmFzZSkgPT4ge1xyXG4gICAgICBsZXQgbmFtZSA9IHRhYmxlLm5hbWU/LnRvVXBwZXJDYXNlKCkgKyAnX09QRU5fT05fU1RBUlQnO1xyXG4gICAgICBsZXQgb3Blbk9uU3RhcnQgPSB0YWJsZS5vcGVuT25TdGFydDtcclxuICAgICAgbGV0IHVzZXJQcmVmZXJlbmNlT3Blbk9uU3RhcnQgPSB0aGlzLnVzZXJQcmVmZXJlbmNlTWFuYWdlci5nZXQobmFtZSk7XHJcbiAgICAgIGlmICh1c2VyUHJlZmVyZW5jZU9wZW5PblN0YXJ0KVxyXG4gICAgICAgIG9wZW5PblN0YXJ0ID0gQm9vbGVhbih1c2VyUHJlZmVyZW5jZU9wZW5PblN0YXJ0KTtcclxuICAgICAgXHJcbiAgICAgIG9wZW5PblN0YXJ0U2V0dGluZ3MucHVzaCh7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICBsYWJlbDogdGFibGUubmFtZSBhcyBzdHJpbmcsXHJcbiAgICAgICAgY2hlY2tlZDogb3Blbk9uU3RhcnQsXHJcbiAgICAgICAgbW9kaWZpZWQ6IGZhbHNlXHJcbiAgICAgIH0gYXMgVHJ1V2luZG93T3Blbk9uU3RhcnRTZXR0aW5nKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IG9wZW5PblN0YXJ0U2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBvblJvd0NsaWNrZWQgPSAocm93OiBhbnkpID0+IHtcclxuICAgIHJvdy5jaGVja2VkID0gIXJvdy5jaGVja2VkO1xyXG4gICAgcm93Lm1vZGlmaWVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gWydsYWJlbCcsICdjaGVja2VkJ107XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8cD5PcGVuIFdpbmRvdyhzKSBPbiBTdGFydHVwPC9wPlxyXG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInNldHRpbmdzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYWJlbFwiPlxyXG4gICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gTmFtZSA8L3RoPlxyXG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LmxhYmVsfX0gPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjaGVja2VkXCI+XHJcbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPjwvdGg+XHJcbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIGNsYXNzPVwidHJ1LWFwcC13aW5kb3ctb3Blbi1vbi1zdGFydHVwLWNoZWNrYm94XCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJlbGVtZW50LmNoZWNrZWRcIj48L21hdC1jaGVja2JveD5cclxuICAgIDwvdGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcbiAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgKGNsaWNrKT1cIm9uUm93Q2xpY2tlZChyb3cpXCI+PC90cj5cclxuPC90YWJsZT5cclxuIl19
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "./on-starup/tru-app-window-open-on-startup-setting";
|
|
4
3
|
export class TruAppWindowSettings {
|
|
5
|
-
|
|
6
|
-
message;
|
|
7
|
-
constructor() {
|
|
8
|
-
this.title = '';
|
|
9
|
-
this.message = '';
|
|
10
|
-
}
|
|
11
|
-
ngOnInit() { }
|
|
4
|
+
constructor() { }
|
|
12
5
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruAppWindowSettings, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruAppWindowSettings, selector: "tru-app-window-settings", ngImport: i0, template: "<div>\r\n
|
|
6
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruAppWindowSettings, selector: "tru-app-window-settings", ngImport: i0, template: "<div>\r\n \r\n</div>\r\n", styles: [""] });
|
|
14
7
|
}
|
|
15
8
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruAppWindowSettings, decorators: [{
|
|
16
9
|
type: Component,
|
|
17
|
-
args: [{ selector: 'tru-app-window-settings', template: "<div>\r\n
|
|
10
|
+
args: [{ selector: 'tru-app-window-settings', template: "<div>\r\n \r\n</div>\r\n" }]
|
|
18
11
|
}], ctorParameters: () => [] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWFwcC13aW5kb3ctc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXNldHRpbmdzLWRpYWxvZy93aW5kb3dzL3RydS1hcHAtd2luZG93LXNldHRpbmdzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1zZXR0aW5ncy1kaWFsb2cvd2luZG93cy90cnUtYXBwLXdpbmRvdy1zZXR0aW5ncy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT2xELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsZ0JBQWUsQ0FBQzt1R0FETCxvQkFBb0I7MkZBQXBCLG9CQUFvQiwrRENQakMsMkJBR0E7OzJGRElhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cnUtYXBwLXdpbmRvdy1zZXR0aW5ncycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1hcHAtd2luZG93LXNldHRpbmdzLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1hcHAtd2luZG93LXNldHRpbmdzLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVBcHBXaW5kb3dTZXR0aW5ncyB7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcblxyXG4iLCI8ZGl2PlxyXG4gIFxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { breeze, Predicate } from 'breeze-client';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./tru-model-type-lookup";
|
|
5
|
+
import * as i2 from "./tru-app-environment";
|
|
6
|
+
import * as i3 from "./tru-user";
|
|
7
|
+
export class TruUserPreferenceManager {
|
|
8
|
+
modelTypeLookup;
|
|
9
|
+
appEnvironment;
|
|
10
|
+
user;
|
|
11
|
+
globalDataContext;
|
|
12
|
+
constructor(modelTypeLookup, appEnvironment, user) {
|
|
13
|
+
this.modelTypeLookup = modelTypeLookup;
|
|
14
|
+
this.appEnvironment = appEnvironment;
|
|
15
|
+
this.user = user;
|
|
16
|
+
this.globalDataContext = this.appEnvironment.globalDataContext;
|
|
17
|
+
}
|
|
18
|
+
setupQuery(query, name) {
|
|
19
|
+
var predicate = new Predicate('TruDbUserRef', breeze.FilterQueryOp.Equals, this.user.activeUserRef);
|
|
20
|
+
if (name)
|
|
21
|
+
predicate = predicate.and('Name', breeze.FilterQueryOp.Equals, name);
|
|
22
|
+
return query.where(predicate);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Queries for a preference for the current user. On success, completes
|
|
26
|
+
* promise with the value or undefined if none.
|
|
27
|
+
* @param {string} name - preference name
|
|
28
|
+
* @returns {promise}
|
|
29
|
+
*/
|
|
30
|
+
get = (name) => {
|
|
31
|
+
let preferences = this.globalDataContext
|
|
32
|
+
.entityAccess()
|
|
33
|
+
.searchCacheOnlySynchronously(this.modelTypeLookup.getType('TruDbUserPreference'), this.setupQuery);
|
|
34
|
+
if (preferences.length > 1)
|
|
35
|
+
console.log('Query selected more than one preference record.');
|
|
36
|
+
else if (preferences.length === 1)
|
|
37
|
+
return JSON.parse(preferences[0].Value);
|
|
38
|
+
else
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Queries for all preferences for the current user. On success, completes
|
|
43
|
+
* promise with an object loaded with the values indexed by name.
|
|
44
|
+
* @returns {promise}
|
|
45
|
+
*/
|
|
46
|
+
getAll = async () => {
|
|
47
|
+
await this.globalDataContext
|
|
48
|
+
.entityAccess()
|
|
49
|
+
.searchCacheOnly(this.modelTypeLookup.getType('TruDbUserPreference'), this.setupQuery)
|
|
50
|
+
.subscribe((entities) => {
|
|
51
|
+
let result = {};
|
|
52
|
+
for (var i = 0; i < entities.length; ++i)
|
|
53
|
+
result[entities[i].Name] = JSON.parse(entities[i].Value);
|
|
54
|
+
return result;
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Saves the value of a preference. On success, completes promise with no value.
|
|
59
|
+
* @param {string} name - preference name
|
|
60
|
+
* @param {string} value - value text
|
|
61
|
+
* @returns {promise}
|
|
62
|
+
*/
|
|
63
|
+
set = async (name, value) => {
|
|
64
|
+
await this.globalDataContext
|
|
65
|
+
.entityAccess()
|
|
66
|
+
.searchCacheOnly(this.modelTypeLookup.getType('TruDbUserPreference'), this.setupQuery)
|
|
67
|
+
.subscribe((entities) => {
|
|
68
|
+
if (entities.length > 1)
|
|
69
|
+
console.log('Query selected more than one preference record.');
|
|
70
|
+
value = JSON.stringify(value);
|
|
71
|
+
if (entities.length === 1) {
|
|
72
|
+
entities[0].Value = value;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
let entity = this.globalDataContext.entityAccess().add(this.modelTypeLookup.getType('TruDbUserPreference'));
|
|
76
|
+
entity.Name = name;
|
|
77
|
+
entity.Value = value;
|
|
78
|
+
entity.TruDbUserRef = this.user.activeUserRef;
|
|
79
|
+
}
|
|
80
|
+
this.globalDataContext.saveWithoutNotification()
|
|
81
|
+
.then(() => { })
|
|
82
|
+
.catch(() => {
|
|
83
|
+
return null;
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Deletes a preference.
|
|
89
|
+
* @param {string} name - preference name
|
|
90
|
+
*/
|
|
91
|
+
eliminate = async (name) => {
|
|
92
|
+
await this.globalDataContext
|
|
93
|
+
.entityAccess()
|
|
94
|
+
.searchCacheOnly(this.modelTypeLookup.getType('TruDbUserPreference'), this.setupQuery)
|
|
95
|
+
.subscribe((entities) => {
|
|
96
|
+
if (entities.length > 1) {
|
|
97
|
+
console.log('Query selected more than one preference record.');
|
|
98
|
+
}
|
|
99
|
+
if (entities.length === 0) {
|
|
100
|
+
}
|
|
101
|
+
entities[0].entityAspect.setDeleted();
|
|
102
|
+
this.globalDataContext.saveWithoutNotification()
|
|
103
|
+
.then(() => {
|
|
104
|
+
return true;
|
|
105
|
+
})
|
|
106
|
+
.catch(() => {
|
|
107
|
+
return false;
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruUserPreferenceManager, deps: [{ token: i1.TruModelTypeLookup }, { token: i2.TruAppEnvironment }, { token: i3.TruUser }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
112
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruUserPreferenceManager, providedIn: 'root' });
|
|
113
|
+
}
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruUserPreferenceManager, decorators: [{
|
|
115
|
+
type: Injectable,
|
|
116
|
+
args: [{
|
|
117
|
+
providedIn: 'root',
|
|
118
|
+
}]
|
|
119
|
+
}], ctorParameters: () => [{ type: i1.TruModelTypeLookup }, { type: i2.TruAppEnvironment }, { type: i3.TruUser }] });
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LXVzZXItcHJlZmVyZW5jZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9zZXJ2aWNlcy90cnUtdXNlci1wcmVmZXJlbmNlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUd6QjtJQUNBO0lBQ0E7SUFKRixpQkFBaUIsQ0FBaUI7SUFDMUMsWUFDVSxlQUFtQyxFQUNuQyxjQUFpQyxFQUNqQyxJQUFhO1FBRmIsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFtQyxDQUFDO0lBQ25GLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVSxFQUFFLElBQVk7UUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEcsSUFBSSxJQUFJO1lBQ04sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxHQUFHLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM1QixJQUFJ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QUUsSUFBWSxFQUFFLEVBQUU7UUFDeEMsTUFBTSxJQUFJLENBQUMsaUJBQWlCO2FBQ3pCLFlBQVksRUFBRTthQUNkLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDckYsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUU1QixDQUFDO1lBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLEVBQUU7aUJBQzdDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUE7dUdBM0dVLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzJGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGJyZWV6ZSwgUHJlZGljYXRlIH0gZnJvbSAnYnJlZXplLWNsaWVudCc7XHJcbmltcG9ydCB7IFRydUFwcEVudmlyb25tZW50IH0gZnJvbSAnLi90cnUtYXBwLWVudmlyb25tZW50JztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuL3RydS1kYXRhLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFR5cGVMb29rdXAgfSBmcm9tICcuL3RydS1tb2RlbC10eXBlLWxvb2t1cCc7XHJcbmltcG9ydCB7IFRydVVzZXIgfSBmcm9tICcuL3RydS11c2VyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVVc2VyUHJlZmVyZW5jZU1hbmFnZXIge1xyXG4gIHByaXZhdGUgZ2xvYmFsRGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBtb2RlbFR5cGVMb29rdXA6IFRydU1vZGVsVHlwZUxvb2t1cCxcclxuICAgIHByaXZhdGUgYXBwRW52aXJvbm1lbnQ6IFRydUFwcEVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSB1c2VyOiBUcnVVc2VyKSB7XHJcbiAgICB0aGlzLmdsb2JhbERhdGFDb250ZXh0ID0gdGhpcy5hcHBFbnZpcm9ubWVudC5nbG9iYWxEYXRhQ29udGV4dCBhcyBUcnVEYXRhQ29udGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBRdWVyeShxdWVyeTogYW55LCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIHZhciBwcmVkaWNhdGUgPSBuZXcgUHJlZGljYXRlKCdUcnVEYlVzZXJSZWYnLCBicmVlemUuRmlsdGVyUXVlcnlPcC5FcXVhbHMsIHRoaXMudXNlci5hY3RpdmVVc2VyUmVmKTtcclxuICAgIGlmIChuYW1lKVxyXG4gICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUuYW5kKCdOYW1lJywgYnJlZXplLkZpbHRlclF1ZXJ5T3AuRXF1YWxzLCBuYW1lKTtcclxuICAgIHJldHVybiBxdWVyeS53aGVyZShwcmVkaWNhdGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUXVlcmllcyBmb3IgYSBwcmVmZXJlbmNlIGZvciB0aGUgY3VycmVudCB1c2VyLiAgT24gc3VjY2VzcywgY29tcGxldGVzXHJcbiAgICogcHJvbWlzZSB3aXRoIHRoZSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgbm9uZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIHByZWZlcmVuY2UgbmFtZVxyXG4gICAqIEByZXR1cm5zIHtwcm9taXNlfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgPSAobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgcHJlZmVyZW5jZXMgPSB0aGlzLmdsb2JhbERhdGFDb250ZXh0XHJcbiAgICAgIC5lbnRpdHlBY2Nlc3MoKVxyXG4gICAgICAuc2VhcmNoQ2FjaGVPbmx5U3luY2hyb25vdXNseSh0aGlzLm1vZGVsVHlwZUxvb2t1cC5nZXRUeXBlKCdUcnVEYlVzZXJQcmVmZXJlbmNlJyksIHRoaXMuc2V0dXBRdWVyeSlcclxuICAgIGlmIChwcmVmZXJlbmNlcy5sZW5ndGggPiAxKVxyXG4gICAgICBjb25zb2xlLmxvZygnUXVlcnkgc2VsZWN0ZWQgbW9yZSB0aGFuIG9uZSBwcmVmZXJlbmNlIHJlY29yZC4nKTtcclxuICAgIGVsc2UgaWYgKHByZWZlcmVuY2VzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocHJlZmVyZW5jZXNbMF0uVmFsdWUpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJpZXMgZm9yIGFsbCBwcmVmZXJlbmNlcyBmb3IgdGhlIGN1cnJlbnQgdXNlci4gIE9uIHN1Y2Nlc3MsIGNvbXBsZXRlc1xyXG4gICAqIHByb21pc2Ugd2l0aCBhbiBvYmplY3QgbG9hZGVkIHdpdGggdGhlIHZhbHVlcyBpbmRleGVkIGJ5IG5hbWUuXHJcbiAgICogQHJldHVybnMge3Byb21pc2V9XHJcbiAgICovXHJcbiAgcHVibGljIGdldEFsbCA9IGFzeW5jICgpID0+IHtcclxuICAgIGF3YWl0IHRoaXMuZ2xvYmFsRGF0YUNvbnRleHRcclxuICAgICAgLmVudGl0eUFjY2VzcygpXHJcbiAgICAgIC5zZWFyY2hDYWNoZU9ubHkodGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSgnVHJ1RGJVc2VyUHJlZmVyZW5jZScpLCB0aGlzLnNldHVwUXVlcnkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVudGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0ge30gYXMgT2JqZWN0O1xyXG4gICAgICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIHJlc3VsdDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudGl0aWVzLmxlbmd0aDsgKytpKVxyXG4gICAgICAgICAgcmVzdWx0W2VudGl0aWVzW2ldLk5hbWUgYXMgT2JqZWN0S2V5XSA9IEpTT04ucGFyc2UoZW50aXRpZXNbaV0uVmFsdWUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlcyB0aGUgdmFsdWUgb2YgYSBwcmVmZXJlbmNlLiAgT24gc3VjY2VzcywgY29tcGxldGVzIHByb21pc2Ugd2l0aCBubyB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIHByZWZlcmVuY2UgbmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIHZhbHVlIHRleHRcclxuICAgKiBAcmV0dXJucyB7cHJvbWlzZX1cclxuICAgKi9cclxuICBwdWJsaWMgc2V0ID0gYXN5bmMgKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgXHJcbiAgICBhd2FpdCB0aGlzLmdsb2JhbERhdGFDb250ZXh0XHJcbiAgICAgIC5lbnRpdHlBY2Nlc3MoKVxyXG4gICAgICAuc2VhcmNoQ2FjaGVPbmx5KHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUoJ1RydURiVXNlclByZWZlcmVuY2UnKSwgdGhpcy5zZXR1cFF1ZXJ5KVxyXG4gICAgICAuc3Vic2NyaWJlKChlbnRpdGllczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVudGl0aWVzLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUXVlcnkgc2VsZWN0ZWQgbW9yZSB0aGFuIG9uZSBwcmVmZXJlbmNlIHJlY29yZC4nKTtcclxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBlbnRpdGllc1swXS5WYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgICAgIFxyXG4gICAgICAgICAgbGV0IGVudGl0eSA9IHRoaXMuZ2xvYmFsRGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuYWRkKHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUoJ1RydURiVXNlclByZWZlcmVuY2UnKSkgYXMgYW55O1xyXG4gICAgICAgICAgZW50aXR5Lk5hbWUgPSBuYW1lO1xyXG4gICAgICAgICAgZW50aXR5LlZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICBlbnRpdHkuVHJ1RGJVc2VyUmVmID0gdGhpcy51c2VyLmFjdGl2ZVVzZXJSZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2xvYmFsRGF0YUNvbnRleHQuc2F2ZVdpdGhvdXROb3RpZmljYXRpb24oKVxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge30pXHJcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgYSBwcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gcHJlZmVyZW5jZSBuYW1lXHJcbiAgICovXHJcbiAgcHVibGljIGVsaW1pbmF0ZSA9IGFzeW5jIChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGF3YWl0IHRoaXMuZ2xvYmFsRGF0YUNvbnRleHRcclxuICAgICAgLmVudGl0eUFjY2VzcygpXHJcbiAgICAgIC5zZWFyY2hDYWNoZU9ubHkodGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSgnVHJ1RGJVc2VyUHJlZmVyZW5jZScpLCB0aGlzLnNldHVwUXVlcnkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVudGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1F1ZXJ5IHNlbGVjdGVkIG1vcmUgdGhhbiBvbmUgcHJlZmVyZW5jZSByZWNvcmQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDApIHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVudGl0aWVzWzBdLmVudGl0eUFzcGVjdC5zZXREZWxldGVkKCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxEYXRhQ29udGV4dC5zYXZlV2l0aG91dE5vdGlmaWNhdGlvbigpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|