@openziti/ziti-console-lib 0.6.3 → 0.6.4
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/assets/styles/global.scss +91 -5
- package/assets/styles/ziti.css +2 -2
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +76 -15
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +7 -3
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +22 -1
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +10 -9
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +4 -1
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +27 -5
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +21 -13
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +9 -5
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +9 -5
- package/esm2022/lib/features/json-view/json-view.component.mjs +3 -3
- package/esm2022/lib/features/messaging/growler.component.mjs +4 -4
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +33 -4
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +2 -4
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +4 -1
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +7 -1
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +10 -3
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +7 -1
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +2 -2
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +2 -17
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +22 -32
- package/esm2022/lib/pages/identities/identities-page.component.mjs +2 -2
- package/esm2022/lib/pages/identities/identities-page.service.mjs +19 -30
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +2 -2
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +3 -18
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -3
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +2 -17
- package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
- package/esm2022/lib/pages/services/services-page.service.mjs +9 -17
- package/esm2022/lib/shared/list-page-component.class.mjs +17 -2
- package/esm2022/lib/shared/list-page-service.class.mjs +22 -4
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +319 -188
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/config-editor/config-editor.component.d.ts +7 -3
- package/lib/features/config-editor/config-editor.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +5 -0
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +1 -0
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +8 -6
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +2 -0
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +1 -1
- package/lib/features/json-view/json-view.component.d.ts +2 -2
- package/lib/features/json-view/json-view.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +3 -0
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/qr-code/qr-code.component.d.ts.map +1 -1
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +1 -1
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
- package/lib/pages/configurations/configurations-page.component.d.ts.map +1 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +0 -2
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +1 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts +5 -3
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts +4 -2
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +0 -2
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +1 -1
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
- package/lib/pages/service-policies/service-policies-page.service.d.ts +0 -2
- package/lib/pages/service-policies/service-policies-page.service.d.ts.map +1 -1
- package/lib/pages/services/services-page.service.d.ts +4 -2
- package/lib/pages/services/services-page.service.d.ts.map +1 -1
- package/lib/shared/list-page-component.class.d.ts +2 -0
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/lib/shared/list-page-service.class.d.ts +6 -0
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -41,13 +41,15 @@ import * as i7 from 'ag-grid-angular';
|
|
|
41
41
|
import { AgGridModule } from 'ag-grid-angular';
|
|
42
42
|
import * as i3$3 from '@angular/cdk/bidi';
|
|
43
43
|
import { MatRadioModule } from '@angular/material/radio';
|
|
44
|
-
import { createAjvValidator,
|
|
44
|
+
import { createAjvValidator, createJSONEditor, Mode } from 'vanilla-jsoneditor';
|
|
45
45
|
import * as d3 from 'd3';
|
|
46
46
|
import * as i6 from '@angular/material/autocomplete';
|
|
47
47
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
48
48
|
import * as i7$1 from '@angular/material/core';
|
|
49
49
|
import semver from 'semver';
|
|
50
50
|
import { JsonEditorComponent, NgJsonEditorModule } from 'ang-jsoneditor';
|
|
51
|
+
import Ajv from 'ajv';
|
|
52
|
+
import addFormats from 'ajv-formats';
|
|
51
53
|
import * as i6$1 from 'primeng/inputtext';
|
|
52
54
|
import * as i8 from 'primeng/button';
|
|
53
55
|
import { Resolver } from '@stoplight/json-ref-resolver';
|
|
@@ -1203,11 +1205,15 @@ class StringInputComponent {
|
|
|
1203
1205
|
this.error = '';
|
|
1204
1206
|
this.fieldValueChange = new EventEmitter();
|
|
1205
1207
|
this.valueChange = new Subject();
|
|
1208
|
+
this._isValid = true;
|
|
1206
1209
|
}
|
|
1207
1210
|
set fieldName(name) {
|
|
1208
1211
|
this._fieldName = name;
|
|
1209
1212
|
this._idName = name.replace(/\s/g, '').toLowerCase();
|
|
1210
1213
|
}
|
|
1214
|
+
setIsValid(isValid) {
|
|
1215
|
+
this._isValid = isValid;
|
|
1216
|
+
}
|
|
1211
1217
|
onKeyup() {
|
|
1212
1218
|
debounce(() => {
|
|
1213
1219
|
this.fieldValueChange.emit(this.fieldValue);
|
|
@@ -1216,7 +1222,7 @@ class StringInputComponent {
|
|
|
1216
1222
|
}
|
|
1217
1223
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1218
1224
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: StringInputComponent, selector: "lib-string-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1219
|
-
<div [ngClass]="fieldClass">
|
|
1225
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="string-input-container">
|
|
1220
1226
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1221
1227
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1222
1228
|
type="text" class="jsonEntry"
|
|
@@ -1224,12 +1230,12 @@ class StringInputComponent {
|
|
|
1224
1230
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1225
1231
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1226
1232
|
</div>
|
|
1227
|
-
`, isInline: true, styles: ["input.error{border-color:red}
|
|
1233
|
+
`, isInline: true, styles: [".string-input-container{margin:var(--marginSmall) 0}.string-input-container label{margin-bottom:0;margin-top:0}.string-input-container input.error{border-color:red}.string-input-container div.error{color:red}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1228
1234
|
}
|
|
1229
1235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: StringInputComponent, decorators: [{
|
|
1230
1236
|
type: Component,
|
|
1231
1237
|
args: [{ selector: 'lib-string-input', template: `
|
|
1232
|
-
<div [ngClass]="fieldClass">
|
|
1238
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="string-input-container">
|
|
1233
1239
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1234
1240
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1235
1241
|
type="text" class="jsonEntry"
|
|
@@ -1237,7 +1243,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1237
1243
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1238
1244
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1239
1245
|
</div>
|
|
1240
|
-
`, styles: ["input.error{border-color:red}
|
|
1246
|
+
`, styles: [".string-input-container{margin:var(--marginSmall) 0}.string-input-container label{margin-bottom:0;margin-top:0}.string-input-container input.error{border-color:red}.string-input-container div.error{color:red}\n"] }]
|
|
1241
1247
|
}], propDecorators: { fieldName: [{
|
|
1242
1248
|
type: Input
|
|
1243
1249
|
}], fieldValue: [{
|
|
@@ -1267,11 +1273,15 @@ class NumberInputComponent {
|
|
|
1267
1273
|
this.error = '';
|
|
1268
1274
|
this.fieldValueChange = new EventEmitter();
|
|
1269
1275
|
this.valueChange = new Subject();
|
|
1276
|
+
this._isValid = true;
|
|
1270
1277
|
}
|
|
1271
1278
|
set fieldName(name) {
|
|
1272
1279
|
this._fieldName = name;
|
|
1273
1280
|
this._idName = name.replace(/\s/g, '').toLowerCase();
|
|
1274
1281
|
}
|
|
1282
|
+
setIsValid(isValid) {
|
|
1283
|
+
this._isValid = isValid;
|
|
1284
|
+
}
|
|
1275
1285
|
onKeyup() {
|
|
1276
1286
|
debounce(() => {
|
|
1277
1287
|
this.fieldValueChange.emit(this.fieldValue);
|
|
@@ -1280,7 +1290,7 @@ class NumberInputComponent {
|
|
|
1280
1290
|
}
|
|
1281
1291
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1282
1292
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NumberInputComponent, selector: "lib-number-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1283
|
-
<div [ngClass]="fieldClass">
|
|
1293
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="{{!_isValid ? 'invalid' : ''}} number-input-container">
|
|
1284
1294
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1285
1295
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1286
1296
|
type="number" class="jsonEntry"
|
|
@@ -1288,14 +1298,12 @@ class NumberInputComponent {
|
|
|
1288
1298
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1289
1299
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1290
1300
|
</div>
|
|
1291
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1301
|
+
`, isInline: true, styles: [".number-input-container{margin:var(--marginSmall) 0}.number-input-container label{margin-bottom:0;margin-top:0}.number-input-container input.error{border-color:red}.number-input-container div.error{color:red}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1292
1302
|
}
|
|
1293
1303
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberInputComponent, decorators: [{
|
|
1294
1304
|
type: Component,
|
|
1295
|
-
args: [{
|
|
1296
|
-
|
|
1297
|
-
template: `
|
|
1298
|
-
<div [ngClass]="fieldClass">
|
|
1305
|
+
args: [{ selector: 'lib-number-input', template: `
|
|
1306
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="{{!_isValid ? 'invalid' : ''}} number-input-container">
|
|
1299
1307
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1300
1308
|
<input id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1301
1309
|
type="number" class="jsonEntry"
|
|
@@ -1303,8 +1311,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1303
1311
|
[placeholder]="placeholder" [(ngModel)]="fieldValue" (paste)="onKeyup()" (keyup)="onKeyup()"/>
|
|
1304
1312
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1305
1313
|
</div>
|
|
1306
|
-
|
|
1307
|
-
}]
|
|
1314
|
+
`, styles: [".number-input-container{margin:var(--marginSmall) 0}.number-input-container label{margin-bottom:0;margin-top:0}.number-input-container input.error{border-color:red}.number-input-container div.error{color:red}\n"] }]
|
|
1308
1315
|
}], propDecorators: { fieldName: [{
|
|
1309
1316
|
type: Input
|
|
1310
1317
|
}], fieldValue: [{
|
|
@@ -1453,7 +1460,7 @@ class ObjectComponent {
|
|
|
1453
1460
|
<div *ngIf="showAdd" class="save-button button" (click)="addClicked()">Add</div>
|
|
1454
1461
|
</div>
|
|
1455
1462
|
</div>
|
|
1456
|
-
`, isInline: true, styles: [":host>label{margin-top:0}.wrapper{border-radius:.
|
|
1463
|
+
`, isInline: true, styles: [":host>label{margin-top:0}.wrapper{border-radius:.3rem;padding:calc(var(--paddingSmall) + 2px) var(--paddingXL);display:flex;flex-direction:column;gap:5px;margin-top:var(--marginXL)}.wrapper.closed{cursor:pointer}.wrapper .object-main-content{display:flex;flex-direction:column;gap:5px}.wrapper .object-main-content[hidden]{display:none}.wrapper .save-button{margin-top:var(--marginSmall);margin-bottom:var(--marginSmall);height:35px;min-width:140px;border-style:solid;border-width:1px;border-color:var(--stroke)}.object-header-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.object-header-container .object-header-title{width:100%;display:flex;justify-content:space-between;align-items:center;height:23px;cursor:pointer}.object-header-container .object-label{margin:0;cursor:pointer}.expand-toggle{font-family:zac;font-weight:600;font-size:23px;width:15px;color:var(--stroke);height:20px;margin-top:-3px;cursor:pointer}.expand-toggle:before{content:\"\\e91f\"}.expand-toggle.open{transform:rotate(270deg);margin-top:7px;margin-right:3px}.added-items-list{margin-top:var(--marginSmall);width:100%}.added-items-list label,.added-items-list .added-items-label{margin-top:0}.added-items-list .object-list-items-container{background-color:#ffffff4d;border-radius:var(--inputBorderRadius);display:flex;flex-direction:column;padding:5px}.added-items-list .object-list-items-container .none-added-label{padding-left:var(--paddingSmall);color:var(--white);opacity:.7}.added-items-list .object-list-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.added-items-list .object-list-item .preview-name{color:var(--formBackground);font-weight:600;margin-left:var(--marginSmall);margin-bottom:2px}.added-items-list .object-list-item .icon-clear{color:var(--formBackground);cursor:pointer}.added-items-list .object-list-item .icon-clear:hover{color:var(--primary)}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
1457
1464
|
}
|
|
1458
1465
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ObjectComponent, decorators: [{
|
|
1459
1466
|
type: Component,
|
|
@@ -1479,7 +1486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1479
1486
|
<div *ngIf="showAdd" class="save-button button" (click)="addClicked()">Add</div>
|
|
1480
1487
|
</div>
|
|
1481
1488
|
</div>
|
|
1482
|
-
`, styles: [":host>label{margin-top:0}.wrapper{border-radius:.
|
|
1489
|
+
`, styles: [":host>label{margin-top:0}.wrapper{border-radius:.3rem;padding:calc(var(--paddingSmall) + 2px) var(--paddingXL);display:flex;flex-direction:column;gap:5px;margin-top:var(--marginXL)}.wrapper.closed{cursor:pointer}.wrapper .object-main-content{display:flex;flex-direction:column;gap:5px}.wrapper .object-main-content[hidden]{display:none}.wrapper .save-button{margin-top:var(--marginSmall);margin-bottom:var(--marginSmall);height:35px;min-width:140px;border-style:solid;border-width:1px;border-color:var(--stroke)}.object-header-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.object-header-container .object-header-title{width:100%;display:flex;justify-content:space-between;align-items:center;height:23px;cursor:pointer}.object-header-container .object-label{margin:0;cursor:pointer}.expand-toggle{font-family:zac;font-weight:600;font-size:23px;width:15px;color:var(--stroke);height:20px;margin-top:-3px;cursor:pointer}.expand-toggle:before{content:\"\\e91f\"}.expand-toggle.open{transform:rotate(270deg);margin-top:7px;margin-right:3px}.added-items-list{margin-top:var(--marginSmall);width:100%}.added-items-list label,.added-items-list .added-items-label{margin-top:0}.added-items-list .object-list-items-container{background-color:#ffffff4d;border-radius:var(--inputBorderRadius);display:flex;flex-direction:column;padding:5px}.added-items-list .object-list-items-container .none-added-label{padding-left:var(--paddingSmall);color:var(--white);opacity:.7}.added-items-list .object-list-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.added-items-list .object-list-item .preview-name{color:var(--formBackground);font-weight:600;margin-left:var(--marginSmall);margin-bottom:2px}.added-items-list .object-list-item .icon-clear{color:var(--formBackground);cursor:pointer}.added-items-list .object-list-item .icon-clear:hover{color:var(--primary)}\n"] }]
|
|
1483
1490
|
}], ctorParameters: function () { return []; }, propDecorators: { wrapperContents: [{
|
|
1484
1491
|
type: ViewChild,
|
|
1485
1492
|
args: ["wrappercontents", { read: ViewContainerRef, static: true }]
|
|
@@ -1521,6 +1528,7 @@ class SelectorInputComponent {
|
|
|
1521
1528
|
this.error = '';
|
|
1522
1529
|
this.fieldValueChange = new EventEmitter();
|
|
1523
1530
|
this.valueChange = new Subject();
|
|
1531
|
+
this._isValid = true;
|
|
1524
1532
|
}
|
|
1525
1533
|
set fieldName(name) {
|
|
1526
1534
|
this._fieldName = name;
|
|
@@ -1529,12 +1537,22 @@ class SelectorInputComponent {
|
|
|
1529
1537
|
set valueList(list) {
|
|
1530
1538
|
this.listIsObject = list?.length > 0 && typeof list[0] !== 'string';
|
|
1531
1539
|
this._valueList = list;
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1540
|
+
let valToSet;
|
|
1541
|
+
list.forEach(item => {
|
|
1542
|
+
if (item.default) {
|
|
1543
|
+
valToSet = item.value;
|
|
1544
|
+
}
|
|
1545
|
+
});
|
|
1546
|
+
valToSet = valToSet || this.fieldValue;
|
|
1547
|
+
this.fieldValue = undefined;
|
|
1548
|
+
defer(() => {
|
|
1549
|
+
this.fieldValue = valToSet;
|
|
1535
1550
|
});
|
|
1536
1551
|
}
|
|
1537
1552
|
;
|
|
1553
|
+
setIsValid(isValid) {
|
|
1554
|
+
this._isValid = isValid;
|
|
1555
|
+
}
|
|
1538
1556
|
selected() {
|
|
1539
1557
|
debounce(() => {
|
|
1540
1558
|
this.fieldValueChange.emit(this.fieldValue);
|
|
@@ -1543,7 +1561,7 @@ class SelectorInputComponent {
|
|
|
1543
1561
|
}
|
|
1544
1562
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1545
1563
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectorInputComponent, selector: "lib-selector-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", valueList: "valueList", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1546
|
-
<div [ngClass]="fieldClass">
|
|
1564
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="selector-input-container">
|
|
1547
1565
|
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1548
1566
|
<select id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1549
1567
|
class="jsonEntry"
|
|
@@ -1559,14 +1577,12 @@ class SelectorInputComponent {
|
|
|
1559
1577
|
</select>
|
|
1560
1578
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1561
1579
|
</div>
|
|
1562
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1580
|
+
`, isInline: true, styles: [".selector-input-container{margin:var(--marginSmall) 0}.selector-input-container label{margin-bottom:0;margin-top:0}.selector-input-container input.error{border-color:red}.selector-input-container div.error{color:red}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1563
1581
|
}
|
|
1564
1582
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectorInputComponent, decorators: [{
|
|
1565
1583
|
type: Component,
|
|
1566
|
-
args: [{
|
|
1567
|
-
|
|
1568
|
-
template: `
|
|
1569
|
-
<div [ngClass]="fieldClass">
|
|
1584
|
+
args: [{ selector: 'lib-selector-input', template: `
|
|
1585
|
+
<div [ngClass]="fieldClass + (!_isValid ? 'invalid' : '')" class="selector-input-container">
|
|
1570
1586
|
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1571
1587
|
<select id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1572
1588
|
class="jsonEntry"
|
|
@@ -1582,8 +1598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1582
1598
|
</select>
|
|
1583
1599
|
<div *ngIf="error" class="error">{{error}}</div>
|
|
1584
1600
|
</div>
|
|
1585
|
-
|
|
1586
|
-
}]
|
|
1601
|
+
`, styles: [".selector-input-container{margin:var(--marginSmall) 0}.selector-input-container label{margin-bottom:0;margin-top:0}.selector-input-container input.error{border-color:red}.selector-input-container div.error{color:red}\n"] }]
|
|
1587
1602
|
}], propDecorators: { fieldName: [{
|
|
1588
1603
|
type: Input
|
|
1589
1604
|
}], fieldValue: [{
|
|
@@ -1632,6 +1647,7 @@ class CheckboxListInputComponent {
|
|
|
1632
1647
|
this.error = '';
|
|
1633
1648
|
this.fieldValueChange = new EventEmitter();
|
|
1634
1649
|
this.valueChange = new Subject();
|
|
1650
|
+
this._isValid = true;
|
|
1635
1651
|
}
|
|
1636
1652
|
set fieldName(name) {
|
|
1637
1653
|
this._fieldName = name;
|
|
@@ -1679,9 +1695,12 @@ class CheckboxListInputComponent {
|
|
|
1679
1695
|
this.valueChange.next(this._fieldValue);
|
|
1680
1696
|
});
|
|
1681
1697
|
}
|
|
1698
|
+
setIsValid(isValid) {
|
|
1699
|
+
this._isValid = isValid;
|
|
1700
|
+
}
|
|
1682
1701
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckboxListInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1683
1702
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CheckboxListInputComponent, selector: "lib-checkbox-list-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", valueList: "valueList", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1684
|
-
<div [ngClass]="fieldClass">
|
|
1703
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1685
1704
|
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1686
1705
|
<div *ngFor="let item of items">
|
|
1687
1706
|
<input type="checkbox"
|
|
@@ -1697,7 +1716,7 @@ class CheckboxListInputComponent {
|
|
|
1697
1716
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckboxListInputComponent, decorators: [{
|
|
1698
1717
|
type: Component,
|
|
1699
1718
|
args: [{ selector: 'lib-checkbox-list-input', template: `
|
|
1700
|
-
<div [ngClass]="fieldClass">
|
|
1719
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1701
1720
|
<label [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1702
1721
|
<div *ngFor="let item of items">
|
|
1703
1722
|
<input type="checkbox"
|
|
@@ -1756,6 +1775,7 @@ class TextListInputComponent {
|
|
|
1756
1775
|
this.error = '';
|
|
1757
1776
|
this.fieldValueChange = new EventEmitter();
|
|
1758
1777
|
this.valueChange = new Subject();
|
|
1778
|
+
this._isValid = true;
|
|
1759
1779
|
}
|
|
1760
1780
|
set fieldName(name) {
|
|
1761
1781
|
this._fieldName = name;
|
|
@@ -1785,9 +1805,12 @@ class TextListInputComponent {
|
|
|
1785
1805
|
this.valueChange.next(this.fieldValue);
|
|
1786
1806
|
}, 500)();
|
|
1787
1807
|
}
|
|
1808
|
+
setIsValid(isValid) {
|
|
1809
|
+
this._isValid = isValid;
|
|
1810
|
+
}
|
|
1788
1811
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextListInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1789
1812
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TextListInputComponent, selector: "lib-text-list-input", inputs: { fieldName: "fieldName", fieldValue: "fieldValue", placeholder: "placeholder", parentage: "parentage", labelColor: "labelColor", fieldClass: "fieldClass", error: "error" }, outputs: { fieldValueChange: "fieldValueChange" }, ngImport: i0, template: `
|
|
1790
|
-
<div [ngClass]="fieldClass">
|
|
1813
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1791
1814
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1792
1815
|
<p-chips id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1793
1816
|
(keyup)="onKeyup($event)"
|
|
@@ -1795,7 +1818,7 @@ class TextListInputComponent {
|
|
|
1795
1818
|
[allowDuplicate]="false"
|
|
1796
1819
|
[placeholder]="placeholder"
|
|
1797
1820
|
[addOnBlur]="true"
|
|
1798
|
-
[ngClass]="fieldClass"
|
|
1821
|
+
[ngClass]="fieldClass + (!_isValid ? ' invalid' : '')"
|
|
1799
1822
|
(onBlur)="emitEvents()"
|
|
1800
1823
|
separator=",">
|
|
1801
1824
|
</p-chips>
|
|
@@ -1806,7 +1829,7 @@ class TextListInputComponent {
|
|
|
1806
1829
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextListInputComponent, decorators: [{
|
|
1807
1830
|
type: Component,
|
|
1808
1831
|
args: [{ selector: 'lib-text-list-input', template: `
|
|
1809
|
-
<div [ngClass]="fieldClass">
|
|
1832
|
+
<div [ngClass]="fieldClass + (!_isValid ? ' invalid' : '')">
|
|
1810
1833
|
<label for="schema_{{parentage?parentage+'_':''}}{{_idName}}" [ngStyle]="{'color': labelColor}">{{_fieldName}}</label>
|
|
1811
1834
|
<p-chips id="schema_{{parentage?parentage+'_':''}}{{_idName}}"
|
|
1812
1835
|
(keyup)="onKeyup($event)"
|
|
@@ -1814,7 +1837,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1814
1837
|
[allowDuplicate]="false"
|
|
1815
1838
|
[placeholder]="placeholder"
|
|
1816
1839
|
[addOnBlur]="true"
|
|
1817
|
-
[ngClass]="fieldClass"
|
|
1840
|
+
[ngClass]="fieldClass + (!_isValid ? ' invalid' : '')"
|
|
1818
1841
|
(onBlur)="emitEvents()"
|
|
1819
1842
|
separator=",">
|
|
1820
1843
|
</p-chips>
|
|
@@ -1883,6 +1906,12 @@ class ProtocolAddressPortInputComponent {
|
|
|
1883
1906
|
this.portFieldName = 'Port';
|
|
1884
1907
|
this.checkAddressDebounced = debounce(this.checkAddress, 100, { maxWait: 100, leading: true });
|
|
1885
1908
|
this.errors = {};
|
|
1909
|
+
this.props = [
|
|
1910
|
+
{ key: 'protocol', value: undefined },
|
|
1911
|
+
{ key: 'address', value: undefined },
|
|
1912
|
+
{ key: 'hostname', value: undefined },
|
|
1913
|
+
{ key: 'port', value: undefined }
|
|
1914
|
+
];
|
|
1886
1915
|
this._addressChanged = false;
|
|
1887
1916
|
}
|
|
1888
1917
|
ngOnInit() {
|
|
@@ -1915,13 +1944,29 @@ class ProtocolAddressPortInputComponent {
|
|
|
1915
1944
|
const address = isEmpty(this.address) ? undefined : this.address;
|
|
1916
1945
|
const hostname = isEmpty(this.hostname) ? undefined : this.hostname;
|
|
1917
1946
|
const port = !isNumber(this.port) ? undefined : this.port;
|
|
1918
|
-
|
|
1947
|
+
this.props = [
|
|
1919
1948
|
{ key: 'protocol', value: protocol },
|
|
1920
|
-
{ key: 'address', value: address },
|
|
1921
|
-
{ key: 'hostname', value: hostname },
|
|
1922
1949
|
{ key: 'port', value: port }
|
|
1923
1950
|
];
|
|
1924
|
-
|
|
1951
|
+
if (this.showAddress) {
|
|
1952
|
+
this.props.push({ key: 'address', value: address });
|
|
1953
|
+
}
|
|
1954
|
+
if (this.showHostName) {
|
|
1955
|
+
this.props.push({ key: 'hostname', value: hostname });
|
|
1956
|
+
}
|
|
1957
|
+
return this.props;
|
|
1958
|
+
}
|
|
1959
|
+
setValidationErrors(propertyPath = '', validationErrors) {
|
|
1960
|
+
this.props.forEach((prop) => {
|
|
1961
|
+
const hasValidationError = validationErrors?.some((error) => {
|
|
1962
|
+
let pathToMach = error.instancePath;
|
|
1963
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
1964
|
+
pathToMach += '/' + error?.params?.missingProperty;
|
|
1965
|
+
}
|
|
1966
|
+
return pathToMach === propertyPath + '/' + prop.key;
|
|
1967
|
+
});
|
|
1968
|
+
this.errors[prop.key] = hasValidationError;
|
|
1969
|
+
});
|
|
1925
1970
|
}
|
|
1926
1971
|
isValid() {
|
|
1927
1972
|
this.errors = {};
|
|
@@ -2569,6 +2614,11 @@ let ListPageServiceClass = class ListPageServiceClass {
|
|
|
2569
2614
|
this.csvDownloadService = csvDownloadService;
|
|
2570
2615
|
this.extensionService = extensionService;
|
|
2571
2616
|
this.router = router;
|
|
2617
|
+
this.CSV_COLUMNS = [
|
|
2618
|
+
{ label: 'Name', path: 'name' },
|
|
2619
|
+
{ label: 'ID', path: 'id' },
|
|
2620
|
+
{ label: 'Created At', path: 'createdAt' }
|
|
2621
|
+
];
|
|
2572
2622
|
this.basePath = '';
|
|
2573
2623
|
this.headerComponentParams = {
|
|
2574
2624
|
filterType: 'TEXTINPUT',
|
|
@@ -2668,13 +2718,26 @@ let ListPageServiceClass = class ListPageServiceClass {
|
|
|
2668
2718
|
row.actionList = [...row.actionList, ...keys];
|
|
2669
2719
|
}
|
|
2670
2720
|
}
|
|
2721
|
+
downloadItems(selectedItems) {
|
|
2722
|
+
this.csvDownloadService.download(this.resourceType, selectedItems, this.CSV_COLUMNS, false, false, undefined, false);
|
|
2723
|
+
}
|
|
2724
|
+
downloadAllItems() {
|
|
2725
|
+
const paging = cloneDeep(this.DEFAULT_PAGING);
|
|
2726
|
+
paging.total = -1;
|
|
2727
|
+
return this.getTableData(this.resourceType, paging, undefined, undefined)
|
|
2728
|
+
.then((results) => {
|
|
2729
|
+
return this.downloadItems(results?.data);
|
|
2730
|
+
});
|
|
2731
|
+
}
|
|
2671
2732
|
getTableData(resourceType, paging, filters, sort) {
|
|
2672
|
-
paging
|
|
2733
|
+
if (!paging) {
|
|
2734
|
+
paging = { ...this.DEFAULT_PAGING };
|
|
2735
|
+
}
|
|
2673
2736
|
if (sort) {
|
|
2674
2737
|
paging.sort = sort.sortBy;
|
|
2675
2738
|
paging.order = sort.ordering;
|
|
2676
2739
|
}
|
|
2677
|
-
for (let idx = 0; idx < filters
|
|
2740
|
+
for (let idx = 0; idx < filters?.length; idx++) {
|
|
2678
2741
|
paging.noSearch = false;
|
|
2679
2742
|
paging.searchOn = filters[idx].columnId;
|
|
2680
2743
|
paging.filter = filters[idx].value;
|
|
@@ -2739,6 +2802,7 @@ class ListPageComponent {
|
|
|
2739
2802
|
this.modalOpen = false;
|
|
2740
2803
|
this.gridObj = {};
|
|
2741
2804
|
this.subscription = new Subscription();
|
|
2805
|
+
this.growlerSvc = inject(GrowlerService);
|
|
2742
2806
|
}
|
|
2743
2807
|
ngOnInit() {
|
|
2744
2808
|
this.filterService.currentPage = 1;
|
|
@@ -2810,6 +2874,18 @@ class ListPageComponent {
|
|
|
2810
2874
|
this.isLoading = false;
|
|
2811
2875
|
});
|
|
2812
2876
|
}
|
|
2877
|
+
downloadAllItems() {
|
|
2878
|
+
this.isLoading = true;
|
|
2879
|
+
this.svc.downloadAllItems().then(() => {
|
|
2880
|
+
const growlerData = new GrowlerModel('success', 'Success', `Download Finished`, `The requested items have been downloaded`);
|
|
2881
|
+
this.growlerSvc.show(growlerData);
|
|
2882
|
+
}).catch(() => {
|
|
2883
|
+
const growlerData = new GrowlerModel('error', 'Error', `Download Failed`, `Failed to retrieve items for download`);
|
|
2884
|
+
this.growlerSvc.show(growlerData);
|
|
2885
|
+
}).finally(() => {
|
|
2886
|
+
this.isLoading = false;
|
|
2887
|
+
});
|
|
2888
|
+
}
|
|
2813
2889
|
openBulkDelete(selectedItems, entityTypeLabel = 'item(s)') {
|
|
2814
2890
|
const selectedIds = selectedItems.map((row) => {
|
|
2815
2891
|
return row.id;
|
|
@@ -3338,6 +3414,9 @@ class PortRangesComponent {
|
|
|
3338
3414
|
});
|
|
3339
3415
|
this.invalid = invalid;
|
|
3340
3416
|
}
|
|
3417
|
+
setIsValid(isValid) {
|
|
3418
|
+
this.invalid = !isValid;
|
|
3419
|
+
}
|
|
3341
3420
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PortRangesComponent, deps: [{ token: ValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3342
3421
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PortRangesComponent, selector: "lib-port-ranges", inputs: { fieldValue: "fieldValue" }, outputs: { fieldValueChanged: "fieldValueChanged" }, ngImport: i0, template: "<label>PORT RANGES</label>\n<p-chips\n (onAdd)=\"validateConfig()\"\n (onRemove)=\"validateConfig()\"\n (keyup)=\"onKeyup($event)\"\n [(ngModel)]=\"fieldValue\"\n [allowDuplicate]=\"false\"\n [ngClass]=\"{ error: invalid }\"\n [placeholder]=\"'80 120-125 443 8080'\"\n [addOnBlur]=\"true\"\n separator=\",\"\n>\n</p-chips>", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.Chips, selector: "p-chips", inputs: ["style", "styleClass", "disabled", "field", "placeholder", "max", "ariaLabel", "ariaLabelledBy", "tabindex", "inputId", "allowDuplicate", "inputStyle", "inputStyleClass", "addOnTab", "addOnBlur", "separator", "showClear"], outputs: ["onAdd", "onRemove", "onFocus", "onBlur", "onChipClick", "onClear"] }] }); }
|
|
3343
3422
|
}
|
|
@@ -3435,6 +3514,14 @@ class ForwardingConfigComponent {
|
|
|
3435
3514
|
this.allowedPortRangesChange = new EventEmitter();
|
|
3436
3515
|
this.allowedProtocolsChange = new EventEmitter();
|
|
3437
3516
|
this.errors = {};
|
|
3517
|
+
this.props = [
|
|
3518
|
+
{ key: 'allowedAddresses', value: undefined },
|
|
3519
|
+
{ key: 'allowedPortRanges', value: undefined },
|
|
3520
|
+
{ key: 'forwardPort', value: undefined },
|
|
3521
|
+
{ key: 'forwardProtocol', value: undefined },
|
|
3522
|
+
{ key: 'forwardAddress', value: undefined },
|
|
3523
|
+
{ key: 'allowedProtocols', value: undefined },
|
|
3524
|
+
];
|
|
3438
3525
|
}
|
|
3439
3526
|
forwardProtocolToggled(event) {
|
|
3440
3527
|
if (!this.forwardProtocol) {
|
|
@@ -3508,6 +3595,19 @@ class ForwardingConfigComponent {
|
|
|
3508
3595
|
}
|
|
3509
3596
|
return isEmpty(this.errors) && papIsValid;
|
|
3510
3597
|
}
|
|
3598
|
+
setValidationErrors(propertyPath = '', validationErrors) {
|
|
3599
|
+
this.props.forEach((prop) => {
|
|
3600
|
+
const hasValidationError = validationErrors?.some((error) => {
|
|
3601
|
+
let pathToMach = error.instancePath;
|
|
3602
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
3603
|
+
pathToMach += '/' + error?.params?.missingProperty;
|
|
3604
|
+
}
|
|
3605
|
+
return pathToMach === propertyPath + '/' + prop.key;
|
|
3606
|
+
});
|
|
3607
|
+
this.errors[prop.key] = hasValidationError;
|
|
3608
|
+
});
|
|
3609
|
+
this.papComponent.setValidationErrors(propertyPath, validationErrors);
|
|
3610
|
+
}
|
|
3511
3611
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ForwardingConfigComponent, deps: [{ token: ForwardingConfigService }, { token: ValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3512
3612
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ForwardingConfigComponent, selector: "lib-forwarding-config", inputs: { protocol: "protocol", address: "address", port: "port", forwardProtocol: "forwardProtocol", forwardAddress: "forwardAddress", forwardPort: "forwardPort", allowedAddresses: "allowedAddresses", allowedPortRanges: "allowedPortRanges", allowedProtocols: "allowedProtocols" }, outputs: { protocolChange: "protocolChange", addressChange: "addressChange", portChange: "portChange", forwardProtocolChange: "forwardProtocolChange", forwardAddressChange: "forwardAddressChange", forwardPortChange: "forwardPortChange", allowedAddressesChange: "allowedAddressesChange", allowedPortRangesChange: "allowedPortRangesChange", allowedProtocolsChange: "allowedProtocolsChange" }, viewQueries: [{ propertyName: "papComponent", first: true, predicate: ["papComponent"], descendants: true }], ngImport: i0, template: "<div class=\"forwarding-config-container\">\n <lib-protocol-address-port-input\n [showProtocol]=\"true\"\n [showAddress]=\"true\"\n [showHostName]=\"false\"\n [showPort]=\"true\"\n [disableProtocol]=\"forwardProtocol\"\n [disableAddress]=\"forwardAddress\"\n [disablePort]=\"forwardPort\"\n [(protocol)]=\"protocol\"\n [(address)]=\"address\"\n [(port)]=\"port\"\n #papComponent\n ></lib-protocol-address-port-input>\n <div class=\"forwarding-config-toggles\">\n <lib-boolean-toggle-input\n [fieldName]=\"'FORWARD PROTOCOL'\"\n [(fieldValue)]=\"forwardProtocol\"\n (fieldValueChange)=\"forwardProtocolToggled($event)\"\n >\n </lib-boolean-toggle-input>\n <lib-boolean-toggle-input\n [fieldName]=\"'FORWARD ADDRESS'\"\n [(fieldValue)]=\"forwardAddress\"\n (fieldValueChange)=\"forwardAddressToggled($event)\"\n >\n </lib-boolean-toggle-input>\n <lib-boolean-toggle-input\n [fieldName]=\"'FORWARD PORT'\"\n [(fieldValue)]=\"forwardPort\"\n (fieldValueChange)=\"forwardPortToggled($event)\"\n >\n </lib-boolean-toggle-input>\n </div>\n <div class=\"forwarding-config-allowed-inputs\">\n <lib-checkbox-list-input\n *ngIf=\"forwardProtocol\"\n [ngClass]=\"{invalid: errors['allowedProtocols']}\"\n [fieldName]=\"'ALLOWED PROTOCOLS'\"\n [valueList]=\"['tcp', 'udp']\"\n [(fieldValue)]=\"allowedProtocols\"\n >\n </lib-checkbox-list-input>\n <lib-text-list-input\n *ngIf=\"forwardAddress\"\n [ngClass]=\"{invalid: errors['allowedAddresses']}\"\n [fieldName]=\"'ALLOWED ADDRESSES'\"\n [placeholder]=\"'10.10.0.0/24 domain.com'\"\n [(fieldValue)]=\"allowedAddresses\"\n [labelColor]=\"'#000000'\"\n >\n </lib-text-list-input>\n <lib-text-list-input\n *ngIf=\"forwardPort\"\n [ngClass]=\"{invalid: errors['allowedPortRanges']}\"\n [fieldName]=\"'ALLOWED PORT RANGES'\"\n [placeholder]=\"'80 120-125 443 8080'\"\n [(fieldValue)]=\"allowedPortRanges\"\n [labelColor]=\"'#000000'\"\n [fieldClass]=\"errors['allowedPortRanges'] ? 'error' : ''\"\n (fieldValueChange)=\"validatePortRanges()\"\n >\n </lib-text-list-input>\n </div>\n</div>\n", styles: [".forwarding-config-container{display:flex;flex-direction:column;align-items:center;justify-content:flex-start}.forwarding-config-container .forwarding-config-toggles{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:50px}.forwarding-config-container .forwarding-config-allowed-inputs{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;width:100%}.forwarding-config-container *{width:100%}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BooleanToggleInputComponent, selector: "lib-boolean-toggle-input", inputs: ["fieldName", "fieldValue", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: TextListInputComponent, selector: "lib-text-list-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: CheckboxListInputComponent, selector: "lib-checkbox-list-input", inputs: ["fieldName", "fieldValue", "placeholder", "parentage", "valueList", "labelColor", "fieldClass", "error"], outputs: ["fieldValueChange"] }, { kind: "component", type: ProtocolAddressPortInputComponent, selector: "lib-protocol-address-port-input", inputs: ["protocolList", "showProtocol", "showAddress", "showHostName", "showPort", "disableProtocol", "disableAddress", "disableHostName", "disablePort", "protocol", "address", "hostname", "port", "parentage", "labelColor", "labelPrefix", "fieldClass", "error"], outputs: ["fieldValueChange", "portChange", "addressChange", "hostnameChange", "protocolChange"] }] }); }
|
|
3513
3613
|
}
|
|
@@ -5304,23 +5404,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
5304
5404
|
See the License for the specific language governing permissions and
|
|
5305
5405
|
limitations under the License.
|
|
5306
5406
|
*/
|
|
5307
|
-
const CSV_COLUMNS$5 = [
|
|
5308
|
-
{ label: 'Name', path: 'name' },
|
|
5309
|
-
{ label: 'Roles', path: 'roleAttributes' },
|
|
5310
|
-
{ label: 'Online', path: 'hasApiSession' },
|
|
5311
|
-
{ label: 'Edge Router Connected', path: 'hasEdgeRouterConnection' },
|
|
5312
|
-
{ label: 'OS', path: 'envInfo.os' },
|
|
5313
|
-
{ label: 'OS Version', path: 'envInfo.osVersion' },
|
|
5314
|
-
{ label: 'SDK', path: 'sdkInfo.version' },
|
|
5315
|
-
{ label: 'App Version', path: 'sdkInfo.appVersion' },
|
|
5316
|
-
{ label: 'Type', path: 'typeId' },
|
|
5317
|
-
{ label: 'Is Admin', path: 'isAdmin' },
|
|
5318
|
-
{ label: 'Auth Policy', path: 'authPolicy.name' },
|
|
5319
|
-
{ label: 'Auth Policy ID', path: 'authPolicy.id' },
|
|
5320
|
-
{ label: 'MFA Enabled', path: 'isMfaEnabled' },
|
|
5321
|
-
{ label: 'Created At', path: 'createdAt' },
|
|
5322
|
-
{ label: 'ID', path: 'id' },
|
|
5323
|
-
];
|
|
5324
5407
|
class IdentitiesPageService extends ListPageServiceClass {
|
|
5325
5408
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
5326
5409
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -5331,6 +5414,23 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5331
5414
|
this.router = router;
|
|
5332
5415
|
this.paging = this.DEFAULT_PAGING;
|
|
5333
5416
|
this.modalType = 'identities';
|
|
5417
|
+
this.CSV_COLUMNS = [
|
|
5418
|
+
{ label: 'Name', path: 'name' },
|
|
5419
|
+
{ label: 'Roles', path: 'roleAttributes' },
|
|
5420
|
+
{ label: 'Online', path: 'hasApiSession' },
|
|
5421
|
+
{ label: 'Edge Router Connected', path: 'hasEdgeRouterConnection' },
|
|
5422
|
+
{ label: 'OS', path: 'envInfo.os' },
|
|
5423
|
+
{ label: 'OS Version', path: 'envInfo.osVersion' },
|
|
5424
|
+
{ label: 'SDK', path: 'sdkInfo.version' },
|
|
5425
|
+
{ label: 'App Version', path: 'sdkInfo.appVersion' },
|
|
5426
|
+
{ label: 'Type', path: 'typeId' },
|
|
5427
|
+
{ label: 'Is Admin', path: 'isAdmin' },
|
|
5428
|
+
{ label: 'Auth Policy', path: 'authPolicy.name' },
|
|
5429
|
+
{ label: 'Auth Policy ID', path: 'authPolicy.id' },
|
|
5430
|
+
{ label: 'MFA Enabled', path: 'isMfaEnabled' },
|
|
5431
|
+
{ label: 'Created At', path: 'createdAt' },
|
|
5432
|
+
{ label: 'ID', path: 'id' },
|
|
5433
|
+
];
|
|
5334
5434
|
this.selectedIdentity = new Identity$1();
|
|
5335
5435
|
this.columnFilters = {
|
|
5336
5436
|
name: '',
|
|
@@ -5696,14 +5796,6 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5696
5796
|
}
|
|
5697
5797
|
return expiresAt;
|
|
5698
5798
|
}
|
|
5699
|
-
downloadAllItems() {
|
|
5700
|
-
const paging = cloneDeep(this.paging);
|
|
5701
|
-
paging.total = 2000;
|
|
5702
|
-
super.getTableData('identities', paging, undefined, undefined)
|
|
5703
|
-
.then((results) => {
|
|
5704
|
-
return this.downloadItems(results?.data);
|
|
5705
|
-
});
|
|
5706
|
-
}
|
|
5707
5799
|
resetEnrollment(identity, date) {
|
|
5708
5800
|
let id = identity?.authenticators?.cert?.id;
|
|
5709
5801
|
if (!id) {
|
|
@@ -5725,9 +5817,6 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5725
5817
|
this.growlerService.show(growlerData);
|
|
5726
5818
|
});
|
|
5727
5819
|
}
|
|
5728
|
-
downloadItems(selectedItems) {
|
|
5729
|
-
this.csvDownloadService.download('identities', selectedItems, CSV_COLUMNS$5, false, false, undefined, false);
|
|
5730
|
-
}
|
|
5731
5820
|
openUpdate(itemId) {
|
|
5732
5821
|
this.modalType = 'identity';
|
|
5733
5822
|
this.sideModalOpen = true;
|
|
@@ -5889,24 +5978,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
5889
5978
|
args: [EDGE_ROUTER_EXTENSION_SERVICE]
|
|
5890
5979
|
}] }]; } });
|
|
5891
5980
|
|
|
5892
|
-
const CSV_COLUMNS$4 = [
|
|
5893
|
-
{ label: 'Name', path: 'name' },
|
|
5894
|
-
{ label: 'Attributes', path: 'roleAttributes' },
|
|
5895
|
-
{ label: 'Verified', path: 'isVerified' },
|
|
5896
|
-
{ label: 'Online', path: 'isOnline' },
|
|
5897
|
-
{ label: 'Created', path: 'createdAt' },
|
|
5898
|
-
{ label: 'Token', path: 'enrollmentToken' },
|
|
5899
|
-
{ label: 'No Traversal', path: 'noTraversal' },
|
|
5900
|
-
{ label: 'Host Name', path: 'hostname' },
|
|
5901
|
-
{ label: 'Disabled', path: 'disabled' },
|
|
5902
|
-
{ label: 'Tunneler Enabled', path: 'isTunnelerEnabled' },
|
|
5903
|
-
{ label: 'OS', path: 'versionInfo.os' },
|
|
5904
|
-
{ label: 'Architecture', path: 'versionInfo.arch' },
|
|
5905
|
-
{ label: 'Version', path: 'versionInfo.version' },
|
|
5906
|
-
{ label: 'Revision', path: 'versionInfo.revision' },
|
|
5907
|
-
{ label: 'Fingerprint', path: 'fingerprint' },
|
|
5908
|
-
{ label: 'ID', path: 'id' },
|
|
5909
|
-
];
|
|
5910
5981
|
class EdgeRoutersPageService extends ListPageServiceClass {
|
|
5911
5982
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
5912
5983
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -5918,6 +5989,24 @@ class EdgeRoutersPageService extends ListPageServiceClass {
|
|
|
5918
5989
|
this.router = router;
|
|
5919
5990
|
this.paging = this.DEFAULT_PAGING;
|
|
5920
5991
|
this.modalType = 'edge-router';
|
|
5992
|
+
this.CSV_COLUMNS = [
|
|
5993
|
+
{ label: 'Name', path: 'name' },
|
|
5994
|
+
{ label: 'Attributes', path: 'roleAttributes' },
|
|
5995
|
+
{ label: 'Verified', path: 'isVerified' },
|
|
5996
|
+
{ label: 'Online', path: 'isOnline' },
|
|
5997
|
+
{ label: 'Created', path: 'createdAt' },
|
|
5998
|
+
{ label: 'Token', path: 'enrollmentToken' },
|
|
5999
|
+
{ label: 'No Traversal', path: 'noTraversal' },
|
|
6000
|
+
{ label: 'Host Name', path: 'hostname' },
|
|
6001
|
+
{ label: 'Disabled', path: 'disabled' },
|
|
6002
|
+
{ label: 'Tunneler Enabled', path: 'isTunnelerEnabled' },
|
|
6003
|
+
{ label: 'OS', path: 'versionInfo.os' },
|
|
6004
|
+
{ label: 'Architecture', path: 'versionInfo.arch' },
|
|
6005
|
+
{ label: 'Version', path: 'versionInfo.version' },
|
|
6006
|
+
{ label: 'Revision', path: 'versionInfo.revision' },
|
|
6007
|
+
{ label: 'Fingerprint', path: 'fingerprint' },
|
|
6008
|
+
{ label: 'ID', path: 'id' },
|
|
6009
|
+
];
|
|
5921
6010
|
this.selectedEdgeRouter = new EdgeRouter();
|
|
5922
6011
|
this.columnFilters = {
|
|
5923
6012
|
name: '',
|
|
@@ -6107,8 +6196,9 @@ class EdgeRoutersPageService extends ListPageServiceClass {
|
|
|
6107
6196
|
}
|
|
6108
6197
|
return tableColumns;
|
|
6109
6198
|
}
|
|
6110
|
-
getData(filters, sort) {
|
|
6199
|
+
getData(filters, sort, page) {
|
|
6111
6200
|
// we can customize filters or sorting here before moving on...
|
|
6201
|
+
this.paging.page = page || this.paging.page;
|
|
6112
6202
|
return super.getTableData('edge-routers', this.paging, filters, sort)
|
|
6113
6203
|
.then((results) => {
|
|
6114
6204
|
return this.processData(results);
|
|
@@ -6149,17 +6239,6 @@ class EdgeRoutersPageService extends ListPageServiceClass {
|
|
|
6149
6239
|
element.click();
|
|
6150
6240
|
document.body.removeChild(element);
|
|
6151
6241
|
}
|
|
6152
|
-
downloadAllItems() {
|
|
6153
|
-
const paging = cloneDeep(this.paging);
|
|
6154
|
-
paging.total = 2000;
|
|
6155
|
-
super.getTableData('edge-routers', paging, undefined, undefined)
|
|
6156
|
-
.then((results) => {
|
|
6157
|
-
return this.downloadItems(results?.data);
|
|
6158
|
-
});
|
|
6159
|
-
}
|
|
6160
|
-
downloadItems(selectedItems) {
|
|
6161
|
-
this.csvDownloadService.download('edge-routers', selectedItems, CSV_COLUMNS$4, false, false, undefined, false);
|
|
6162
|
-
}
|
|
6163
6242
|
reenroll(router) {
|
|
6164
6243
|
const data = {
|
|
6165
6244
|
appendId: 'ReenrollRouter',
|
|
@@ -6312,6 +6391,9 @@ class QrCodeComponent {
|
|
|
6312
6391
|
});
|
|
6313
6392
|
}
|
|
6314
6393
|
expandQRCode() {
|
|
6394
|
+
if (!this.canExpand) {
|
|
6395
|
+
return;
|
|
6396
|
+
}
|
|
6315
6397
|
const data = {
|
|
6316
6398
|
jwt: this.jwt,
|
|
6317
6399
|
expiration: this.expiration,
|
|
@@ -7952,6 +8034,12 @@ class ConfigurationsPageComponent extends ListPageComponent {
|
|
|
7952
8034
|
case 'delete':
|
|
7953
8035
|
this.deleteItem(event.item);
|
|
7954
8036
|
break;
|
|
8037
|
+
case 'download-all':
|
|
8038
|
+
this.downloadAllItems();
|
|
8039
|
+
break;
|
|
8040
|
+
case 'download-selected':
|
|
8041
|
+
this.svc.downloadItems(this.selectedItems);
|
|
8042
|
+
break;
|
|
7955
8043
|
default:
|
|
7956
8044
|
break;
|
|
7957
8045
|
}
|
|
@@ -8648,7 +8736,7 @@ class JsonViewComponent {
|
|
|
8648
8736
|
text: undefined,
|
|
8649
8737
|
json: this.data || {}
|
|
8650
8738
|
};
|
|
8651
|
-
this.editor =
|
|
8739
|
+
this.editor = createJSONEditor({
|
|
8652
8740
|
target: this.editorDiv.nativeElement,
|
|
8653
8741
|
props: {
|
|
8654
8742
|
validator: this.validator,
|
|
@@ -10471,7 +10559,7 @@ class IdentitiesPageComponent extends ListPageComponent {
|
|
|
10471
10559
|
this.showQRCode(event.item);
|
|
10472
10560
|
break;
|
|
10473
10561
|
case 'download-all':
|
|
10474
|
-
this.
|
|
10562
|
+
this.downloadAllItems();
|
|
10475
10563
|
break;
|
|
10476
10564
|
case 'download-selected':
|
|
10477
10565
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -10648,7 +10736,7 @@ class EdgeRoutersPageComponent extends ListPageComponent {
|
|
|
10648
10736
|
this.downloadJWT(event.item);
|
|
10649
10737
|
break;
|
|
10650
10738
|
case 'download-all':
|
|
10651
|
-
this.
|
|
10739
|
+
this.downloadAllItems();
|
|
10652
10740
|
break;
|
|
10653
10741
|
case 'download-selected':
|
|
10654
10742
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -10949,10 +11037,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
10949
11037
|
See the License for the specific language governing permissions and
|
|
10950
11038
|
limitations under the License.
|
|
10951
11039
|
*/
|
|
10952
|
-
const CSV_COLUMNS$3 = [
|
|
10953
|
-
{ label: 'Name', path: 'name' },
|
|
10954
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
10955
|
-
];
|
|
10956
11040
|
class ServicesPageService extends ListPageServiceClass {
|
|
10957
11041
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router, servicePolicyService) {
|
|
10958
11042
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -10965,6 +11049,13 @@ class ServicesPageService extends ListPageServiceClass {
|
|
|
10965
11049
|
this.servicePolicyService = servicePolicyService;
|
|
10966
11050
|
this.paging = this.DEFAULT_PAGING;
|
|
10967
11051
|
this.modalType = 'service';
|
|
11052
|
+
this.CSV_COLUMNS = [
|
|
11053
|
+
{ label: 'Name', path: 'name' },
|
|
11054
|
+
{ label: 'ID', path: 'id' },
|
|
11055
|
+
{ label: 'Encryption Required', path: 'encryptionRequired' },
|
|
11056
|
+
{ label: 'Terminator Strategy', path: 'terminatorStrategy' },
|
|
11057
|
+
{ label: 'Created At', path: 'createdAt' },
|
|
11058
|
+
];
|
|
10968
11059
|
this.serviceType = '';
|
|
10969
11060
|
this.selectedService = new Service$1();
|
|
10970
11061
|
this.columnFilters = {
|
|
@@ -11094,17 +11185,6 @@ class ServicesPageService extends ListPageServiceClass {
|
|
|
11094
11185
|
getIdentityRoleAttributes() {
|
|
11095
11186
|
return this.zitiService.get('identity-role-attributes', {}, []);
|
|
11096
11187
|
}
|
|
11097
|
-
downloadAllItems() {
|
|
11098
|
-
const paging = cloneDeep(this.paging);
|
|
11099
|
-
paging.total = this.totalCount;
|
|
11100
|
-
super.getTableData('services', paging, undefined, undefined)
|
|
11101
|
-
.then((results) => {
|
|
11102
|
-
return this.downloadItems(results?.data);
|
|
11103
|
-
});
|
|
11104
|
-
}
|
|
11105
|
-
downloadItems(selectedItems) {
|
|
11106
|
-
this.csvDownloadService.download('services', selectedItems, CSV_COLUMNS$3, false, false, undefined, false);
|
|
11107
|
-
}
|
|
11108
11188
|
openSelection() {
|
|
11109
11189
|
this.router.navigateByUrl('/services/select');
|
|
11110
11190
|
}
|
|
@@ -11565,7 +11645,7 @@ class ServicesPageComponent extends ListPageComponent {
|
|
|
11565
11645
|
this.deleteItem(event.item);
|
|
11566
11646
|
break;
|
|
11567
11647
|
case 'download-all':
|
|
11568
|
-
this.
|
|
11648
|
+
this.downloadAllItems();
|
|
11569
11649
|
break;
|
|
11570
11650
|
case 'download-selected':
|
|
11571
11651
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -12197,7 +12277,7 @@ class GrowlerComponent {
|
|
|
12197
12277
|
this.show = true;
|
|
12198
12278
|
setTimeout(() => {
|
|
12199
12279
|
this.show = false;
|
|
12200
|
-
},
|
|
12280
|
+
}, 7000);
|
|
12201
12281
|
}
|
|
12202
12282
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GrowlerComponent, deps: [{ token: GrowlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12203
12283
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GrowlerComponent, selector: "lib-growler", inputs: { title: "title", subtitle: "subtitle", level: "level", content: "content", show: "show" }, ngImport: i0, template: `
|
|
@@ -12206,7 +12286,7 @@ class GrowlerComponent {
|
|
|
12206
12286
|
<div class="subtitle">{{ subtitle }}</div>
|
|
12207
12287
|
<div [innerHTML]="content" class="content"></div>
|
|
12208
12288
|
<div class="icon"></div>
|
|
12209
|
-
</div>`, isInline: true, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
12289
|
+
</div>`, isInline: true, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}::ng-deep .growler .content ul{margin-top:5px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
12210
12290
|
}
|
|
12211
12291
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GrowlerComponent, decorators: [{
|
|
12212
12292
|
type: Component,
|
|
@@ -12216,7 +12296,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
12216
12296
|
<div class="subtitle">{{ subtitle }}</div>
|
|
12217
12297
|
<div [innerHTML]="content" class="content"></div>
|
|
12218
12298
|
<div class="icon"></div>
|
|
12219
|
-
</div>`, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}\n"] }]
|
|
12299
|
+
</div>`, styles: ["#Growler{position:fixed;right:20px;bottom:-100px;min-width:300px;z-index:999999999;max-width:500px}#NotificationsMenu .growler{position:relative;width:100%;margin-bottom:20px;opacity:1}.growler{background-color:var(--background);min-height:105px;min-width:334px;font-size:16px;color:#000;text-align:left;border-radius:6px;box-shadow:0 12px 23px #0000001a;transition:.5s;opacity:0}#Growler.open{bottom:20px}.growler.open{opacity:1}.growler .time{font-size:13px;color:#fff;position:absolute;top:7px;right:10px;font-weight:600;font-family:Open Sans,serif}.growler.error .title{background-color:#ff104b}.growler.success .title{background-color:#03db5c}.growler.warning .title{background-color:#ffc103}.growler.info .title{background-color:#0971ff}.growler.bug .title{background-color:#ff104b}.growler .title{padding-left:10px;padding-right:10px;font-size:14px;color:#fff;line-height:30px;text-transform:uppercase;background-color:#03db5c;border-top-left-radius:6px;border-top-right-radius:6px;font-weight:600;font-family:Open Sans,serif}.growler .subtitle{padding-top:10px;font-size:15px;font-weight:700;padding-left:75px;padding-right:10px}.growler .content{font-size:13px;padding-left:75px;padding-right:10px;margin-top:2px;line-height:14px;text-overflow:ellipsis;overflow:hidden;font-weight:400;font-family:Open Sans,serif;color:var(--tableText);padding-bottom:10px}.growler .icon{width:55px;height:55px;background-position:center center;background-size:80%;position:absolute;left:10px;top:40px}.growler.error .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.success .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.info .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.warning .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.growler.bug .icon{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg style%3D'enable-background%3Anew 0 0 21 24%3B' version%3D'1.1' viewBox%3D'0 0 21 24' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFE1EB%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09'%2F%3E %3Cpolygon class%3D'st0' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'10.5%2C8.5 15.5%2C8.5 14%2C5 10.5%2C4 %09'%2F%3E %3Cpolygon class%3D'st1' points%3D'10.5%2C23.5 15.5%2C21 15.5%2C10.5 10.5%2C10.5 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cg%3E%09%09%3Cpolyline class%3D'st2' points%3D'6.5%2C0.5 6.5%2C2.5 8.1%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'14.5%2C0.5 14.5%2C2.5 12.9%2C4.7 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C10.5 3%2C10.5 0.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C14.5 3%2C14.5 0.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.5%2C18.5 3%2C18.5 0.5%2C20.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C10.5 18%2C10.5 20.5%2C12.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C14.5 18%2C14.5 20.5%2C16.5 %09%09'%2F%3E %3Cpolyline class%3D'st2' points%3D'15.5%2C18.5 18%2C18.5 20.5%2C20.5 %09%09'%2F%3E %3Cline class%3D'st2' x1%3D'10.5' x2%3D'10.5' y1%3D'23.5' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'5.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cline class%3D'st2' x1%3D'15.5' x2%3D'10.5' y1%3D'15' y2%3D'10.5'%2F%3E %3Cpolygon class%3D'st2' points%3D'15.5%2C8.5 14%2C5 10.5%2C4 7%2C5 5.5%2C8.5 %09%09'%2F%3E %3Cpolygon class%3D'st2' points%3D'5.5%2C10.5 5.5%2C21 10.5%2C23.5 15.5%2C21 15.5%2C10.5 %09%09'%2F%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#NotificationsMenu{z-index:9999;width:0;position:fixed;top:0;bottom:0;left:-80px;background-color:var(--background);border-right:3px solid var(--inputBorder);transition:.3s;opacity:0;overflow:hidden}#NotificationsList{overflow-x:visible;overflow-y:auto;position:absolute;inset:70px 0 0;clear:both;padding:0 22px 22px}#NotificationsMenu.open,#NotificationsList.open{width:380px;left:0;opacity:1}#NotificationsMenu .header.icon{background-image:unset;text-align:center;font-size:30px;font-weight:800;color:var(--icon);line-height:30px;position:relative;float:left;width:30px;height:30px;margin:20px 33px 20px 20px;background-size:75%;left:10px;top:0}#NotificationsMenu .header.title{font-weight:300;font-family:Russo One,serif;font-size:24px;line-height:78px;color:var(--primaryColor);filter:brightness(50%);padding-left:20px;text-transform:uppercase}.NoNotificationsText{margin:0;color:var(--tableText);font-weight:600;font-family:Open Sans,Arial,sans-serif;font-size:14px}#NotificationMenuClose{color:var(--icon);font-size:35px;text-align:center;font-weight:600;line-height:40px;width:40px;height:40px;position:absolute;right:16px;top:17px;cursor:pointer;z-index:20;transition:.3s}#NotificationMenuClose:hover{filter:brightness(50%);transition:.3s}#NotificationMenuClose:active{filter:none;transform:scale(.95);transition:.3s}.sev{height:64px;background-size:40%;background-position:center center;position:relative;float:left}.sevError,.sevMajor,.sevCritical{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B opacity%3A 0.75%3B fill%3A %23FFFFFF%3B enable-background%3A new%3B %7D .st1 %7B fill%3A %23FFCFDD%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FE124B%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 %09'%2F%3E %3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'7.1' x2%3D'16.1' y1%3D'6.6' y2%3D'15.6'%2F%3E %3Cline class%3D'st2' x1%3D'16.1' x2%3D'7.1' y1%3D'6.6' y2%3D'15.6'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevWarning,.sevMinor{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23FFECB6%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23FFC101%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cline class%3D'st2' x1%3D'11.6' x2%3D'11.6' y1%3D'13.1' y2%3D'6.1'%2F%3E %3Cpath class%3D'st3' d%3D'M12.1%2C16.6c0%2C0.3-0.2%2C0.5-0.5%2C0.5l0%2C0c-0.3%2C0-0.5-0.2-0.5-0.5l0%2C0c0-0.3%2C0.2-0.5%2C0.5-0.5l0%2C0%09%09%09%09C11.9%2C16.1%2C12.1%2C16.3%2C12.1%2C16.6L12.1%2C16.6z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevInfo{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 23.2 24.2%3B' version%3D'1.1' viewBox%3D'0 0 23.2 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23C0DEFF%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D .st3 %7B fill%3A none%3B stroke%3A %23006CFF%3B stroke-width%3A 1.25%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 '%2F%3E %3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 '%2F%3E %3Cpolygon class%3D'st2' points%3D'11.6%2C0.6 22.6%2C4.1 20.1%2C19.6 11.6%2C23.6 3.1%2C19.6 0.6%2C4.1 '%2F%3E %3Cg%3E%09%3Cg%3E%09%09%3Cline class%3D'st2' x1%3D'9.5' x2%3D'14.3' y1%3D'16.6' y2%3D'16.6'%2F%3E %3Cpolyline class%3D'st2' points%3D'10.3%2C9.3 11.9%2C9.3 11.9%2C16.2 %09%09'%2F%3E %3Cg%3E%09%09%09%3Cpath class%3D'st3' d%3D'M11.5%2C5.7c-0.2%2C0-0.4%2C0.2-0.4%2C0.4c0%2C0.2%2C0.2%2C0.4%2C0.4%2C0.4c0.2%2C0%2C0.4-0.2%2C0.4-0.4C11.9%2C5.9%2C11.8%2C5.7%2C11.5%2C5.7%09%09%09%09L11.5%2C5.7z'%2F%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.sevSuccess{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 23.0.3%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 24.8 24.2%3B' version%3D'1.1' viewBox%3D'0 0 24.8 24.2' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23CCFFE1%3B %7D .st2 %7B fill%3A none%3B stroke%3A %2301DB48%3B stroke-width%3A 1.25%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cg id%3D'Background_Color'%3E%09%3Cpolygon class%3D'st0' points%3D'11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.6%2C4.1 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Shadow_Color'%3E%09%3Cpolygon class%3D'st1' points%3D'18.3%2C18.4 11.6%2C21.5 4.9%2C18.4 3.1%2C19.6 11.6%2C23.7 20.1%2C19.6 %09'%2F%3E%3C%2Fg%3E %3Cg id%3D'Stroke_Color'%3E%09%3Cpolyline class%3D'st2' points%3D'19.8%2C3.2 11.6%2C0.6 0.6%2C4.1 3.1%2C19.6 11.6%2C23.6 20.1%2C19.6 22.1%2C7.1 %09'%2F%3E %3Cpolyline class%3D'st2' points%3D'5.6%2C10.1 10.1%2C15.6 24.1%2C2.1 %09'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}::ng-deep .growler .content ul{margin-top:5px}\n"] }]
|
|
12220
12300
|
}], ctorParameters: function () { return [{ type: GrowlerService }]; }, propDecorators: { title: [{
|
|
12221
12301
|
type: Input
|
|
12222
12302
|
}], subtitle: [{
|
|
@@ -16084,8 +16164,6 @@ class ServiceFormService {
|
|
|
16084
16164
|
let configId;
|
|
16085
16165
|
if (this.selectedConfigId === 'add-new') {
|
|
16086
16166
|
if (!this.validateConfig()) {
|
|
16087
|
-
const growlerData = new GrowlerModel('error', 'Error', `Error Validating Config`, 'The entered configuration is invalid. Please update missing/invalid fields and try again.');
|
|
16088
|
-
this.growlerService.show(growlerData);
|
|
16089
16167
|
return;
|
|
16090
16168
|
}
|
|
16091
16169
|
const newConfig = {
|
|
@@ -16223,7 +16301,7 @@ class ServiceFormService {
|
|
|
16223
16301
|
}
|
|
16224
16302
|
validateConfig() {
|
|
16225
16303
|
this.configErrors = {};
|
|
16226
|
-
this.configEditor?.validateConfig();
|
|
16304
|
+
this.configEditor?.validateConfig(this.selectedConfigType?.schema, true);
|
|
16227
16305
|
if (isEmpty(this.newConfigName)) {
|
|
16228
16306
|
this.configErrors['name'] = true;
|
|
16229
16307
|
}
|
|
@@ -16299,8 +16377,9 @@ class ConfigEditorComponent {
|
|
|
16299
16377
|
get schema() {
|
|
16300
16378
|
return this._schema;
|
|
16301
16379
|
}
|
|
16302
|
-
constructor(schemaSvc) {
|
|
16380
|
+
constructor(schemaSvc, growlerService) {
|
|
16303
16381
|
this.schemaSvc = schemaSvc;
|
|
16382
|
+
this.growlerService = growlerService;
|
|
16304
16383
|
this.items = [];
|
|
16305
16384
|
this.lColorArray = [
|
|
16306
16385
|
'white',
|
|
@@ -16459,31 +16538,87 @@ class ConfigEditorComponent {
|
|
|
16459
16538
|
});
|
|
16460
16539
|
return data;
|
|
16461
16540
|
}
|
|
16462
|
-
validateConfig() {
|
|
16541
|
+
validateConfig(schema, showGrowler = true) {
|
|
16542
|
+
let validationErrors;
|
|
16543
|
+
let valid = true;
|
|
16544
|
+
if (schema) {
|
|
16545
|
+
// Initialize Ajv
|
|
16546
|
+
const ajv = new Ajv({ allErrors: true });
|
|
16547
|
+
addFormats(ajv);
|
|
16548
|
+
ajv.addFormat('idn-hostname', /^.+$/);
|
|
16549
|
+
const validate = ajv.compile(schema);
|
|
16550
|
+
valid = validate(this.configData);
|
|
16551
|
+
validationErrors = validate.errors;
|
|
16552
|
+
}
|
|
16463
16553
|
this.configErrors = {};
|
|
16464
|
-
const
|
|
16465
|
-
|
|
16554
|
+
const propertyValidationMap = {};
|
|
16555
|
+
this.validateConfigItems(this.items, undefined, '', validationErrors);
|
|
16556
|
+
this.buildPropertyValidationMap(validationErrors, propertyValidationMap);
|
|
16557
|
+
if (!valid) {
|
|
16466
16558
|
this.configErrors['configData'] = true;
|
|
16559
|
+
if (showGrowler) {
|
|
16560
|
+
this.displayConfigErrors(propertyValidationMap);
|
|
16561
|
+
}
|
|
16467
16562
|
}
|
|
16468
16563
|
this.configErrorsChange.emit(this.configErrors);
|
|
16469
16564
|
return isEmpty(this.configErrors);
|
|
16470
16565
|
}
|
|
16471
|
-
|
|
16566
|
+
buildPropertyValidationMap(validationErrors, propertyValidationMap) {
|
|
16567
|
+
validationErrors?.forEach((error) => {
|
|
16568
|
+
let path = error.instancePath;
|
|
16569
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
16570
|
+
path += '/' + error?.params?.missingProperty;
|
|
16571
|
+
}
|
|
16572
|
+
if (!isEmpty(path)) {
|
|
16573
|
+
propertyValidationMap[path] = `<b>${path}</b>: ${error.message}`;
|
|
16574
|
+
}
|
|
16575
|
+
});
|
|
16576
|
+
}
|
|
16577
|
+
validateConfigItems(items, parentType = 'object', path = '', validationErrors = []) {
|
|
16472
16578
|
let isValid = true;
|
|
16473
16579
|
items.forEach((item) => {
|
|
16474
16580
|
if (item.type === 'object') {
|
|
16475
|
-
|
|
16581
|
+
console.log(validationErrors);
|
|
16582
|
+
if (!this.validateConfigItems(item.items, item.type, path + '/' + item.key, validationErrors)) {
|
|
16476
16583
|
isValid = false;
|
|
16477
16584
|
}
|
|
16478
16585
|
}
|
|
16479
|
-
else if (item?.component?.instance?.
|
|
16480
|
-
|
|
16481
|
-
|
|
16586
|
+
else if (item?.component?.instance?.setValidationErrors) {
|
|
16587
|
+
item?.component?.instance?.setValidationErrors(path, validationErrors);
|
|
16588
|
+
}
|
|
16589
|
+
else {
|
|
16590
|
+
const hasValidationError = validationErrors?.some((error) => {
|
|
16591
|
+
let pathToMach = error.instancePath;
|
|
16592
|
+
if (!isEmpty(error?.params?.missingProperty)) {
|
|
16593
|
+
pathToMach += '/' + error?.params?.missingProperty;
|
|
16594
|
+
}
|
|
16595
|
+
const matched = pathToMach === (path + '/' + item.key);
|
|
16596
|
+
return matched;
|
|
16597
|
+
});
|
|
16598
|
+
if (item?.component?.instance?.setIsValid) {
|
|
16599
|
+
item?.component?.instance?.setIsValid(!hasValidationError);
|
|
16482
16600
|
}
|
|
16483
16601
|
}
|
|
16484
16602
|
});
|
|
16485
16603
|
return isValid;
|
|
16486
16604
|
}
|
|
16605
|
+
displayConfigErrors(propertyValidationMap) {
|
|
16606
|
+
let validationMessage = '';
|
|
16607
|
+
if (!isEmpty(propertyValidationMap)) {
|
|
16608
|
+
const props = keys(propertyValidationMap);
|
|
16609
|
+
props.forEach((key, index) => {
|
|
16610
|
+
validationMessage += `<li>${propertyValidationMap[key]}</li>`;
|
|
16611
|
+
});
|
|
16612
|
+
}
|
|
16613
|
+
if (isEmpty(validationMessage)) {
|
|
16614
|
+
validationMessage = 'The entered configuration is invalid. Please update missing/invalid fields and try again.';
|
|
16615
|
+
}
|
|
16616
|
+
else {
|
|
16617
|
+
validationMessage = `<ul style="margin-top: 5px;">${validationMessage}</ul>`;
|
|
16618
|
+
}
|
|
16619
|
+
const growlerData = new GrowlerModel('error', 'Error', `Error Validating Config`, validationMessage);
|
|
16620
|
+
this.growlerService.show(growlerData);
|
|
16621
|
+
}
|
|
16487
16622
|
formDataChanged() {
|
|
16488
16623
|
delay(() => {
|
|
16489
16624
|
this.getConfigDataFromForm();
|
|
@@ -16495,13 +16630,13 @@ class ConfigEditorComponent {
|
|
|
16495
16630
|
this.updateFormView(this.items, this.configData);
|
|
16496
16631
|
});
|
|
16497
16632
|
}
|
|
16498
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigEditorComponent, deps: [{ token: SchemaService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16633
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigEditorComponent, deps: [{ token: SchemaService }, { token: GrowlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16499
16634
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: { configErrors: "configErrors", configData: "configData", showJsonView: "showJsonView", schema: "schema" }, outputs: { configErrorsChange: "configErrorsChange", configDataChange: "configDataChange" }, viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: ["dynamicform"], descendants: true, read: ViewContainerRef }, { propertyName: "editor", first: true, predicate: JsonEditorComponent, descendants: true }], ngImport: i0, template: "<div class=\"form-field-extended-fields\" [hidden]=\"showJsonView\" (mouseup)=\"formDataChangedDebounced($event)\" (keyup)=\"formDataChangedDebounced($event)\">\n <ng-container #dynamicform></ng-container>\n</div>\n<lib-json-view *ngIf=\"showJsonView && !hideConfigJSON\" (dataChange)=\"jsonDataChangedDebounced($event)\" [(data)]=\"configData\"></lib-json-view>\n<lib-json-view *ngIf=\"showJsonView && hideConfigJSON\" [(data)]=\"configData\"></lib-json-view>", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }] }); }
|
|
16500
16635
|
}
|
|
16501
16636
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigEditorComponent, decorators: [{
|
|
16502
16637
|
type: Component,
|
|
16503
16638
|
args: [{ selector: 'lib-config-editor', template: "<div class=\"form-field-extended-fields\" [hidden]=\"showJsonView\" (mouseup)=\"formDataChangedDebounced($event)\" (keyup)=\"formDataChangedDebounced($event)\">\n <ng-container #dynamicform></ng-container>\n</div>\n<lib-json-view *ngIf=\"showJsonView && !hideConfigJSON\" (dataChange)=\"jsonDataChangedDebounced($event)\" [(data)]=\"configData\"></lib-json-view>\n<lib-json-view *ngIf=\"showJsonView && hideConfigJSON\" [(data)]=\"configData\"></lib-json-view>" }]
|
|
16504
|
-
}], ctorParameters: function () { return [{ type: SchemaService }]; }, propDecorators: { configErrors: [{
|
|
16639
|
+
}], ctorParameters: function () { return [{ type: SchemaService }, { type: GrowlerService }]; }, propDecorators: { configErrors: [{
|
|
16505
16640
|
type: Input
|
|
16506
16641
|
}], configErrorsChange: [{
|
|
16507
16642
|
type: Output
|
|
@@ -17758,10 +17893,6 @@ class EdgeRouterPolicy {
|
|
|
17758
17893
|
See the License for the specific language governing permissions and
|
|
17759
17894
|
limitations under the License.
|
|
17760
17895
|
*/
|
|
17761
|
-
const CSV_COLUMNS$2 = [
|
|
17762
|
-
{ label: 'Name', path: 'name' },
|
|
17763
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
17764
|
-
];
|
|
17765
17896
|
class EdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
17766
17897
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
17767
17898
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -18104,17 +18235,6 @@ class EdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
|
18104
18235
|
return namedAttributes;
|
|
18105
18236
|
});
|
|
18106
18237
|
}
|
|
18107
|
-
downloadAllItems() {
|
|
18108
|
-
const paging = cloneDeep(this.paging);
|
|
18109
|
-
paging.total = this.totalCount;
|
|
18110
|
-
super.getTableData('edge-router-policies', paging, undefined, undefined)
|
|
18111
|
-
.then((results) => {
|
|
18112
|
-
return this.downloadItems(results?.data);
|
|
18113
|
-
});
|
|
18114
|
-
}
|
|
18115
|
-
downloadItems(selectedItems) {
|
|
18116
|
-
this.csvDownloadService.download('edge-router-policies', selectedItems, CSV_COLUMNS$2, false, false, undefined, false);
|
|
18117
|
-
}
|
|
18118
18238
|
openUpdate(item) {
|
|
18119
18239
|
this.modalType = 'edge-router-policies';
|
|
18120
18240
|
if (item) {
|
|
@@ -18215,7 +18335,7 @@ class EdgeRouterPoliciesPageComponent extends ListPageComponent {
|
|
|
18215
18335
|
this.deleteItem(event.item);
|
|
18216
18336
|
break;
|
|
18217
18337
|
case 'download-all':
|
|
18218
|
-
this.
|
|
18338
|
+
this.downloadAllItems();
|
|
18219
18339
|
break;
|
|
18220
18340
|
case 'download-selected':
|
|
18221
18341
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -18276,10 +18396,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
18276
18396
|
See the License for the specific language governing permissions and
|
|
18277
18397
|
limitations under the License.
|
|
18278
18398
|
*/
|
|
18279
|
-
const CSV_COLUMNS$1 = [
|
|
18280
|
-
{ label: 'Name', path: 'name' },
|
|
18281
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
18282
|
-
];
|
|
18283
18399
|
class ServicePoliciesPageService extends ListPageServiceClass {
|
|
18284
18400
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
18285
18401
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -18661,17 +18777,6 @@ class ServicePoliciesPageService extends ListPageServiceClass {
|
|
|
18661
18777
|
return namedAttributes;
|
|
18662
18778
|
});
|
|
18663
18779
|
}
|
|
18664
|
-
downloadAllItems() {
|
|
18665
|
-
const paging = cloneDeep(this.paging);
|
|
18666
|
-
paging.total = this.totalCount;
|
|
18667
|
-
super.getTableData('service-policies', paging, undefined, undefined)
|
|
18668
|
-
.then((results) => {
|
|
18669
|
-
return this.downloadItems(results?.data);
|
|
18670
|
-
});
|
|
18671
|
-
}
|
|
18672
|
-
downloadItems(selectedItems) {
|
|
18673
|
-
this.csvDownloadService.download('service-policies', selectedItems, CSV_COLUMNS$1, false, false, undefined, false);
|
|
18674
|
-
}
|
|
18675
18780
|
openUpdate(item) {
|
|
18676
18781
|
this.modalType = 'service-policies';
|
|
18677
18782
|
if (item) {
|
|
@@ -18734,7 +18839,6 @@ class ServicePoliciesPageComponent extends ListPageComponent {
|
|
|
18734
18839
|
}
|
|
18735
18840
|
ngOnInit() {
|
|
18736
18841
|
super.ngOnInit();
|
|
18737
|
-
this.getRoleAttributes();
|
|
18738
18842
|
this.tabs = this.tabNames.getTabs('policies');
|
|
18739
18843
|
}
|
|
18740
18844
|
headerActionClicked(action) {
|
|
@@ -18773,7 +18877,7 @@ class ServicePoliciesPageComponent extends ListPageComponent {
|
|
|
18773
18877
|
this.deleteItem(event.item);
|
|
18774
18878
|
break;
|
|
18775
18879
|
case 'download-all':
|
|
18776
|
-
this.
|
|
18880
|
+
this.downloadAllItems();
|
|
18777
18881
|
break;
|
|
18778
18882
|
case 'download-selected':
|
|
18779
18883
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -19525,10 +19629,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
19525
19629
|
See the License for the specific language governing permissions and
|
|
19526
19630
|
limitations under the License.
|
|
19527
19631
|
*/
|
|
19528
|
-
const CSV_COLUMNS = [
|
|
19529
|
-
{ label: 'Name', path: 'name' },
|
|
19530
|
-
{ label: 'Created At', path: 'createdAt' }
|
|
19531
|
-
];
|
|
19532
19632
|
class ServiceEdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
19533
19633
|
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
19534
19634
|
super(settings, filterService, csvDownloadService, extService, router);
|
|
@@ -19831,19 +19931,8 @@ class ServiceEdgeRouterPoliciesPageService extends ListPageServiceClass {
|
|
|
19831
19931
|
return result;
|
|
19832
19932
|
});
|
|
19833
19933
|
}
|
|
19834
|
-
downloadAllItems() {
|
|
19835
|
-
const paging = cloneDeep(this.paging);
|
|
19836
|
-
paging.total = this.totalCount;
|
|
19837
|
-
super.getTableData('edge-router-policies', paging, undefined, undefined)
|
|
19838
|
-
.then((results) => {
|
|
19839
|
-
return this.downloadItems(results?.data);
|
|
19840
|
-
});
|
|
19841
|
-
}
|
|
19842
|
-
downloadItems(selectedItems) {
|
|
19843
|
-
this.csvDownloadService.download('edge-router-policies', selectedItems, CSV_COLUMNS, false, false, undefined, false);
|
|
19844
|
-
}
|
|
19845
19934
|
openUpdate(item) {
|
|
19846
|
-
this.modalType = 'edge-router-policies';
|
|
19935
|
+
this.modalType = 'service-edge-router-policies';
|
|
19847
19936
|
if (item) {
|
|
19848
19937
|
this.selectedEdgeRouterPolicy = item;
|
|
19849
19938
|
this.selectedEdgeRouterPolicy.badges = [];
|
|
@@ -19942,7 +20031,7 @@ class ServiceEdgeRouterPoliciesPageComponent extends ListPageComponent {
|
|
|
19942
20031
|
this.deleteItem(event.item);
|
|
19943
20032
|
break;
|
|
19944
20033
|
case 'download-all':
|
|
19945
|
-
this.
|
|
20034
|
+
this.downloadAllItems();
|
|
19946
20035
|
break;
|
|
19947
20036
|
case 'download-selected':
|
|
19948
20037
|
this.svc.downloadItems(this.selectedItems);
|
|
@@ -20915,6 +21004,33 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
20915
21004
|
break;
|
|
20916
21005
|
}
|
|
20917
21006
|
}
|
|
21007
|
+
apiActionRequested(action) {
|
|
21008
|
+
switch (action.id) {
|
|
21009
|
+
case 'cli':
|
|
21010
|
+
this.copyCLICommand();
|
|
21011
|
+
break;
|
|
21012
|
+
case 'curl':
|
|
21013
|
+
this.copyCURLCommand();
|
|
21014
|
+
break;
|
|
21015
|
+
}
|
|
21016
|
+
}
|
|
21017
|
+
copyCLICommand() {
|
|
21018
|
+
const command = `ziti edge ${this.formData.id ? 'update' : 'create'} config ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}' --configTypeId '${this.formData.configTypeId}' --data '${JSON.stringify(this.formData.data)}' --tags-json '${JSON.stringify(this.formData.tags)}'`;
|
|
21019
|
+
navigator.clipboard.writeText(command);
|
|
21020
|
+
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `CLI command copied to clipboard`);
|
|
21021
|
+
this.growlerService.show(growlerData);
|
|
21022
|
+
}
|
|
21023
|
+
copyCURLCommand() {
|
|
21024
|
+
const command = `curl '${this.apiCallURL}' \\
|
|
21025
|
+
${this.formData.id ? '--request PATCH \\' : '\\'}
|
|
21026
|
+
-H 'accept: application/json' \\
|
|
21027
|
+
-H 'content-type: application/json' \\
|
|
21028
|
+
-H 'zt-session: ${this.settings.session.id}' \\
|
|
21029
|
+
--data-raw '${JSON.stringify(this.apiData)}'`;
|
|
21030
|
+
navigator.clipboard.writeText(command);
|
|
21031
|
+
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `CURL command copied to clipboard`);
|
|
21032
|
+
this.growlerService.show(growlerData);
|
|
21033
|
+
}
|
|
20918
21034
|
clear() {
|
|
20919
21035
|
this.formData.configTypeId = '';
|
|
20920
21036
|
this.clearForm();
|
|
@@ -20968,7 +21084,9 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
20968
21084
|
}
|
|
20969
21085
|
validate() {
|
|
20970
21086
|
this.errors = {};
|
|
20971
|
-
this.configEditor.validateConfig()
|
|
21087
|
+
if (!this.configEditor.validateConfig(this.selectedSchema, true)) {
|
|
21088
|
+
return false;
|
|
21089
|
+
}
|
|
20972
21090
|
if (isEmpty(this.formData.name)) {
|
|
20973
21091
|
this.errors['name'] = true;
|
|
20974
21092
|
}
|
|
@@ -21018,11 +21136,11 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
21018
21136
|
this._apiData = cloneDeep(this.apiData);
|
|
21019
21137
|
}
|
|
21020
21138
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigurationFormComponent, deps: [{ token: ConfigurationService }, { token: SchemaService }, { token: GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21021
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigurationFormComponent, selector: "lib-configuration", inputs: { formData: "formData", errors: "errors" }, outputs: { close: "close" }, viewQueries: [{ propertyName: "configEditor", first: true, predicate: ["configEditor"], descendants: true, read: ConfigEditorComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "component", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: ["configErrors", "configData", "showJsonView", "schema"], outputs: ["configErrorsChange", "configDataChange"] }] }); }
|
|
21139
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigurationFormComponent, selector: "lib-configuration", inputs: { formData: "formData", errors: "errors" }, outputs: { close: "close" }, viewQueries: [{ propertyName: "configEditor", first: true, predicate: ["configEditor"], descendants: true, read: ConfigEditorComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}.form-group-column.three-fifths{width:calc(60% - 15px);min-width:550px;max-width:700px}.form-group-column.two-fifths{max-width:700px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "component", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: ["configErrors", "configData", "showJsonView", "schema"], outputs: ["configErrorsChange", "configDataChange"] }] }); }
|
|
21022
21140
|
}
|
|
21023
21141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigurationFormComponent, decorators: [{
|
|
21024
21142
|
type: Component,
|
|
21025
|
-
args: [{ selector: 'lib-configuration', template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}\n"] }]
|
|
21143
|
+
args: [{ selector: 'lib-configuration', template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Config' : 'Create Config')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n [saveTooltip]=\"saveButtonTooltip\"\n ></lib-form-header>\n <div class=\"config-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Config Name'\" [label]=\"'Required'\">\n <input\n id=\"ConfigName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Name this config\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n (keyup)=\"apiData()\"\n >\n </lib-form-field-container>\n <lib-form-field-container [showHeader]=\"false\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\">\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': !svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n FORM\n </span>\n <div class=\"form-header-toggle\" (click)=\"svc.toggleJSONView()\">\n <div\n class=\"form-toggle-switch\"\n [ngClass]=\"{'toggle-left': !svc.configJsonView, 'toggle-right': svc.configJsonView}\"\n >\n <div class=\"form-toggle-indicator\"></div>\n <div class=\"form-toggle-indicator\"></div>\n </div>\n </div>\n <span\n class=\"toggle-option-text\"\n [ngClass]=\"{'toggle-option-selected': svc.configJsonView}\"\n (click)=\"svc.toggleJSONView()\"\n >\n JSON\n </span>\n </div>\n </div>\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">{{isEditing ? 'Config Type' : 'Select a Config Type'}}</span>\n </div>\n <select\n id=\"ConfigTypes\"\n class=\"config-type-select\"\n [(ngModel)]=\"formData.configTypeId\"\n (change)=\"getSchema()\"\n [ngClass]=\"{disabled: isEditing, error: errors['configTypeId']}\"\n >\n <option value=\"\">Select A Type...</option>\n <option *ngFor=\"let config of options\"\n [value]=\"config.id\">{{config.name}}\n </option>\n </select>\n <lib-config-editor\n [hidden]=\"configTypeEmpty\"\n [schema]=\"selectedSchema\"\n [(configData)]=\"formData.data\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"errors\"\n (configDataChange)=\"dataChanged($event)\"\n #configEditor\n ></lib-config-editor>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"_apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".config-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}.form-group-column.three-fifths{width:calc(60% - 15px);min-width:550px;max-width:700px}.form-group-column.two-fifths{max-width:700px}\n"] }]
|
|
21026
21144
|
}], ctorParameters: function () { return [{ type: ConfigurationService }, { type: SchemaService }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
21027
21145
|
type: Inject,
|
|
21028
21146
|
args: [SHAREDZ_EXTENSION]
|
|
@@ -21772,13 +21890,20 @@ class AuthPoliciesPageService extends ListPageServiceClass {
|
|
|
21772
21890
|
headerComponent: TableColumnDefaultComponent,
|
|
21773
21891
|
headerComponentParams: this.headerComponentParams,
|
|
21774
21892
|
cellRenderer: TableCellNameComponent,
|
|
21775
|
-
cellRendererParams: { pathRoot: this.basePath, cellNamePreCheck:
|
|
21893
|
+
cellRendererParams: { pathRoot: this.basePath, cellNamePreCheck: (data) => {
|
|
21894
|
+
this.checkDefaultAuthPolicy(data).then((result) => {
|
|
21895
|
+
if (!result) {
|
|
21896
|
+
return;
|
|
21897
|
+
}
|
|
21898
|
+
this.openEditForm(data?.data?.id);
|
|
21899
|
+
});
|
|
21900
|
+
} },
|
|
21776
21901
|
onCellClicked: (data) => {
|
|
21777
21902
|
if (this.hasSelectedText()) {
|
|
21778
21903
|
return;
|
|
21779
21904
|
}
|
|
21780
21905
|
this.checkDefaultAuthPolicy(data?.data).then((result) => {
|
|
21781
|
-
if (!result
|
|
21906
|
+
if (!result) {
|
|
21782
21907
|
return;
|
|
21783
21908
|
}
|
|
21784
21909
|
this.openEditForm(data?.data?.id);
|
|
@@ -21987,6 +22112,12 @@ class AuthPoliciesPageComponent extends ListPageComponent {
|
|
|
21987
22112
|
this.deleteItem(event.item);
|
|
21988
22113
|
});
|
|
21989
22114
|
break;
|
|
22115
|
+
case 'download-all':
|
|
22116
|
+
this.downloadAllItems();
|
|
22117
|
+
break;
|
|
22118
|
+
case 'download-selected':
|
|
22119
|
+
this.svc.downloadItems(this.selectedItems);
|
|
22120
|
+
break;
|
|
21990
22121
|
default:
|
|
21991
22122
|
break;
|
|
21992
22123
|
}
|
|
@@ -22801,7 +22932,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
22801
22932
|
}] });
|
|
22802
22933
|
|
|
22803
22934
|
const VERSION = {
|
|
22804
|
-
"version": "3.6.
|
|
22935
|
+
"version": "3.6.3"
|
|
22805
22936
|
};
|
|
22806
22937
|
|
|
22807
22938
|
/*
|