@openziti/ziti-console-lib 0.4.6 → 0.4.8
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/images/visualizer/node-click.png +0 -0
- package/assets/styles/ziti.css +1 -0
- package/assets/svgs/cursor-pointer.svg +1 -0
- package/esm2022/lib/features/confirm/confirm.component.mjs +6 -4
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -2
- package/esm2022/lib/features/data-table/data-table.component.mjs +13 -1
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -2
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +3 -3
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +4 -4
- package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -1
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +48 -26
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +7 -5
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +6 -6
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +11 -10
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +6 -6
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +35 -9
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +8 -8
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +37 -31
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +89 -2
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +12 -11
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +7 -6
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +441 -259
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +180 -63
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +307 -118
- package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -1
- package/esm2022/lib/pages/identities/identities-page.component.mjs +4 -4
- package/esm2022/lib/pages/identities/identities-page.service.mjs +11 -1
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +3 -3
- package/esm2022/lib/services/ziti-controller-data.service.mjs +8 -4
- package/esm2022/lib/shared/list-page-component.class.mjs +6 -4
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +1228 -565
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/confirm/confirm.component.d.ts +2 -0
- package/lib/features/confirm/confirm.component.d.ts.map +1 -1
- package/lib/features/data-table/data-table-filter.service.d.ts +2 -0
- package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
- package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
- package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
- package/lib/features/preview-list/preview-list.component.d.ts +10 -5
- package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +6 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +6 -3
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +2 -0
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +2 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +36 -20
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +42 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +6 -2
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +1 -1
- package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.component.d.ts +1 -1
- package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/shared/list-page-component.class.d.ts +3 -1
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
|
@@ -8,7 +8,7 @@ import * as i1$1 from '@angular/common/http';
|
|
|
8
8
|
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
9
9
|
import * as i1 from 'ngx-logger';
|
|
10
10
|
import { NgxLoggerLevel } from 'ngx-logger';
|
|
11
|
-
import _, { isNumber, includes, isNil, defer, set, invoke, get, debounce, isEmpty, isNaN as isNaN$1, cloneDeep, unset, isBoolean, keys, forEach, isEqual, delay, isFunction, map as map$1, forOwn, isString, some, filter, sortedUniq, invert
|
|
11
|
+
import _, { isNumber, includes, isNil, defer, set, invoke, get, debounce, isEmpty, isNaN as isNaN$1, cloneDeep, unset, isBoolean, keys, forEach, isEqual, isObject, isArray, delay, isFunction, map as map$1, forOwn, isString, some, filter, sortedUniq, invert } from 'lodash';
|
|
12
12
|
import { __decorate, __param } from 'tslib';
|
|
13
13
|
import * as i1$4 from '@angular/common';
|
|
14
14
|
import { CommonModule } from '@angular/common';
|
|
@@ -1078,6 +1078,8 @@ class ExtensionsNoopService {
|
|
|
1078
1078
|
this.closeAfterSave = true;
|
|
1079
1079
|
this.moreActions = [];
|
|
1080
1080
|
}
|
|
1081
|
+
extendOnInit() {
|
|
1082
|
+
}
|
|
1081
1083
|
extendAfterViewInits(extentionPoints) {
|
|
1082
1084
|
}
|
|
1083
1085
|
updateFormData(data) {
|
|
@@ -2268,8 +2270,10 @@ class ConfirmComponent {
|
|
|
2268
2270
|
confirmLabel: '',
|
|
2269
2271
|
cancelLabel: '',
|
|
2270
2272
|
bulletList: [],
|
|
2273
|
+
submessage: '',
|
|
2271
2274
|
showCancelButton: false,
|
|
2272
|
-
showCancelLink: false
|
|
2275
|
+
showCancelLink: false,
|
|
2276
|
+
imageUrl: '../../assets/svgs/Confirm_Trash.svg'
|
|
2273
2277
|
};
|
|
2274
2278
|
this.dataObj = data;
|
|
2275
2279
|
if (isNil(this.dataObj?.cancelLabel) || isEmpty(this.dataObj?.cancelLabel)) {
|
|
@@ -2283,11 +2287,11 @@ class ConfirmComponent {
|
|
|
2283
2287
|
this.dialogRef.close(false);
|
|
2284
2288
|
}
|
|
2285
2289
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfirmComponent, deps: [{ token: i3$2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2286
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfirmComponent, selector: "lib-confirm", ngImport: i0, template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-
|
|
2290
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfirmComponent, selector: "lib-confirm", ngImport: i0, template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\" style=\"background-image: url({{dataObj.imageUrl}})\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n <div *ngIf=\"dataObj.submessage && dataObj.submessage.length > 0\" class=\"confirm-message-sub-content\">\n <span [innerHTML]=\"dataObj.submessage\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-size:contain;z-index:20;box-sizing:var(--shadow);margin-left:15px}.confirm-modal-container .confirm-title-container{width:100%;display:flex;flex-direction:column}.confirm-modal-container .confirm-title-container .confirm-title{color:var(--primaryColor);font-size:30px;position:relative;padding-left:0;width:400px;background:none;text-transform:none;height:auto;font-family:Russo One;margin-top:30px;margin-left:150px;filter:brightness(50%)}.confirm-modal-container .confirm-message-sub-content,.confirm-modal-container .confirm-message-content{color:var(--text);font-size:14px;position:relative;margin:5px 15px 15px;padding:0;font-weight:600;font-family:Open Sans;overflow:auto;display:flex;align-items:center;justify-content:flex-start;color:var(--tableText);max-width:400px}.confirm-modal-container .confirm-message-bullet-list{margin-left:20px;margin-bottom:15px;margin-right:20px;max-height:200px;overflow:auto}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name{color:var(--primaryColor);text-decoration:none;transition:.5s ease}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name::marker{color:var(--tableText)}.confirm-modal-container .confirm-message-bullet-list ul{margin:0}.confirm-modal-container .confirm-buttons-container{display:flex;justify-content:flex-end;flex-direction:row;width:100%;padding-right:20px;padding-bottom:20px;align-items:flex-end}.confirm-modal-container .confirm-buttons-container .linkButton{position:absolute;left:25px;color:var(--subText);font-weight:600}.confirm-modal-container button{width:100px;height:40px;color:var(--white);display:flex;align-items:center;justify-content:center}.confirm-modal-container button.confirm{background-color:var(--secondary)}.confirm-modal-container button.cancel{background-color:var(--primary)}\n"], dependencies: [{ 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"] }] }); }
|
|
2287
2291
|
}
|
|
2288
2292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfirmComponent, decorators: [{
|
|
2289
2293
|
type: Component,
|
|
2290
|
-
args: [{ selector: 'lib-confirm', template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-
|
|
2294
|
+
args: [{ selector: 'lib-confirm', template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\" style=\"background-image: url({{dataObj.imageUrl}})\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n <div *ngIf=\"dataObj.submessage && dataObj.submessage.length > 0\" class=\"confirm-message-sub-content\">\n <span [innerHTML]=\"dataObj.submessage\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-size:contain;z-index:20;box-sizing:var(--shadow);margin-left:15px}.confirm-modal-container .confirm-title-container{width:100%;display:flex;flex-direction:column}.confirm-modal-container .confirm-title-container .confirm-title{color:var(--primaryColor);font-size:30px;position:relative;padding-left:0;width:400px;background:none;text-transform:none;height:auto;font-family:Russo One;margin-top:30px;margin-left:150px;filter:brightness(50%)}.confirm-modal-container .confirm-message-sub-content,.confirm-modal-container .confirm-message-content{color:var(--text);font-size:14px;position:relative;margin:5px 15px 15px;padding:0;font-weight:600;font-family:Open Sans;overflow:auto;display:flex;align-items:center;justify-content:flex-start;color:var(--tableText);max-width:400px}.confirm-modal-container .confirm-message-bullet-list{margin-left:20px;margin-bottom:15px;margin-right:20px;max-height:200px;overflow:auto}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name{color:var(--primaryColor);text-decoration:none;transition:.5s ease}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name::marker{color:var(--tableText)}.confirm-modal-container .confirm-message-bullet-list ul{margin:0}.confirm-modal-container .confirm-buttons-container{display:flex;justify-content:flex-end;flex-direction:row;width:100%;padding-right:20px;padding-bottom:20px;align-items:flex-end}.confirm-modal-container .confirm-buttons-container .linkButton{position:absolute;left:25px;color:var(--subText);font-weight:600}.confirm-modal-container button{width:100px;height:40px;color:var(--white);display:flex;align-items:center;justify-content:center}.confirm-modal-container button.confirm{background-color:var(--secondary)}.confirm-modal-container button.cancel{background-color:var(--primary)}\n"] }]
|
|
2291
2295
|
}], ctorParameters: function () { return [{ type: i3$2.MatDialogRef }, { type: undefined, decorators: [{
|
|
2292
2296
|
type: Inject,
|
|
2293
2297
|
args: [MAT_DIALOG_DATA]
|
|
@@ -2301,7 +2305,7 @@ class DataTableFilterService {
|
|
|
2301
2305
|
this.pageChanged = new BehaviorSubject(this.currentPage);
|
|
2302
2306
|
}
|
|
2303
2307
|
updateFilter(filterObj) {
|
|
2304
|
-
if (isEmpty(filterObj.value) && isNaN(filterObj.value))
|
|
2308
|
+
if (isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === ''))
|
|
2305
2309
|
this.removeFilter(filterObj);
|
|
2306
2310
|
else {
|
|
2307
2311
|
let isFound = false;
|
|
@@ -2589,11 +2593,12 @@ ListPageServiceClass = __decorate([
|
|
|
2589
2593
|
], ListPageServiceClass);
|
|
2590
2594
|
|
|
2591
2595
|
class ListPageComponent {
|
|
2592
|
-
constructor(filterService, svc, consoleEvents, dialogForm) {
|
|
2596
|
+
constructor(filterService, svc, consoleEvents, dialogForm, extensionService) {
|
|
2593
2597
|
this.filterService = filterService;
|
|
2594
2598
|
this.svc = svc;
|
|
2595
2599
|
this.consoleEvents = consoleEvents;
|
|
2596
2600
|
this.dialogForm = dialogForm;
|
|
2601
|
+
this.extensionService = extensionService;
|
|
2597
2602
|
this.startCount = '-';
|
|
2598
2603
|
this.endCount = '-';
|
|
2599
2604
|
this.totalCount = '-';
|
|
@@ -2612,6 +2617,7 @@ class ListPageComponent {
|
|
|
2612
2617
|
this.svc.refreshData = this.refreshData.bind(this);
|
|
2613
2618
|
this.columnDefs = this.svc.initTableColumns();
|
|
2614
2619
|
this.filterService.clearFilters();
|
|
2620
|
+
this.extensionService?.extendOnInit();
|
|
2615
2621
|
this.subscription.add(this.filterService.filtersChanged.subscribe(filters => {
|
|
2616
2622
|
this.filterApplied = filters && filters.length > 0;
|
|
2617
2623
|
this.refreshData();
|
|
@@ -2716,12 +2722,12 @@ class ListPageComponent {
|
|
|
2716
2722
|
this.gridObj?.api?.refreshCells(params);
|
|
2717
2723
|
});
|
|
2718
2724
|
}
|
|
2719
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, deps:
|
|
2725
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2720
2726
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent }); }
|
|
2721
2727
|
}
|
|
2722
2728
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, decorators: [{
|
|
2723
2729
|
type: Injectable
|
|
2724
|
-
}], ctorParameters: function () { return [{ type: DataTableFilterService }, { type: ListPageServiceClass }, { type: ConsoleEventsService }, { type: i3$2.MatDialog }]; } });
|
|
2730
|
+
}], ctorParameters: function () { return [{ type: DataTableFilterService }, { type: ListPageServiceClass }, { type: ConsoleEventsService }, { type: i3$2.MatDialog }, { type: undefined }]; } });
|
|
2725
2731
|
|
|
2726
2732
|
/*
|
|
2727
2733
|
Copyright NetFoundry Inc.
|
|
@@ -3220,9 +3226,9 @@ class ForwardingConfigService {
|
|
|
3220
3226
|
}
|
|
3221
3227
|
getProperties(protocol, address, port, forwardProtocol, forwardAddress, forwardPort, allowedProtocols, allowedAddresses, allowedPortRanges) {
|
|
3222
3228
|
const props = [
|
|
3223
|
-
{ key: 'protocol', value: protocol },
|
|
3224
|
-
{ key: 'address', value: address },
|
|
3225
|
-
{ key: 'port', value: port },
|
|
3229
|
+
{ key: 'protocol', value: forwardProtocol ? undefined : protocol },
|
|
3230
|
+
{ key: 'address', value: forwardAddress ? undefined : address },
|
|
3231
|
+
{ key: 'port', value: forwardPort ? undefined : port },
|
|
3226
3232
|
{ key: 'forwardProtocol', value: forwardProtocol ? forwardProtocol : undefined },
|
|
3227
3233
|
{ key: 'forwardAddress', value: forwardAddress ? forwardAddress : undefined },
|
|
3228
3234
|
{ key: 'forwardPort', value: forwardPort ? forwardPort : undefined },
|
|
@@ -4330,6 +4336,7 @@ class ConfigurationsPageService extends ListPageServiceClass {
|
|
|
4330
4336
|
throw new Error('no schema definition selected');
|
|
4331
4337
|
}
|
|
4332
4338
|
};
|
|
4339
|
+
this.getConfigTypes();
|
|
4333
4340
|
}
|
|
4334
4341
|
initTableColumns() {
|
|
4335
4342
|
const typeRenderer = (row) => {
|
|
@@ -5258,6 +5265,15 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5258
5265
|
],
|
|
5259
5266
|
columnFilters,
|
|
5260
5267
|
};
|
|
5268
|
+
const isAdminHeaderComponentParams = {
|
|
5269
|
+
filterType: 'SELECT',
|
|
5270
|
+
enableSorting: true,
|
|
5271
|
+
filterOptions: [
|
|
5272
|
+
{ label: 'All', value: '' },
|
|
5273
|
+
{ label: 'Admins', value: true },
|
|
5274
|
+
{ label: 'Non-Admins', value: false },
|
|
5275
|
+
]
|
|
5276
|
+
};
|
|
5261
5277
|
return [
|
|
5262
5278
|
{
|
|
5263
5279
|
colId: 'name',
|
|
@@ -5338,6 +5354,7 @@ class IdentitiesPageService extends ListPageServiceClass {
|
|
|
5338
5354
|
field: 'isAdmin',
|
|
5339
5355
|
headerName: 'Is Admin',
|
|
5340
5356
|
headerComponent: TableColumnDefaultComponent,
|
|
5357
|
+
headerComponentParams: isAdminHeaderComponentParams,
|
|
5341
5358
|
resizable: true,
|
|
5342
5359
|
sortable: true,
|
|
5343
5360
|
sortColumn: this.sort.bind(this),
|
|
@@ -6416,7 +6433,9 @@ class FilterBarComponent {
|
|
|
6416
6433
|
this.filterString = '';
|
|
6417
6434
|
this.inputChangedDebounced = debounce(this.inputChanged.bind(this), 400);
|
|
6418
6435
|
this.filterService.filtersChanged.subscribe(filters => {
|
|
6419
|
-
this._filters =
|
|
6436
|
+
this._filters = filters.filter((filter) => {
|
|
6437
|
+
return filter.hidden !== true;
|
|
6438
|
+
});
|
|
6420
6439
|
let tmp = '';
|
|
6421
6440
|
for (let idx = 0; idx < filters.length; idx++) {
|
|
6422
6441
|
if (filters[idx].columnId === 'name') {
|
|
@@ -6490,11 +6509,11 @@ class HiddenColumnsBarComponent {
|
|
|
6490
6509
|
this.columnVisibilityChanged.emit(event);
|
|
6491
6510
|
}
|
|
6492
6511
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HiddenColumnsBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6493
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HiddenColumnsBarComponent, selector: "lib-table-hidden-columns-bar", inputs: { hiddenColumns: "hiddenColumns" }, outputs: { columnVisibilityChanged: "columnVisibilityChanged" }, ngImport: i0, template: "<div class=\"hidden-columns-list\" id=\"ColumnVisibilityHeader\">\n
|
|
6512
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HiddenColumnsBarComponent, selector: "lib-table-hidden-columns-bar", inputs: { hiddenColumns: "hiddenColumns" }, outputs: { columnVisibilityChanged: "columnVisibilityChanged" }, ngImport: i0, template: "<div class=\"hidden-columns-bar-container\">\n <div class=\"hidden-columns-list\" id=\"ColumnVisibilityHeader\">\n <div\n (click)=\"setColumnVisibilityColumn(col, true)\"\n *ngFor=\"let col of hiddenColumns\"\n class=\"hidden-column-item ag-dnd-ghost ag-unselectable ag-theme-alpine\"\n id=\"ColumnVisibility_{{ col.headerName }}\"\n title=\"Show column\"\n >\n <span class=\"ag-dnd-ghost-icon\">\n <span class=\"ag-icon ag-icon-eye-slash\"></span>\n </span>\n <div class=\"ag-dnd-ghost-label\">{{ col.headerName }}</div>\n </div>\n </div>\n</div>", styles: [".hidden-columns-bar-container{display:flex;align-items:center;justify-content:space-between;flex-direction:row;width:100%}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(--inputBorder);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial;color:var(--text)}\n"], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
6494
6513
|
}
|
|
6495
6514
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HiddenColumnsBarComponent, decorators: [{
|
|
6496
6515
|
type: Component,
|
|
6497
|
-
args: [{ selector: 'lib-table-hidden-columns-bar', template: "<div class=\"hidden-columns-list\" id=\"ColumnVisibilityHeader\">\n
|
|
6516
|
+
args: [{ selector: 'lib-table-hidden-columns-bar', template: "<div class=\"hidden-columns-bar-container\">\n <div class=\"hidden-columns-list\" id=\"ColumnVisibilityHeader\">\n <div\n (click)=\"setColumnVisibilityColumn(col, true)\"\n *ngFor=\"let col of hiddenColumns\"\n class=\"hidden-column-item ag-dnd-ghost ag-unselectable ag-theme-alpine\"\n id=\"ColumnVisibility_{{ col.headerName }}\"\n title=\"Show column\"\n >\n <span class=\"ag-dnd-ghost-icon\">\n <span class=\"ag-icon ag-icon-eye-slash\"></span>\n </span>\n <div class=\"ag-dnd-ghost-label\">{{ col.headerName }}</div>\n </div>\n </div>\n</div>", styles: [".hidden-columns-bar-container{display:flex;align-items:center;justify-content:space-between;flex-direction:row;width:100%}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(--inputBorder);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial;color:var(--text)}\n"] }]
|
|
6498
6517
|
}], propDecorators: { hiddenColumns: [{
|
|
6499
6518
|
type: Input
|
|
6500
6519
|
}], columnVisibilityChanged: [{
|
|
@@ -7463,6 +7482,18 @@ class DataTableComponent {
|
|
|
7463
7482
|
case 'services':
|
|
7464
7483
|
this.entityTypeLabel = 'Services';
|
|
7465
7484
|
break;
|
|
7485
|
+
case 'configurations':
|
|
7486
|
+
this.entityTypeLabel = 'Configs';
|
|
7487
|
+
break;
|
|
7488
|
+
case 'service-policies':
|
|
7489
|
+
this.entityTypeLabel = 'Service Policies';
|
|
7490
|
+
break;
|
|
7491
|
+
case 'edge-router-policies':
|
|
7492
|
+
this.entityTypeLabel = 'Edge Router Policies';
|
|
7493
|
+
break;
|
|
7494
|
+
case 'service-edge-router-policies':
|
|
7495
|
+
this.entityTypeLabel = 'Service Edge Router Policies';
|
|
7496
|
+
break;
|
|
7466
7497
|
}
|
|
7467
7498
|
}
|
|
7468
7499
|
setColumnVisibilityColumn(column, visible) {
|
|
@@ -7777,13 +7808,14 @@ const { context, tags, resources, service, app: app$1 } = window;
|
|
|
7777
7808
|
class Entity {
|
|
7778
7809
|
}
|
|
7779
7810
|
class ProjectableForm extends ExtendableComponent {
|
|
7780
|
-
constructor(growlerService, extService, zitiService, router, route) {
|
|
7811
|
+
constructor(growlerService, extService, zitiService, router, route, location) {
|
|
7781
7812
|
super();
|
|
7782
7813
|
this.growlerService = growlerService;
|
|
7783
7814
|
this.extService = extService;
|
|
7784
7815
|
this.zitiService = zitiService;
|
|
7785
7816
|
this.router = router;
|
|
7786
7817
|
this.route = route;
|
|
7818
|
+
this.location = location;
|
|
7787
7819
|
this.isModal = false;
|
|
7788
7820
|
this.dataChange = new EventEmitter();
|
|
7789
7821
|
this.errors = {};
|
|
@@ -7800,6 +7832,7 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
7800
7832
|
this.basePath = '';
|
|
7801
7833
|
this.checkDataChangeDebounced = debounce(this.checkDataChange, 100, { maxWait: 100 });
|
|
7802
7834
|
this.subscription = new Subscription();
|
|
7835
|
+
this.previousRoute = this.router.getCurrentNavigation().previousNavigation?.finalUrl?.toString();
|
|
7803
7836
|
this.subscription.add(this.route?.params?.subscribe(params => {
|
|
7804
7837
|
const id = params['id'];
|
|
7805
7838
|
if (!isEmpty(id)) {
|
|
@@ -7938,19 +7971,42 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
7938
7971
|
}
|
|
7939
7972
|
}
|
|
7940
7973
|
returnToListPage() {
|
|
7941
|
-
this.
|
|
7974
|
+
if (this.location && this.previousRoute) {
|
|
7975
|
+
this.location.back();
|
|
7976
|
+
}
|
|
7977
|
+
else {
|
|
7978
|
+
this.router?.navigateByUrl(`${this.basePath}`);
|
|
7979
|
+
}
|
|
7942
7980
|
}
|
|
7943
7981
|
ngDoCheck() {
|
|
7944
7982
|
this.checkDataChangeDebounced();
|
|
7945
7983
|
}
|
|
7946
7984
|
checkDataChange() {
|
|
7947
|
-
|
|
7985
|
+
let initData = cloneDeep(this.initData);
|
|
7986
|
+
initData = this.omitEmptyData(initData);
|
|
7987
|
+
let formData = cloneDeep(this.formData);
|
|
7988
|
+
formData = this.omitEmptyData(formData);
|
|
7989
|
+
const dataChange = !isEqual(initData, formData);
|
|
7948
7990
|
if (dataChange !== this._dataChange) {
|
|
7949
7991
|
this.dataChange.emit(dataChange);
|
|
7950
7992
|
}
|
|
7951
7993
|
this._dataChange = dataChange;
|
|
7952
7994
|
app$1.isDirty = false;
|
|
7953
7995
|
}
|
|
7996
|
+
omitEmptyData(object) {
|
|
7997
|
+
forEach(object, (val, key) => {
|
|
7998
|
+
if (this.omitDataIteratee(val)) {
|
|
7999
|
+
unset(object, key);
|
|
8000
|
+
}
|
|
8001
|
+
else if (isObject(val)) {
|
|
8002
|
+
this.omitEmptyData(val);
|
|
8003
|
+
}
|
|
8004
|
+
});
|
|
8005
|
+
return object;
|
|
8006
|
+
}
|
|
8007
|
+
omitDataIteratee(val) {
|
|
8008
|
+
return isNil(val) || (isArray(val) && isEmpty(val));
|
|
8009
|
+
}
|
|
7954
8010
|
copyToClipboard(val) {
|
|
7955
8011
|
navigator.clipboard.writeText(val);
|
|
7956
8012
|
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `API call URL copied to clipboard`);
|
|
@@ -7991,7 +8047,7 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
7991
8047
|
return results.data;
|
|
7992
8048
|
});
|
|
7993
8049
|
}
|
|
7994
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, deps: [{ token: GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: ZITI_DATA_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8050
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, deps: [{ token: GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: ZITI_DATA_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7995
8051
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProjectableForm, selector: "ng-component", inputs: { isModal: "isModal", entityId: "entityId", formData: "formData" }, outputs: { close: "close", dataChange: "dataChange" }, viewQueries: [{ propertyName: "nameFieldInput", first: true, predicate: ["nameFieldInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [""] }); }
|
|
7996
8052
|
}
|
|
7997
8053
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, decorators: [{
|
|
@@ -8003,7 +8059,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
8003
8059
|
}] }, { type: ZitiDataService, decorators: [{
|
|
8004
8060
|
type: Inject,
|
|
8005
8061
|
args: [ZITI_DATA_SERVICE]
|
|
8006
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { isModal: [{
|
|
8062
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { isModal: [{
|
|
8007
8063
|
type: Input
|
|
8008
8064
|
}], entityId: [{
|
|
8009
8065
|
type: Input
|
|
@@ -8467,13 +8523,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
8467
8523
|
args: [JsonEditorComponent, { static: false }]
|
|
8468
8524
|
}] } });
|
|
8469
8525
|
|
|
8470
|
-
class Config {
|
|
8526
|
+
let Config$1 = class Config {
|
|
8471
8527
|
constructor() {
|
|
8472
8528
|
this.name = '';
|
|
8473
8529
|
this.data = {};
|
|
8474
8530
|
this.configTypeId = '';
|
|
8475
8531
|
}
|
|
8476
|
-
}
|
|
8532
|
+
};
|
|
8477
8533
|
;
|
|
8478
8534
|
|
|
8479
8535
|
class ConfigurationService {
|
|
@@ -8586,7 +8642,7 @@ class ConfigurationService {
|
|
|
8586
8642
|
});
|
|
8587
8643
|
}
|
|
8588
8644
|
getConfigDataModel(formData, isUpdate) {
|
|
8589
|
-
const saveModel = new Config();
|
|
8645
|
+
const saveModel = new Config$1();
|
|
8590
8646
|
const modelProperties = keys(saveModel);
|
|
8591
8647
|
modelProperties.forEach((prop) => {
|
|
8592
8648
|
switch (prop) {
|
|
@@ -8817,8 +8873,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
8817
8873
|
limitations under the License.
|
|
8818
8874
|
*/
|
|
8819
8875
|
class ConfigurationFormComponent extends ProjectableForm {
|
|
8820
|
-
constructor(svc, schemaSvc, growlerService, extService, settingsService, zitiService, router, route) {
|
|
8821
|
-
super(growlerService, extService, zitiService, router, route);
|
|
8876
|
+
constructor(svc, schemaSvc, growlerService, extService, settingsService, zitiService, router, route, location) {
|
|
8877
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
8822
8878
|
this.svc = svc;
|
|
8823
8879
|
this.schemaSvc = schemaSvc;
|
|
8824
8880
|
this.settingsService = settingsService;
|
|
@@ -8841,7 +8897,7 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
8841
8897
|
this.settings = {};
|
|
8842
8898
|
this.selectedConfigTypeId = '';
|
|
8843
8899
|
this.entityType = 'configs';
|
|
8844
|
-
this.entityClass = Config;
|
|
8900
|
+
this.entityClass = Config$1;
|
|
8845
8901
|
this._apiData = {};
|
|
8846
8902
|
}
|
|
8847
8903
|
ngOnInit() {
|
|
@@ -8936,6 +8992,8 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
8936
8992
|
this.isLoading = false;
|
|
8937
8993
|
});
|
|
8938
8994
|
if (configId) {
|
|
8995
|
+
this.initData = this.formData;
|
|
8996
|
+
this._dataChange = false;
|
|
8939
8997
|
if (this.isModal) {
|
|
8940
8998
|
this.closeModal(true, true);
|
|
8941
8999
|
}
|
|
@@ -8995,7 +9053,7 @@ class ConfigurationFormComponent extends ProjectableForm {
|
|
|
8995
9053
|
dataChanged(event) {
|
|
8996
9054
|
this._apiData = cloneDeep(this.apiData);
|
|
8997
9055
|
}
|
|
8998
|
-
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: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9056
|
+
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: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8999
9057
|
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 </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", "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: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: ConfigEditorComponent, selector: "lib-config-editor", inputs: ["configErrors", "configData", "showJsonView", "schema"], outputs: ["configErrorsChange", "configDataChange"] }] }); }
|
|
9000
9058
|
}
|
|
9001
9059
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigurationFormComponent, decorators: [{
|
|
@@ -9010,7 +9068,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
9010
9068
|
}] }, { type: ZitiDataService, decorators: [{
|
|
9011
9069
|
type: Inject,
|
|
9012
9070
|
args: [ZITI_DATA_SERVICE]
|
|
9013
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
9071
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
9014
9072
|
type: Input
|
|
9015
9073
|
}], errors: [{
|
|
9016
9074
|
type: Input
|
|
@@ -10368,7 +10426,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
10368
10426
|
*/
|
|
10369
10427
|
class IdentitiesPageComponent extends ListPageComponent {
|
|
10370
10428
|
constructor(svc, filterService, dialogForm, tabNames, zacWrapperService, router, consoleEvents, extService) {
|
|
10371
|
-
super(filterService, svc, consoleEvents, dialogForm);
|
|
10429
|
+
super(filterService, svc, consoleEvents, dialogForm, extService);
|
|
10372
10430
|
this.svc = svc;
|
|
10373
10431
|
this.tabNames = tabNames;
|
|
10374
10432
|
this.zacWrapperService = zacWrapperService;
|
|
@@ -10547,11 +10605,11 @@ class IdentitiesPageComponent extends ListPageComponent {
|
|
|
10547
10605
|
return true;
|
|
10548
10606
|
}
|
|
10549
10607
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageComponent, deps: [{ token: IdentitiesPageService }, { token: DataTableFilterService }, { token: i3$2.MatDialog }, { token: TabNameService }, { token: ZAC_WRAPPER_SERVICE }, { token: i3.Router }, { token: ConsoleEventsService }, { token: IDENTITY_EXTENSION_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10550
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentitiesPageComponent, selector: "lib-identities", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'identities'\"\n [rowData]=\"rowData\"\n [isLoading]=\"isLoading\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"currentPage\"\n [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n [noItemsImage]=\"'No_Clients'\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n <lib-overrides\n *ngIf=\"svc.modalType === 'overrides' && svc.sideModalOpen\"\n [identity]=\"svc.selectedIdentity\"\n (close)=\"closeModal($event)\"\n ></lib-overrides>\n</lib-side-modal>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:60px;top:25px;right:25px;z-index:999}.ziti-identities-container ::ng-deep .zac-wrapper-container{height:0px;left:-999999px;position:fixed}.ziti-identities-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:10px;padding:0 0 0 20px;border-radius:7px;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:12px}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:75px;margin-left:10px}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:52px}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:10px;height:10px;border-radius:50%;background:transparent;border-top:2px solid var(--tableText);border-right:2px solid var(--tableText);border-bottom:2px solid transparent;border-left:2px solid transparent;animation:loading .5s infinite linear;margin-left:5px}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:175px}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}.tMenu .tActionRow .v7Offline{background-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline{width:14px;height:14px;border-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline:hover{border-color:var(--placeholder)}.hidden-items-container{display:flex;flex-direction:row;width:100%;flex-wrap:nowrap;justify-content:space-between}.os-icon{width:23px;height:23px;background-size:23px 23px;display:inline-flex;margin-right:8px;margin-top:5px;margin-bottom:5px}::ng-deep .date-time-container{position:fixed}::ng-deep .date-time-container .p-calendar .p-inputtext{height:1px;width:1px;padding:0}::ng-deep .date-time-container .filter-button-container{height:50px;display:flex;flex-direction:row;justify-content:center;align-items:center}::ng-deep .date-time-container .filter-button-container .toggleButton{padding-left:5px;padding-right:5px;width:unset}::ng-deep .date-time-container .p-calendar{height:30px}::ng-deep .date-time-container .p-calendar .p-inputtext{height:30px;border-top-left-radius:20px;border-bottom-left-radius:20px;text-indent:5px}::ng-deep .date-time-container .p-calendar .p-button-icon-only{border-top-right-radius:20px;border-bottom-right-radius:20px}#TimeSearch{position:relative;float:left;display:inline-block;margin-left:10px;width:50px;height:40px;background-color:var(--primary)}#TimeSearch #TimeSearchList{width:44px;height:0;position:absolute;top:0;left:-2px;overflow:hidden;transition:var(--transition);background-color:var(--menu);border-radius:8px;z-index:30}#TimeSearch #TimeSearchList .time{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;font-size:12px;font-weight:700;text-align:center;margin-top:2px;margin-left:2px;left:-2px;top:-51px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSearchList.open{top:-51px;width:44px;height:226px}#TimeSearch #TimeSelectButton{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;text-align:center;font-size:12px;font-weight:700;margin-top:7px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSelectButton:hover,#TimeSearch #TimeSearchList .time:hover{background-color:var(--primaryColor);color:var(--white)}::ng-deep p-togglebutton .p-togglebutton.p-button{border-radius:7px!important;box-shadow:0 5px 20px #0000000d!important;margin-top:-2px!important}::ng-deep p-togglebutton .p-togglebutton.p-button:hover{filter:brightness(99%)!important;box-shadow:0 5px 20px #0000000d!important;transition:all .3s ease}::ng-deep p-togglebutton .p-togglebutton.p-button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(1px)!important;transition:all .3s ease}#TimeSearch #TimeSelectButton{margin-top:4px!important}::ng-deep .p-calendar .p-inputtext{height:37px}::ng-deep .p-inputtext{border-radius:7px}.calendar{display:inline-block;padding-left:5px;float:left;padding-right:10px;margin-top:-2px}::ng-deep .p-datepicker:not(.p-datepicker-inline){background:var(--table);border:0 none;box-shadow:#091e4226 0 20px 32px -8px;border-radius:12px}::ng-deep .p-button.p-button-text{background-color:transparent;color:var(--primaryColor);border-color:transparent}::ng-deep .p-button.p-button-text:enabled:hover{background:var(--primaryColorShadowLight);color:var(--primaryColor);border-color:transparent}::ng-deep .p-datepicker table td>span.p-highlight{color:var(--tableText);background:var(--primaryColorShadowLight)}::ng-deep .p-inputtext:enabled:hover{border-color:var(--primaryColor)}::ng-deep .p-datepicker{padding:.5rem;padding-bottom:0;background:var(--table);color:var(--tableText);border:1px solid var(--inputBorder);border-radius:3px}::ng-deep .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 1 var(--primaryColorShadowLight);border-color:var(--primaryColor)}::ng-deep .p-inputtext{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:1rem;color:var(--tableText);background:var(--table);padding:.5rem;border:1px solid var(--inputBorder);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;appearance:none;border-radius:7px}::ng-deep .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header{background:var(--table)}::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--tableText);background:var(--table);font-weight:600;margin:0;border-bottom:1px solid var(--inputBorder);border-top-right-radius:12px;border-top-left-radius:12px}::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:#e9ecef;color:var(--table)}::ng-deep .p-datepicker .p-timepicker{border-top:1px solid var(--background);padding:.5rem}::ng-deep .p-togglebutton.p-button{background:var(--background);border:1px solid var(--inputBorder);color:var(--tableText);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:1rem 0;border-top:1px solid var(--inputBorder)}::ng-deep .p-button{color:#fff;background:var(--primaryColor);border:1px solid var(--primaryColor);padding:.495rem 1rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:7px}::ng-deep .p-togglebutton.p-button.p-highlight{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}::ng-deep .p-togglebutton.p-button.p-highlight:hover{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}app-zac-wrapper{z-index:999999}\n"], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: SideModalComponent, selector: "lib-side-modal", inputs: ["showClose", "open"], outputs: ["openChange"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: OverridesComponent, selector: "lib-overrides", inputs: ["identity"], outputs: ["close"] }] }); }
|
|
10608
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentitiesPageComponent, selector: "lib-identities", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n <ng-content select=\"[slot=list-page-subheader]\"></ng-content>\n <lib-data-table [tableId]=\"'identities'\"\n [rowData]=\"rowData\"\n [isLoading]=\"isLoading\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"currentPage\"\n [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n [noItemsImage]=\"'No_Clients'\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n <lib-overrides\n *ngIf=\"svc.modalType === 'overrides' && svc.sideModalOpen\"\n [identity]=\"svc.selectedIdentity\"\n (close)=\"closeModal($event)\"\n ></lib-overrides>\n</lib-side-modal>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:60px;top:25px;right:25px;z-index:999}.ziti-identities-container ::ng-deep .zac-wrapper-container{height:0px;left:-999999px;position:fixed}.ziti-identities-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:10px;padding:0 0 0 20px;border-radius:7px;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:12px}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:75px;margin-left:10px}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:52px}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:10px;height:10px;border-radius:50%;background:transparent;border-top:2px solid var(--tableText);border-right:2px solid var(--tableText);border-bottom:2px solid transparent;border-left:2px solid transparent;animation:loading .5s infinite linear;margin-left:5px}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:175px}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}.tMenu .tActionRow .v7Offline{background-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline{width:14px;height:14px;border-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline:hover{border-color:var(--placeholder)}.hidden-items-container{display:flex;flex-direction:row;width:100%;flex-wrap:nowrap;justify-content:space-between}.os-icon{width:23px;height:23px;background-size:23px 23px;display:inline-flex;margin-right:8px;margin-top:5px;margin-bottom:5px}::ng-deep .date-time-container{position:fixed}::ng-deep .date-time-container .p-calendar .p-inputtext{height:1px;width:1px;padding:0}::ng-deep .date-time-container .filter-button-container{height:50px;display:flex;flex-direction:row;justify-content:center;align-items:center}::ng-deep .date-time-container .filter-button-container .toggleButton{padding-left:5px;padding-right:5px;width:unset}::ng-deep .date-time-container .p-calendar{height:30px}::ng-deep .date-time-container .p-calendar .p-inputtext{height:30px;border-top-left-radius:20px;border-bottom-left-radius:20px;text-indent:5px}::ng-deep .date-time-container .p-calendar .p-button-icon-only{border-top-right-radius:20px;border-bottom-right-radius:20px}#TimeSearch{position:relative;float:left;display:inline-block;margin-left:10px;width:50px;height:40px;background-color:var(--primary)}#TimeSearch #TimeSearchList{width:44px;height:0;position:absolute;top:0;left:-2px;overflow:hidden;transition:var(--transition);background-color:var(--menu);border-radius:8px;z-index:30}#TimeSearch #TimeSearchList .time{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;font-size:12px;font-weight:700;text-align:center;margin-top:2px;margin-left:2px;left:-2px;top:-51px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSearchList.open{top:-51px;width:44px;height:226px}#TimeSearch #TimeSelectButton{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;text-align:center;font-size:12px;font-weight:700;margin-top:7px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSelectButton:hover,#TimeSearch #TimeSearchList .time:hover{background-color:var(--primaryColor);color:var(--white)}::ng-deep p-togglebutton .p-togglebutton.p-button{border-radius:7px!important;box-shadow:0 5px 20px #0000000d!important;margin-top:-2px!important}::ng-deep p-togglebutton .p-togglebutton.p-button:hover{filter:brightness(99%)!important;box-shadow:0 5px 20px #0000000d!important;transition:all .3s ease}::ng-deep p-togglebutton .p-togglebutton.p-button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(1px)!important;transition:all .3s ease}#TimeSearch #TimeSelectButton{margin-top:4px!important}::ng-deep .p-calendar .p-inputtext{height:37px}::ng-deep .p-inputtext{border-radius:7px}.calendar{display:inline-block;padding-left:5px;float:left;padding-right:10px;margin-top:-2px}::ng-deep .p-datepicker:not(.p-datepicker-inline){background:var(--table);border:0 none;box-shadow:#091e4226 0 20px 32px -8px;border-radius:12px}::ng-deep .p-button.p-button-text{background-color:transparent;color:var(--primaryColor);border-color:transparent}::ng-deep .p-button.p-button-text:enabled:hover{background:var(--primaryColorShadowLight);color:var(--primaryColor);border-color:transparent}::ng-deep .p-datepicker table td>span.p-highlight{color:var(--tableText);background:var(--primaryColorShadowLight)}::ng-deep .p-inputtext:enabled:hover{border-color:var(--primaryColor)}::ng-deep .p-datepicker{padding:.5rem;padding-bottom:0;background:var(--table);color:var(--tableText);border:1px solid var(--inputBorder);border-radius:3px}::ng-deep .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 1 var(--primaryColorShadowLight);border-color:var(--primaryColor)}::ng-deep .p-inputtext{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:1rem;color:var(--tableText);background:var(--table);padding:.5rem;border:1px solid var(--inputBorder);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;appearance:none;border-radius:7px}::ng-deep .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header{background:var(--table)}::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--tableText);background:var(--table);font-weight:600;margin:0;border-bottom:1px solid var(--inputBorder);border-top-right-radius:12px;border-top-left-radius:12px}::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:#e9ecef;color:var(--table)}::ng-deep .p-datepicker .p-timepicker{border-top:1px solid var(--background);padding:.5rem}::ng-deep .p-togglebutton.p-button{background:var(--background);border:1px solid var(--inputBorder);color:var(--tableText);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:1rem 0;border-top:1px solid var(--inputBorder)}::ng-deep .p-button{color:#fff;background:var(--primaryColor);border:1px solid var(--primaryColor);padding:.495rem 1rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:7px}::ng-deep .p-togglebutton.p-button.p-highlight{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}::ng-deep .p-togglebutton.p-button.p-highlight:hover{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}app-zac-wrapper{z-index:999999}\n"], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: SideModalComponent, selector: "lib-side-modal", inputs: ["showClose", "open"], outputs: ["openChange"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: OverridesComponent, selector: "lib-overrides", inputs: ["identity"], outputs: ["close"] }] }); }
|
|
10551
10609
|
}
|
|
10552
10610
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageComponent, decorators: [{
|
|
10553
10611
|
type: Component,
|
|
10554
|
-
args: [{ selector: 'lib-identities', template: "<div class=\"ziti-page-container ziti-identities-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'identities'\"\n [rowData]=\"rowData\"\n [isLoading]=\"isLoading\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"currentPage\"\n [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n [noItemsImage]=\"'No_Clients'\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n <lib-overrides\n *ngIf=\"svc.modalType === 'overrides' && svc.sideModalOpen\"\n [identity]=\"svc.selectedIdentity\"\n (close)=\"closeModal($event)\"\n ></lib-overrides>\n</lib-side-modal>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:60px;top:25px;right:25px;z-index:999}.ziti-identities-container ::ng-deep .zac-wrapper-container{height:0px;left:-999999px;position:fixed}.ziti-identities-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:10px;padding:0 0 0 20px;border-radius:7px;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:12px}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:75px;margin-left:10px}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:52px}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:10px;height:10px;border-radius:50%;background:transparent;border-top:2px solid var(--tableText);border-right:2px solid var(--tableText);border-bottom:2px solid transparent;border-left:2px solid transparent;animation:loading .5s infinite linear;margin-left:5px}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:175px}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}.tMenu .tActionRow .v7Offline{background-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline{width:14px;height:14px;border-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline:hover{border-color:var(--placeholder)}.hidden-items-container{display:flex;flex-direction:row;width:100%;flex-wrap:nowrap;justify-content:space-between}.os-icon{width:23px;height:23px;background-size:23px 23px;display:inline-flex;margin-right:8px;margin-top:5px;margin-bottom:5px}::ng-deep .date-time-container{position:fixed}::ng-deep .date-time-container .p-calendar .p-inputtext{height:1px;width:1px;padding:0}::ng-deep .date-time-container .filter-button-container{height:50px;display:flex;flex-direction:row;justify-content:center;align-items:center}::ng-deep .date-time-container .filter-button-container .toggleButton{padding-left:5px;padding-right:5px;width:unset}::ng-deep .date-time-container .p-calendar{height:30px}::ng-deep .date-time-container .p-calendar .p-inputtext{height:30px;border-top-left-radius:20px;border-bottom-left-radius:20px;text-indent:5px}::ng-deep .date-time-container .p-calendar .p-button-icon-only{border-top-right-radius:20px;border-bottom-right-radius:20px}#TimeSearch{position:relative;float:left;display:inline-block;margin-left:10px;width:50px;height:40px;background-color:var(--primary)}#TimeSearch #TimeSearchList{width:44px;height:0;position:absolute;top:0;left:-2px;overflow:hidden;transition:var(--transition);background-color:var(--menu);border-radius:8px;z-index:30}#TimeSearch #TimeSearchList .time{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;font-size:12px;font-weight:700;text-align:center;margin-top:2px;margin-left:2px;left:-2px;top:-51px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSearchList.open{top:-51px;width:44px;height:226px}#TimeSearch #TimeSelectButton{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;text-align:center;font-size:12px;font-weight:700;margin-top:7px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSelectButton:hover,#TimeSearch #TimeSearchList .time:hover{background-color:var(--primaryColor);color:var(--white)}::ng-deep p-togglebutton .p-togglebutton.p-button{border-radius:7px!important;box-shadow:0 5px 20px #0000000d!important;margin-top:-2px!important}::ng-deep p-togglebutton .p-togglebutton.p-button:hover{filter:brightness(99%)!important;box-shadow:0 5px 20px #0000000d!important;transition:all .3s ease}::ng-deep p-togglebutton .p-togglebutton.p-button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(1px)!important;transition:all .3s ease}#TimeSearch #TimeSelectButton{margin-top:4px!important}::ng-deep .p-calendar .p-inputtext{height:37px}::ng-deep .p-inputtext{border-radius:7px}.calendar{display:inline-block;padding-left:5px;float:left;padding-right:10px;margin-top:-2px}::ng-deep .p-datepicker:not(.p-datepicker-inline){background:var(--table);border:0 none;box-shadow:#091e4226 0 20px 32px -8px;border-radius:12px}::ng-deep .p-button.p-button-text{background-color:transparent;color:var(--primaryColor);border-color:transparent}::ng-deep .p-button.p-button-text:enabled:hover{background:var(--primaryColorShadowLight);color:var(--primaryColor);border-color:transparent}::ng-deep .p-datepicker table td>span.p-highlight{color:var(--tableText);background:var(--primaryColorShadowLight)}::ng-deep .p-inputtext:enabled:hover{border-color:var(--primaryColor)}::ng-deep .p-datepicker{padding:.5rem;padding-bottom:0;background:var(--table);color:var(--tableText);border:1px solid var(--inputBorder);border-radius:3px}::ng-deep .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 1 var(--primaryColorShadowLight);border-color:var(--primaryColor)}::ng-deep .p-inputtext{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:1rem;color:var(--tableText);background:var(--table);padding:.5rem;border:1px solid var(--inputBorder);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;appearance:none;border-radius:7px}::ng-deep .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header{background:var(--table)}::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--tableText);background:var(--table);font-weight:600;margin:0;border-bottom:1px solid var(--inputBorder);border-top-right-radius:12px;border-top-left-radius:12px}::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:#e9ecef;color:var(--table)}::ng-deep .p-datepicker .p-timepicker{border-top:1px solid var(--background);padding:.5rem}::ng-deep .p-togglebutton.p-button{background:var(--background);border:1px solid var(--inputBorder);color:var(--tableText);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:1rem 0;border-top:1px solid var(--inputBorder)}::ng-deep .p-button{color:#fff;background:var(--primaryColor);border:1px solid var(--primaryColor);padding:.495rem 1rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:7px}::ng-deep .p-togglebutton.p-button.p-highlight{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}::ng-deep .p-togglebutton.p-button.p-highlight:hover{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}app-zac-wrapper{z-index:999999}\n"] }]
|
|
10612
|
+
args: [{ selector: 'lib-identities', template: "<div class=\"ziti-page-container ziti-identities-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n <ng-content select=\"[slot=list-page-subheader]\"></ng-content>\n <lib-data-table [tableId]=\"'identities'\"\n [rowData]=\"rowData\"\n [isLoading]=\"isLoading\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"currentPage\"\n [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n [noItemsImage]=\"'No_Clients'\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n <lib-overrides\n *ngIf=\"svc.modalType === 'overrides' && svc.sideModalOpen\"\n [identity]=\"svc.selectedIdentity\"\n (close)=\"closeModal($event)\"\n ></lib-overrides>\n</lib-side-modal>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:60px;top:25px;right:25px;z-index:999}.ziti-identities-container ::ng-deep .zac-wrapper-container{height:0px;left:-999999px;position:fixed}.ziti-identities-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:10px;padding:0 0 0 20px;border-radius:7px;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:12px}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:75px;margin-left:10px}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:52px}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:10px;height:10px;border-radius:50%;background:transparent;border-top:2px solid var(--tableText);border-right:2px solid var(--tableText);border-bottom:2px solid transparent;border-left:2px solid transparent;animation:loading .5s infinite linear;margin-left:5px}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:175px}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}.tMenu .tActionRow .v7Offline{background-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline{width:14px;height:14px;border-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline:hover{border-color:var(--placeholder)}.hidden-items-container{display:flex;flex-direction:row;width:100%;flex-wrap:nowrap;justify-content:space-between}.os-icon{width:23px;height:23px;background-size:23px 23px;display:inline-flex;margin-right:8px;margin-top:5px;margin-bottom:5px}::ng-deep .date-time-container{position:fixed}::ng-deep .date-time-container .p-calendar .p-inputtext{height:1px;width:1px;padding:0}::ng-deep .date-time-container .filter-button-container{height:50px;display:flex;flex-direction:row;justify-content:center;align-items:center}::ng-deep .date-time-container .filter-button-container .toggleButton{padding-left:5px;padding-right:5px;width:unset}::ng-deep .date-time-container .p-calendar{height:30px}::ng-deep .date-time-container .p-calendar .p-inputtext{height:30px;border-top-left-radius:20px;border-bottom-left-radius:20px;text-indent:5px}::ng-deep .date-time-container .p-calendar .p-button-icon-only{border-top-right-radius:20px;border-bottom-right-radius:20px}#TimeSearch{position:relative;float:left;display:inline-block;margin-left:10px;width:50px;height:40px;background-color:var(--primary)}#TimeSearch #TimeSearchList{width:44px;height:0;position:absolute;top:0;left:-2px;overflow:hidden;transition:var(--transition);background-color:var(--menu);border-radius:8px;z-index:30}#TimeSearch #TimeSearchList .time{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;font-size:12px;font-weight:700;text-align:center;margin-top:2px;margin-left:2px;left:-2px;top:-51px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSearchList.open{top:-51px;width:44px;height:226px}#TimeSearch #TimeSelectButton{width:40px;background-color:var(--background);padding-left:8px;padding-right:8px;border-radius:8px;line-height:26px;text-align:center;font-size:12px;font-weight:700;margin-top:7px;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSelectButton:hover,#TimeSearch #TimeSearchList .time:hover{background-color:var(--primaryColor);color:var(--white)}::ng-deep p-togglebutton .p-togglebutton.p-button{border-radius:7px!important;box-shadow:0 5px 20px #0000000d!important;margin-top:-2px!important}::ng-deep p-togglebutton .p-togglebutton.p-button:hover{filter:brightness(99%)!important;box-shadow:0 5px 20px #0000000d!important;transition:all .3s ease}::ng-deep p-togglebutton .p-togglebutton.p-button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(1px)!important;transition:all .3s ease}#TimeSearch #TimeSelectButton{margin-top:4px!important}::ng-deep .p-calendar .p-inputtext{height:37px}::ng-deep .p-inputtext{border-radius:7px}.calendar{display:inline-block;padding-left:5px;float:left;padding-right:10px;margin-top:-2px}::ng-deep .p-datepicker:not(.p-datepicker-inline){background:var(--table);border:0 none;box-shadow:#091e4226 0 20px 32px -8px;border-radius:12px}::ng-deep .p-button.p-button-text{background-color:transparent;color:var(--primaryColor);border-color:transparent}::ng-deep .p-button.p-button-text:enabled:hover{background:var(--primaryColorShadowLight);color:var(--primaryColor);border-color:transparent}::ng-deep .p-datepicker table td>span.p-highlight{color:var(--tableText);background:var(--primaryColorShadowLight)}::ng-deep .p-inputtext:enabled:hover{border-color:var(--primaryColor)}::ng-deep .p-datepicker{padding:.5rem;padding-bottom:0;background:var(--table);color:var(--tableText);border:1px solid var(--inputBorder);border-radius:3px}::ng-deep .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 1 var(--primaryColorShadowLight);border-color:var(--primaryColor)}::ng-deep .p-inputtext{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:1rem;color:var(--tableText);background:var(--table);padding:.5rem;border:1px solid var(--inputBorder);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;appearance:none;border-radius:7px}::ng-deep .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header{background:var(--table)}::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--tableText);background:var(--table);font-weight:600;margin:0;border-bottom:1px solid var(--inputBorder);border-top-right-radius:12px;border-top-left-radius:12px}::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:#e9ecef;color:var(--table)}::ng-deep .p-datepicker .p-timepicker{border-top:1px solid var(--background);padding:.5rem}::ng-deep .p-togglebutton.p-button{background:var(--background);border:1px solid var(--inputBorder);color:var(--tableText);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:1rem 0;border-top:1px solid var(--inputBorder)}::ng-deep .p-button{color:#fff;background:var(--primaryColor);border:1px solid var(--primaryColor);padding:.495rem 1rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:7px}::ng-deep .p-togglebutton.p-button.p-highlight{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}::ng-deep .p-togglebutton.p-button.p-highlight:hover{background:var(--primaryColor);border:1px solid var(--primaryColor);color:var(--background)}app-zac-wrapper{z-index:999999}\n"] }]
|
|
10555
10613
|
}], ctorParameters: function () { return [{ type: IdentitiesPageService }, { type: DataTableFilterService }, { type: i3$2.MatDialog }, { type: TabNameService }, { type: ZacWrapperServiceClass, decorators: [{
|
|
10556
10614
|
type: Inject,
|
|
10557
10615
|
args: [ZAC_WRAPPER_SERVICE]
|
|
@@ -11056,58 +11114,76 @@ function onAppInit(injector) {
|
|
|
11056
11114
|
limitations under the License.
|
|
11057
11115
|
*/
|
|
11058
11116
|
class PreviewListComponent {
|
|
11059
|
-
constructor() {
|
|
11117
|
+
constructor(router) {
|
|
11118
|
+
this.router = router;
|
|
11119
|
+
//@Input() hideOption: string;
|
|
11060
11120
|
this.label = '';
|
|
11061
11121
|
this.clickable = false;
|
|
11062
11122
|
this.isLoading = false;
|
|
11063
11123
|
this.allNames = [];
|
|
11124
|
+
this.items = [];
|
|
11064
11125
|
this.allowRemove = false;
|
|
11065
11126
|
this.tooltip = '';
|
|
11066
11127
|
this.itemSelected = new EventEmitter();
|
|
11067
11128
|
this.itemRemoved = new EventEmitter();
|
|
11068
|
-
this.
|
|
11129
|
+
this.previewItems = [];
|
|
11130
|
+
this.hideOption = 'asdf';
|
|
11069
11131
|
this.filterFor = '';
|
|
11070
11132
|
}
|
|
11071
11133
|
ngOnInit() {
|
|
11072
|
-
this.
|
|
11073
|
-
|
|
11074
|
-
|
|
11134
|
+
this.previewItems = [];
|
|
11135
|
+
if (!isEmpty(this.allNames)) {
|
|
11136
|
+
this.previewItems.push(...this.allNames);
|
|
11137
|
+
this.previewItems = this.previewItems.filter((item) => item !== this.hideOption);
|
|
11138
|
+
}
|
|
11139
|
+
else {
|
|
11140
|
+
this.previewItems.push(...this.items);
|
|
11141
|
+
}
|
|
11075
11142
|
this.sort();
|
|
11076
11143
|
}
|
|
11077
11144
|
ngOnChanges() {
|
|
11078
|
-
this.
|
|
11079
|
-
this.
|
|
11080
|
-
this.
|
|
11145
|
+
this.previewItems = [];
|
|
11146
|
+
this.previewItems.push(...this.allNames);
|
|
11147
|
+
this.previewItems = this.previewItems.filter((item) => item !== this.hideOption);
|
|
11081
11148
|
this.sort();
|
|
11082
11149
|
}
|
|
11083
11150
|
onKeydownEvent() {
|
|
11084
|
-
this.
|
|
11151
|
+
this.previewItems = [];
|
|
11085
11152
|
for (let i = 0; i < this.allNames.length; i++) {
|
|
11086
|
-
if (this.allNames
|
|
11087
|
-
|
|
11153
|
+
if (!isEmpty(this.allNames)) {
|
|
11154
|
+
if (this.allNames[i].indexOf(this.filterFor) >= 0) {
|
|
11155
|
+
this.previewItems.push(this.allNames[i]);
|
|
11156
|
+
}
|
|
11157
|
+
}
|
|
11158
|
+
else {
|
|
11159
|
+
if (this.items[i].name.indexOf(this.filterFor) >= 0) {
|
|
11160
|
+
this.previewItems.push(this.items[i]);
|
|
11161
|
+
}
|
|
11088
11162
|
}
|
|
11089
11163
|
}
|
|
11090
11164
|
this.sort();
|
|
11091
11165
|
}
|
|
11092
11166
|
sort() {
|
|
11093
|
-
this.
|
|
11167
|
+
this.previewItems.sort((item1, item2) => (item1.name ? item1.name.localeCompare(item2.name) : item1.localeCompare(item2)));
|
|
11094
11168
|
}
|
|
11095
|
-
selected(
|
|
11169
|
+
selected(item) {
|
|
11096
11170
|
if (this.clickable)
|
|
11097
|
-
this.itemSelected.emit(
|
|
11171
|
+
this.itemSelected.emit(item);
|
|
11098
11172
|
}
|
|
11099
|
-
remove(
|
|
11100
|
-
this.itemRemoved.emit(
|
|
11173
|
+
remove(item) {
|
|
11174
|
+
this.itemRemoved.emit(item);
|
|
11101
11175
|
}
|
|
11102
|
-
|
|
11103
|
-
|
|
11176
|
+
linkClicked(event, item) {
|
|
11177
|
+
this.router.navigateByUrl(item.href);
|
|
11178
|
+
event.preventDefault();
|
|
11179
|
+
}
|
|
11180
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PreviewListComponent, deps: [{ token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11181
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PreviewListComponent, selector: "lib-preview-list", inputs: { label: "label", clickable: "clickable", isLoading: "isLoading", allNames: "allNames", items: "items", allowRemove: "allowRemove", tooltip: "tooltip" }, outputs: { itemSelected: "itemSelected", itemRemoved: "itemRemoved" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"listBox row\">\n <input (keyup)=\"onKeydownEvent()\" [(ngModel)]=\"filterFor\" placeholder=\"Type to Filter\"/>\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <div class=\"text row\">\n <div (click)=\"selected(item)\" *ngFor=\"let item of previewItems\" [ngClass]=\"{ clickable: clickable }\" class=\"listText\">\n <div *ngIf=\"allowRemove\" class=\"icon-clear\" (click)=\"remove(item)\"></div>\n <span *ngIf=\"!item.href\" class=\"preview-name\" matTooltip=\"{{tooltip}}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">{{ item }}</span>\n <a *ngIf=\"item.href\" [href]=\"'./' + item.href\" (click)=\"linkClicked($event, item)\" matTooltip=\"{{tooltip}}\" matTooltipShowDelay=\"1000\" matTooltipPosition=\"below\"><span *ngIf=\"item.name\" class=\"preview-name\">{{ item.name }}</span></a>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;position:relative}.counter{background-color:#4c5566;color:var(--white);position:absolute;right:0}.listBox{background-color:var(--stroke);padding:10px;border-radius:7px;height:100%;min-height:180px}.listBox input{height:40px;border-radius:27px;font-size:14px;font-weight:600;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAuCAYAAABTTPsKAAAD4klEQVRYhc2ZyYsUSRSHvypLbRfGDfWgzngYFRR3EUQPOm5oOyMuKIoo4kk9iAriQfAPcAMvKuJBPAyiXmbAwWVUFGEYmMHlIi24ogd3cW3trpYnv4CooLKrKiuzqn5QUBmZEe/Lly9fvIjMPH36CmA4cABYAHSnsdQK/AVsBR4Y8E/ATaA30KXBYJ3agffA+Cywt8FhEZsx7jUPf/bC4BNwuc5woWYBPdTWmgti9hSwrv6MBToOrFVD92xwsqOOYFEqYAqBGzGOC5gshv07aANuNZCnM8A4IOcacsEFdjyp9lzly0KipZEBA7VYSKwEfpf7nTqU4uqpHkWYVlkInAR+ATZ4AZ4HmoErdQKeCVz0eGymO2asrpawE38D0xXHdjcfFM93aww7Avgf6CUPWyK4Dsw2cJfW7A4WA4/1P6NHcgHoV0PYfrLpwqFdTIv1vyAPvwXmyLMd8voQ4A+gaw1gu8rWENl2T3mO2AiBTfeARYphFB7TgMM1AD4sWy7V5sVyz78oBDZd0wvoZHe7HtiWIuw22fBntQ1iKVAxYFRw7PE8nVEZ2pwCbLPGdimsXbaPF7vYZYmi54A/gfneY7JSdCpwOyHYscC/QJOOLSOcA36NKg+iPIw6rNBM2Ka2bnqLBycAO1hjdfNgW2QzspbpDNj0EZintzSv6wdojdVUom9natIYAzRmXjbmyWakSgGbnigsnJdzepQngqmzXGXUd6wXam2y8aTUGOUAm/4DVnvHZmgpsDsG8G719SvF1bJRUuUCm84Au7zMkfWMl6sl6uPs5jXmmXIH6CxLRMkqu+Weh94BPwJvSvTrAzwCftCxhcFpq8AqMR4W8OXIFqk/AxPUv0lJfl/Q114gP4yGAT092BtxFrxxgL8Ay4D7OrYa4LciwKOBNRHrxKye0pdKjVcSw74eBSuV4RHXtUW0W9+HcQzHBUaVlFPUflxU+4eI9pKqBriUDqm+db9nSQwaJ4bLldUDOzyn9G904KHAxKRtpBkSpsQ3ZNL0sG1EW9r6quNw2R5Lab90vbX67ZXUS5cUcJTnZmjqtjQ2KAlD1QB/9v4PVAETbgnk5OWeSYQDVQKf9WayjKbnO9oxT03VAO8HrgZbAubpS1pU2tLHKrh/VOtGTdMVqdqQmAvs1Eo37z32LarGWrXXMAV4WW9gBGlL8sn2DS1YRo3U57TNScUvCWYJAxsDHPXarKy00vMgcD6pD5ZJ5mELkU3AQuC15+2stk/7JmEkjYnDlu+jtL/rpuZwRn0Rd/C0Zrrn+m69UauK71ulkt2EbU7HUtrFzxF9BXLpzzZLtusDZuUCvgHvMdO9Y7xsIwAAAABJRU5ErkJggg==);background-size:auto 21px;background-position:top 8px right 12px;background-repeat:no-repeat;margin-bottom:10px;padding-left:14px}.text{overflow-y:scroll;height:100%}.listText{width:100%;position:relative;float:left;font-size:14px;font-weight:600;padding-left:10px;padding-right:10px;margin-bottom:2px;color:var(--primary);display:flex;flex-direction:row;align-items:center;gap:5px}.listText a{color:var(--primary)}.listText .icon-clear{margin-top:2px}.listText .icon-clear:hover{color:var(--background)}::-webkit-scrollbar-thumb{background-color:var(--background)!important}.clickable{color:var(--primary);cursor:pointer}.clickable:hover,.clickable:focus{filter:brightness(90%)}.clickable:active{color:var(--icon);transform:translateY(1px)}.clickable .preview-name:hover,.clickable .preview-name:focus{text-decoration:underline}.clickable .preview-name:active{text-decoration:underline}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}\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.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"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
11104
11182
|
}
|
|
11105
11183
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PreviewListComponent, decorators: [{
|
|
11106
11184
|
type: Component,
|
|
11107
|
-
args: [{ selector: 'lib-preview-list', template: "<div class=\"listBox row\">\n <input (keyup)=\"onKeydownEvent()\" [(ngModel)]=\"filterFor\" placeholder=\"Type to Filter\"/>\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <div class=\"text row\">\n <div (click)=\"selected(
|
|
11108
|
-
}], propDecorators: {
|
|
11109
|
-
type: Input
|
|
11110
|
-
}], label: [{
|
|
11185
|
+
args: [{ selector: 'lib-preview-list', template: "<div class=\"listBox row\">\n <input (keyup)=\"onKeydownEvent()\" [(ngModel)]=\"filterFor\" placeholder=\"Type to Filter\"/>\n <span *ngIf=\"isLoading\" class=\"spinner\"></span>\n\n <div class=\"text row\">\n <div (click)=\"selected(item)\" *ngFor=\"let item of previewItems\" [ngClass]=\"{ clickable: clickable }\" class=\"listText\">\n <div *ngIf=\"allowRemove\" class=\"icon-clear\" (click)=\"remove(item)\"></div>\n <span *ngIf=\"!item.href\" class=\"preview-name\" matTooltip=\"{{tooltip}}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">{{ item }}</span>\n <a *ngIf=\"item.href\" [href]=\"'./' + item.href\" (click)=\"linkClicked($event, item)\" matTooltip=\"{{tooltip}}\" matTooltipShowDelay=\"1000\" matTooltipPosition=\"below\"><span *ngIf=\"item.name\" class=\"preview-name\">{{ item.name }}</span></a>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;position:relative}.counter{background-color:#4c5566;color:var(--white);position:absolute;right:0}.listBox{background-color:var(--stroke);padding:10px;border-radius:7px;height:100%;min-height:180px}.listBox input{height:40px;border-radius:27px;font-size:14px;font-weight:600;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAuCAYAAABTTPsKAAAD4klEQVRYhc2ZyYsUSRSHvypLbRfGDfWgzngYFRR3EUQPOm5oOyMuKIoo4kk9iAriQfAPcAMvKuJBPAyiXmbAwWVUFGEYmMHlIi24ogd3cW3trpYnv4CooLKrKiuzqn5QUBmZEe/Lly9fvIjMPH36CmA4cABYAHSnsdQK/AVsBR4Y8E/ATaA30KXBYJ3agffA+Cywt8FhEZsx7jUPf/bC4BNwuc5woWYBPdTWmgti9hSwrv6MBToOrFVD92xwsqOOYFEqYAqBGzGOC5gshv07aANuNZCnM8A4IOcacsEFdjyp9lzly0KipZEBA7VYSKwEfpf7nTqU4uqpHkWYVlkInAR+ATZ4AZ4HmoErdQKeCVz0eGymO2asrpawE38D0xXHdjcfFM93aww7Avgf6CUPWyK4Dsw2cJfW7A4WA4/1P6NHcgHoV0PYfrLpwqFdTIv1vyAPvwXmyLMd8voQ4A+gaw1gu8rWENl2T3mO2AiBTfeARYphFB7TgMM1AD4sWy7V5sVyz78oBDZd0wvoZHe7HtiWIuw22fBntQ1iKVAxYFRw7PE8nVEZ2pwCbLPGdimsXbaPF7vYZYmi54A/gfneY7JSdCpwOyHYscC/QJOOLSOcA36NKg+iPIw6rNBM2Ka2bnqLBycAO1hjdfNgW2QzspbpDNj0EZintzSv6wdojdVUom9natIYAzRmXjbmyWakSgGbnigsnJdzepQngqmzXGXUd6wXam2y8aTUGOUAm/4DVnvHZmgpsDsG8G719SvF1bJRUuUCm84Au7zMkfWMl6sl6uPs5jXmmXIH6CxLRMkqu+Weh94BPwJvSvTrAzwCftCxhcFpq8AqMR4W8OXIFqk/AxPUv0lJfl/Q114gP4yGAT092BtxFrxxgL8Ay4D7OrYa4LciwKOBNRHrxKye0pdKjVcSw74eBSuV4RHXtUW0W9+HcQzHBUaVlFPUflxU+4eI9pKqBriUDqm+db9nSQwaJ4bLldUDOzyn9G904KHAxKRtpBkSpsQ3ZNL0sG1EW9r6quNw2R5Lab90vbX67ZXUS5cUcJTnZmjqtjQ2KAlD1QB/9v4PVAETbgnk5OWeSYQDVQKf9WayjKbnO9oxT03VAO8HrgZbAubpS1pU2tLHKrh/VOtGTdMVqdqQmAvs1Eo37z32LarGWrXXMAV4WW9gBGlL8sn2DS1YRo3U57TNScUvCWYJAxsDHPXarKy00vMgcD6pD5ZJ5mELkU3AQuC15+2stk/7JmEkjYnDlu+jtL/rpuZwRn0Rd/C0Zrrn+m69UauK71ulkt2EbU7HUtrFzxF9BXLpzzZLtusDZuUCvgHvMdO9Y7xsIwAAAABJRU5ErkJggg==);background-size:auto 21px;background-position:top 8px right 12px;background-repeat:no-repeat;margin-bottom:10px;padding-left:14px}.text{overflow-y:scroll;height:100%}.listText{width:100%;position:relative;float:left;font-size:14px;font-weight:600;padding-left:10px;padding-right:10px;margin-bottom:2px;color:var(--primary);display:flex;flex-direction:row;align-items:center;gap:5px}.listText a{color:var(--primary)}.listText .icon-clear{margin-top:2px}.listText .icon-clear:hover{color:var(--background)}::-webkit-scrollbar-thumb{background-color:var(--background)!important}.clickable{color:var(--primary);cursor:pointer}.clickable:hover,.clickable:focus{filter:brightness(90%)}.clickable:active{color:var(--icon);transform:translateY(1px)}.clickable .preview-name:hover,.clickable .preview-name:focus{text-decoration:underline}.clickable .preview-name:active{text-decoration:underline}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}\n"] }]
|
|
11186
|
+
}], ctorParameters: function () { return [{ type: i3.Router }]; }, propDecorators: { label: [{
|
|
11111
11187
|
type: Input
|
|
11112
11188
|
}], clickable: [{
|
|
11113
11189
|
type: Input
|
|
@@ -11115,6 +11191,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
11115
11191
|
type: Input
|
|
11116
11192
|
}], allNames: [{
|
|
11117
11193
|
type: Input
|
|
11194
|
+
}], items: [{
|
|
11195
|
+
type: Input
|
|
11118
11196
|
}], allowRemove: [{
|
|
11119
11197
|
type: Input
|
|
11120
11198
|
}], tooltip: [{
|
|
@@ -11263,8 +11341,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
11263
11341
|
limitations under the License.
|
|
11264
11342
|
*/
|
|
11265
11343
|
class IdentityFormComponent extends ProjectableForm {
|
|
11266
|
-
constructor(settingsService, svc, identitiesService, zitiService, growlerService, extService, router, route) {
|
|
11267
|
-
super(growlerService, extService, zitiService, router, route);
|
|
11344
|
+
constructor(settingsService, svc, identitiesService, zitiService, growlerService, extService, router, route, location) {
|
|
11345
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
11268
11346
|
this.settingsService = settingsService;
|
|
11269
11347
|
this.svc = svc;
|
|
11270
11348
|
this.identitiesService = identitiesService;
|
|
@@ -11541,13 +11619,13 @@ class IdentityFormComponent extends ProjectableForm {
|
|
|
11541
11619
|
}
|
|
11542
11620
|
clear() {
|
|
11543
11621
|
}
|
|
11544
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: IdentityFormService }, { token: IdentitiesPageService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: IDENTITY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11622
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: IdentityFormService }, { token: IdentitiesPageService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: IDENTITY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11545
11623
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentityFormComponent, selector: "lib-identity-form", inputs: { formData: "formData", identityRoleAttributes: "identityRoleAttributes" }, outputs: { close: "close" }, providers: [
|
|
11546
11624
|
{
|
|
11547
11625
|
provide: MatDialogRef,
|
|
11548
11626
|
useValue: {}
|
|
11549
11627
|
}
|
|
11550
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\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]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\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 <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n *ngIf=\"hasEnrolmentToken || hasAuthenticator\"\n [showHeader]=\"false\"\n >\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\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>", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}::ng-deep .copy.icon-copy.url-copy{background-color:var(--navigation)}\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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["hideOption", "label", "clickable", "isLoading", "allNames", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { 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: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "pipe", type: SafePipe, name: "safe" }] }); }
|
|
11628
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\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]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\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 <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n *ngIf=\"hasEnrolmentToken || hasAuthenticator\"\n [showHeader]=\"false\"\n >\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\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>", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}::ng-deep .copy.icon-copy.url-copy{background-color:var(--navigation)}\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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { 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: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "pipe", type: SafePipe, name: "safe" }] }); }
|
|
11551
11629
|
}
|
|
11552
11630
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityFormComponent, decorators: [{
|
|
11553
11631
|
type: Component,
|
|
@@ -11566,7 +11644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
11566
11644
|
}] }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
11567
11645
|
type: Inject,
|
|
11568
11646
|
args: [IDENTITY_EXTENSION_SERVICE]
|
|
11569
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
11647
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
11570
11648
|
type: Input
|
|
11571
11649
|
}], identityRoleAttributes: [{
|
|
11572
11650
|
type: Input
|
|
@@ -11705,6 +11783,13 @@ class Service {
|
|
|
11705
11783
|
this.contextMenu = 'Yes';
|
|
11706
11784
|
}
|
|
11707
11785
|
}
|
|
11786
|
+
class Config {
|
|
11787
|
+
constructor() {
|
|
11788
|
+
this.rootNode = 'No';
|
|
11789
|
+
this.children = [];
|
|
11790
|
+
this.contextMenu = 'Yes';
|
|
11791
|
+
}
|
|
11792
|
+
}
|
|
11708
11793
|
class Group {
|
|
11709
11794
|
constructor(idv, s, g) {
|
|
11710
11795
|
this.id = idv;
|
|
@@ -11749,16 +11834,118 @@ class ERouter {
|
|
|
11749
11834
|
}
|
|
11750
11835
|
class Children {
|
|
11751
11836
|
constructor() {
|
|
11837
|
+
this.rootNode = 'No';
|
|
11838
|
+
this.firstChild = 'No';
|
|
11752
11839
|
this.type = 'Children';
|
|
11753
11840
|
this.children = [];
|
|
11754
11841
|
}
|
|
11755
11842
|
}
|
|
11756
11843
|
class NetworkVisualizerHelper {
|
|
11757
|
-
|
|
11844
|
+
constructor() {
|
|
11845
|
+
this.uniqIId = 0;
|
|
11846
|
+
}
|
|
11847
|
+
createUniqId() {
|
|
11848
|
+
return ++this.uniqIId;
|
|
11849
|
+
}
|
|
11850
|
+
createEdgeRouterNode(er, isRootNode = 'Yes') {
|
|
11851
|
+
const erOb = new ERouter();
|
|
11852
|
+
// erOb.id = createId();
|
|
11853
|
+
erOb.uuid = er.id;
|
|
11854
|
+
erOb.name = er.name;
|
|
11855
|
+
erOb.verified = er.isVerified ? 'Yes' : 'No';
|
|
11856
|
+
//erOb.version = er.productVersion;
|
|
11857
|
+
erOb.online = er.isOnline ? 'Yes' : 'No';
|
|
11858
|
+
erOb.disabled = er.disabled ? 'Yes' : 'No';
|
|
11859
|
+
erOb.type = 'Edge Router';
|
|
11860
|
+
erOb.rootNode = isRootNode;
|
|
11861
|
+
erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
|
|
11862
|
+
erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
|
|
11863
|
+
erOb.createdAt = er.createdAt;
|
|
11864
|
+
erOb.updatedAt = er.updatedAt;
|
|
11865
|
+
return erOb;
|
|
11866
|
+
}
|
|
11867
|
+
createServiceEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
|
|
11868
|
+
const serviceerpolicy = new ServiceERPolicy();
|
|
11869
|
+
// serviceerpolicy.id = createId();
|
|
11870
|
+
serviceerpolicy.uuid = rawObj.id;
|
|
11871
|
+
serviceerpolicy.name = rawObj.name;
|
|
11872
|
+
serviceerpolicy.type = 'Service Router Policy';
|
|
11873
|
+
serviceerpolicy.rootNode = isRootNode;
|
|
11874
|
+
return serviceerpolicy;
|
|
11875
|
+
}
|
|
11876
|
+
createEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
|
|
11877
|
+
const erpolicy = new ERPolicy();
|
|
11878
|
+
// erpolicy.id = createId();
|
|
11879
|
+
erpolicy.uuid = rawObj.id;
|
|
11880
|
+
erpolicy.name = rawObj.name;
|
|
11881
|
+
erpolicy.type = 'Router Policy';
|
|
11882
|
+
erpolicy.rootNode = isRootNode;
|
|
11883
|
+
erpolicy.isSystem = rawObj.isSystem;
|
|
11884
|
+
erpolicy.semantic = rawObj.semantic;
|
|
11885
|
+
return erpolicy;
|
|
11886
|
+
}
|
|
11887
|
+
createServicePolicyNode(rawObj, isRootNode = 'Yes') {
|
|
11888
|
+
const bindGrp = new Group(43423, 'Bind-Policies', 'Bind Service Policy');
|
|
11889
|
+
const dialGrp = new Group(43545, 'Dial-Policies', 'Dial Service Policy');
|
|
11890
|
+
const spolicy = new ServicePolicy$1();
|
|
11891
|
+
// spolicy.id = createId();
|
|
11892
|
+
spolicy.id = 87956;
|
|
11893
|
+
spolicy.uuid = rawObj.id;
|
|
11894
|
+
spolicy.name = rawObj.name;
|
|
11895
|
+
spolicy.type = 'Service Policy';
|
|
11896
|
+
spolicy.rootNode = isRootNode;
|
|
11897
|
+
spolicy.clickProcess = "Not Yet";
|
|
11898
|
+
if (rawObj.type === 'Bind') {
|
|
11899
|
+
bindGrp.children.push(spolicy);
|
|
11900
|
+
return bindGrp;
|
|
11901
|
+
}
|
|
11902
|
+
else {
|
|
11903
|
+
dialGrp.children.push(spolicy);
|
|
11904
|
+
return dialGrp;
|
|
11905
|
+
}
|
|
11906
|
+
}
|
|
11907
|
+
createIdentityNode(rawObj, isRootNode = 'Yes') {
|
|
11908
|
+
const endpoint = new Identity();
|
|
11909
|
+
endpoint.rootNode = isRootNode;
|
|
11910
|
+
// endpoint.id = createId();
|
|
11911
|
+
endpoint.id = 5432;
|
|
11912
|
+
endpoint.uuid = rawObj.id;
|
|
11913
|
+
endpoint.name = rawObj.name;
|
|
11914
|
+
endpoint.online = rawObj.hasApiSession === true ? 'Yes' : 'No';
|
|
11915
|
+
endpoint.type = 'Identity';
|
|
11916
|
+
endpoint.createdAt = rawObj.createdAt;
|
|
11917
|
+
endpoint.updatedAt = rawObj.updatedAt;
|
|
11918
|
+
endpoint.status = rawObj.sdkInfo !== null ? 'Registered' : 'Not Registered';
|
|
11919
|
+
if (rawObj.sdkInfo) {
|
|
11920
|
+
endpoint.os = rawObj.sdkInfo.type ? rawObj.sdkInfo.type : rawObj.sdkInfo.appId;
|
|
11921
|
+
endpoint.osVersion = rawObj.sdkInfo.version;
|
|
11922
|
+
}
|
|
11923
|
+
if (rawObj.authPolicy && rawObj.authPolicy.name.includes("BrowZer")) {
|
|
11924
|
+
endpoint.type = 'BrowZer Identity';
|
|
11925
|
+
}
|
|
11926
|
+
return endpoint;
|
|
11927
|
+
}
|
|
11928
|
+
createServiceNode(rawObj, isRootNode = 'Yes') {
|
|
11929
|
+
const serviceobj = new Service();
|
|
11930
|
+
// serviceobj.id = createId();
|
|
11931
|
+
serviceobj.name = rawObj.name;
|
|
11932
|
+
serviceobj.uuid = rawObj.id;
|
|
11933
|
+
serviceobj.type = 'Service';
|
|
11934
|
+
serviceobj.rootNode = isRootNode;
|
|
11935
|
+
const attributeswithName = [];
|
|
11936
|
+
// attributeswithName.push('@' + rawObj.name);
|
|
11937
|
+
rawObj && rawObj.roleAttributes && rawObj.roleAttributes.find((srattr) => {
|
|
11938
|
+
attributeswithName.push(srattr);
|
|
11939
|
+
});
|
|
11940
|
+
return serviceobj;
|
|
11941
|
+
}
|
|
11942
|
+
getResourceTreeObj(networkName, networkStatus, services, identities, servicePolicies, edgerouters, edgeRouterPolicies, serviceEdgeRouterPolicies,
|
|
11758
11943
|
// networkProductVersion,
|
|
11759
|
-
uniqId, logger) {
|
|
11944
|
+
services_totalCount, identities_totalCount, edgerouters_totalCount, service_policies_totalCount, edge_router_policies_totalCount, service_router_policies_totalCount, uniqId, logger, ...args) {
|
|
11945
|
+
this.uniqIId = uniqId;
|
|
11760
11946
|
function createId() {
|
|
11761
11947
|
++uniqId;
|
|
11948
|
+
// ++this.uniqIId;
|
|
11762
11949
|
return uniqId;
|
|
11763
11950
|
}
|
|
11764
11951
|
class RootJson {
|
|
@@ -11768,13 +11955,16 @@ class NetworkVisualizerHelper {
|
|
|
11768
11955
|
this.children = [];
|
|
11769
11956
|
this.contextMenu = 'Yes';
|
|
11770
11957
|
this.type = 'Network';
|
|
11958
|
+
this.rootNode = 'No';
|
|
11771
11959
|
}
|
|
11772
11960
|
}
|
|
11773
11961
|
const rootJson = new RootJson();
|
|
11774
11962
|
rootJson.name = 'Network';
|
|
11775
11963
|
rootJson.status = 'Provisioned';
|
|
11776
|
-
function processIdentitiesForTree(identitiesChildren,
|
|
11777
|
-
|
|
11964
|
+
function processIdentitiesForTree(identitiesChildren, identities, nx, ny) {
|
|
11965
|
+
if (args[2] === false)
|
|
11966
|
+
return identitiesChildren;
|
|
11967
|
+
// identitiesChildren.name = identitiesChildren.name + ' (' + ny + ')';
|
|
11778
11968
|
const unregisteredGrp = new Group(createId(), 'Identities[Unregistered]', 'Identities that are not registered');
|
|
11779
11969
|
const abcdGrp = new Group(createId(), 'Identities [A-D]', 'Identity name starts with A to D');
|
|
11780
11970
|
const efghGrp = new Group(createId(), 'Identities [E-H]', 'Identity name starts with E to H');
|
|
@@ -11789,16 +11979,20 @@ class NetworkVisualizerHelper {
|
|
|
11789
11979
|
const endpoint = new Identity();
|
|
11790
11980
|
endpoint.rootNode = 'Yes';
|
|
11791
11981
|
endpoint.id = createId();
|
|
11792
|
-
endpoint.uuid =
|
|
11793
|
-
endpoint.name =
|
|
11794
|
-
endpoint.online =
|
|
11982
|
+
endpoint.uuid = identities[j].id;
|
|
11983
|
+
endpoint.name = identities[j].name;
|
|
11984
|
+
endpoint.online = identities[j].hasApiSession === true ? 'Yes' : 'No';
|
|
11795
11985
|
endpoint.type = 'Identity';
|
|
11796
|
-
endpoint.
|
|
11797
|
-
|
|
11798
|
-
|
|
11799
|
-
|
|
11986
|
+
endpoint.createdAt = identities[j].createdAt;
|
|
11987
|
+
endpoint.updatedAt = identities[j].updatedAt;
|
|
11988
|
+
endpoint.status = identities[j].sdkInfo !== null ? 'Registered' : 'Not Registered';
|
|
11989
|
+
if (identities[j].sdkInfo) {
|
|
11990
|
+
endpoint.os = identities[j].sdkInfo.type ? identities[j].sdkInfo.type : identities[j].sdkInfo.appId;
|
|
11991
|
+
endpoint.osVersion = identities[j].sdkInfo.version;
|
|
11992
|
+
}
|
|
11993
|
+
if (identities[j].authPolicy && identities[j].authPolicy.name.includes("BrowZer")) {
|
|
11994
|
+
endpoint.type = 'BrowZer Identity';
|
|
11800
11995
|
}
|
|
11801
|
-
endpoint.os = endpoints[j].os;
|
|
11802
11996
|
const cha = endpoint.name.charAt(0).toLowerCase();
|
|
11803
11997
|
if (endpoint.status === 'Not Registered') {
|
|
11804
11998
|
unregisteredGrp.children.push(endpoint);
|
|
@@ -11925,22 +12119,24 @@ class NetworkVisualizerHelper {
|
|
|
11925
12119
|
for (let j = i; j < lastElement; j++) {
|
|
11926
12120
|
chld.children.push(oneTo9Grp.children[j]);
|
|
11927
12121
|
}
|
|
11928
|
-
chld.name = chld.name + ' (' + chld.children.length + ')';
|
|
12122
|
+
// chld.name = chld.name + ' (' + chld.children.length + ')';
|
|
11929
12123
|
identitiesChildren.children.push(chld);
|
|
11930
12124
|
i = i + 80;
|
|
11931
12125
|
}
|
|
11932
12126
|
}
|
|
11933
12127
|
return identitiesChildren;
|
|
11934
12128
|
}
|
|
11935
|
-
function processServicePoliciesForTree(servicePolicyChildren,
|
|
11936
|
-
|
|
11937
|
-
|
|
12129
|
+
function processServicePoliciesForTree(servicePolicyChildren, servicePolicies, nx, ny) {
|
|
12130
|
+
if (args[0] === false)
|
|
12131
|
+
return servicePolicyChildren;
|
|
12132
|
+
const bindGrp = new Group(createId(), 'Bind-Policies', 'Bind Service Policy');
|
|
12133
|
+
const dialGrp = new Group(createId(), 'Dial-Policies', 'Dial Service Policy');
|
|
11938
12134
|
servicePolicies.forEach((sp) => {
|
|
11939
12135
|
const spolicy = new ServicePolicy$1();
|
|
11940
12136
|
spolicy.id = createId();
|
|
11941
12137
|
spolicy.uuid = sp.id;
|
|
11942
12138
|
spolicy.name = sp.name;
|
|
11943
|
-
spolicy.type = '
|
|
12139
|
+
spolicy.type = 'Service Policy';
|
|
11944
12140
|
spolicy.rootNode = 'Yes';
|
|
11945
12141
|
if (sp.type === 'Bind') {
|
|
11946
12142
|
bindGrp.children.push(spolicy);
|
|
@@ -11953,7 +12149,6 @@ class NetworkVisualizerHelper {
|
|
|
11953
12149
|
servicePolicyChildren.children.push(bindGrp);
|
|
11954
12150
|
dialGrp.name = dialGrp.name + '(' + dialGrp.children.length + ')';
|
|
11955
12151
|
servicePolicyChildren.children.push(dialGrp);
|
|
11956
|
-
servicePolicyChildren.name = servicePolicyChildren.name + ' (' + (bindGrp.children.length + dialGrp.children.length) + ')';
|
|
11957
12152
|
return servicePolicyChildren;
|
|
11958
12153
|
}
|
|
11959
12154
|
function serviceGrouping(servicesChildren, servicestree) {
|
|
@@ -12110,10 +12305,12 @@ class NetworkVisualizerHelper {
|
|
|
12110
12305
|
oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';
|
|
12111
12306
|
servicesChildren.children.push(oneTo9Grp);
|
|
12112
12307
|
}
|
|
12113
|
-
servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
|
|
12308
|
+
// servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
|
|
12114
12309
|
return servicesChildren;
|
|
12115
12310
|
}
|
|
12116
|
-
function processServicesForTree(servicesChildren,
|
|
12311
|
+
function processServicesForTree(servicesChildren, services, nx, ny) {
|
|
12312
|
+
if (args[1] === false)
|
|
12313
|
+
return servicesChildren;
|
|
12117
12314
|
const servicestree = [];
|
|
12118
12315
|
for (let i = nx; i < ny; i++) {
|
|
12119
12316
|
const serviceobj = new Service();
|
|
@@ -12158,7 +12355,9 @@ class NetworkVisualizerHelper {
|
|
|
12158
12355
|
} // end for loop
|
|
12159
12356
|
return serviceGrouping(servicesChildren, servicestree);
|
|
12160
12357
|
} // end of processServicesForTree
|
|
12161
|
-
function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren,
|
|
12358
|
+
function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, nx, ny) {
|
|
12359
|
+
if (args[4] === false)
|
|
12360
|
+
return edgeRouterPoliciesChildren;
|
|
12162
12361
|
for (let i = nx; i < ny; i++) {
|
|
12163
12362
|
const erpolicy = new ERPolicy();
|
|
12164
12363
|
erpolicy.id = createId();
|
|
@@ -12166,11 +12365,15 @@ class NetworkVisualizerHelper {
|
|
|
12166
12365
|
erpolicy.name = edgeRouterPolicies[i].name;
|
|
12167
12366
|
erpolicy.type = 'Router Policy';
|
|
12168
12367
|
erpolicy.rootNode = 'Yes';
|
|
12368
|
+
erpolicy.isSystem = edgeRouterPolicies[i].isSystem;
|
|
12369
|
+
erpolicy.semantic = edgeRouterPolicies[i].semantic;
|
|
12169
12370
|
edgeRouterPoliciesChildren.children.push(erpolicy);
|
|
12170
12371
|
} // end of main for loop
|
|
12171
12372
|
return edgeRouterPoliciesChildren;
|
|
12172
12373
|
} // end
|
|
12173
|
-
function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren,
|
|
12374
|
+
function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, serviceEdgeRouterPolicies, nx, ny) {
|
|
12375
|
+
if (args[5] === false)
|
|
12376
|
+
return serviceEdgeRouterPoliciesChildren;
|
|
12174
12377
|
for (let i = nx; i < ny; i++) {
|
|
12175
12378
|
const serviceerpolicy = new ServiceERPolicy();
|
|
12176
12379
|
serviceerpolicy.id = createId();
|
|
@@ -12182,7 +12385,9 @@ class NetworkVisualizerHelper {
|
|
|
12182
12385
|
} // end of main for loop
|
|
12183
12386
|
return serviceEdgeRouterPoliciesChildren;
|
|
12184
12387
|
} // end
|
|
12185
|
-
function processEdgeroutersForTree(edgerouterChildren, edgerouters,
|
|
12388
|
+
function processEdgeroutersForTree(edgerouterChildren, edgerouters, nx, ny) {
|
|
12389
|
+
if (args[3] === false)
|
|
12390
|
+
return edgerouterChildren;
|
|
12186
12391
|
for (let i = nx; i < ny; i++) {
|
|
12187
12392
|
const erOb = new ERouter();
|
|
12188
12393
|
erOb.id = createId();
|
|
@@ -12196,60 +12401,50 @@ class NetworkVisualizerHelper {
|
|
|
12196
12401
|
erOb.disabled = er.disabled ? 'Yes' : 'No';
|
|
12197
12402
|
erOb.type = 'Edge Router';
|
|
12198
12403
|
erOb.rootNode = 'Yes';
|
|
12199
|
-
|
|
12200
|
-
|
|
12201
|
-
|
|
12202
|
-
|
|
12203
|
-
erOb.provider = 'N/A';
|
|
12204
|
-
}
|
|
12205
|
-
else {
|
|
12206
|
-
erOb.provider = 'Private DC';
|
|
12207
|
-
}
|
|
12404
|
+
erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
|
|
12405
|
+
erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
|
|
12406
|
+
erOb.createdAt = er.createdAt;
|
|
12407
|
+
erOb.updatedAt = er.updatedAt;
|
|
12208
12408
|
edgerouterChildren.children.push(erOb);
|
|
12209
12409
|
}
|
|
12210
12410
|
} // end main for loop
|
|
12211
12411
|
return edgerouterChildren;
|
|
12212
12412
|
}
|
|
12213
12413
|
// createId() generates node Id 1,2,3,4,5 for the following five nodes. this id is used to search capability.
|
|
12214
|
-
let
|
|
12215
|
-
|
|
12216
|
-
|
|
12414
|
+
let servicPoliciesChildren = new Children();
|
|
12415
|
+
servicPoliciesChildren.id = createId();
|
|
12416
|
+
servicPoliciesChildren.firstChild = 'Yes';
|
|
12417
|
+
servicPoliciesChildren.name = 'Service Policies(' + service_policies_totalCount + ')';
|
|
12217
12418
|
let servicesChildren = new Children();
|
|
12218
12419
|
servicesChildren.id = createId();
|
|
12219
|
-
servicesChildren.
|
|
12220
|
-
|
|
12221
|
-
|
|
12222
|
-
|
|
12420
|
+
servicesChildren.firstChild = 'Yes';
|
|
12421
|
+
servicesChildren.name = 'Services(' + services_totalCount + ')';
|
|
12422
|
+
let identitiesChildren = new Children();
|
|
12423
|
+
identitiesChildren.id = createId();
|
|
12424
|
+
identitiesChildren.firstChild = 'Yes';
|
|
12425
|
+
identitiesChildren.name = 'Identities(' + identities_totalCount + ')';
|
|
12223
12426
|
let edgerouterChildren = new Children();
|
|
12224
12427
|
edgerouterChildren.id = createId();
|
|
12225
|
-
edgerouterChildren.
|
|
12428
|
+
edgerouterChildren.firstChild = 'Yes';
|
|
12429
|
+
edgerouterChildren.name = 'Edge Routers(' + edgerouters_totalCount + ')';
|
|
12226
12430
|
let edgeRouterPoliciesChildren = new Children();
|
|
12227
12431
|
edgeRouterPoliciesChildren.id = createId();
|
|
12228
|
-
edgeRouterPoliciesChildren.
|
|
12432
|
+
edgeRouterPoliciesChildren.firstChild = 'Yes';
|
|
12433
|
+
edgeRouterPoliciesChildren.name = 'Edge Router Policies(' + edge_router_policies_totalCount + ')';
|
|
12229
12434
|
let serviceEdgeRouterPolicesChildren = new Children();
|
|
12230
12435
|
serviceEdgeRouterPolicesChildren.id = createId();
|
|
12231
|
-
serviceEdgeRouterPolicesChildren.
|
|
12232
|
-
|
|
12233
|
-
|
|
12234
|
-
|
|
12235
|
-
|
|
12236
|
-
|
|
12237
|
-
|
|
12238
|
-
|
|
12239
|
-
|
|
12240
|
-
|
|
12241
|
-
'Edge Router Policies (' + edgeRouterPoliciesChildren.children.length + ')';
|
|
12242
|
-
}
|
|
12243
|
-
endpointsChildren = processIdentitiesForTree(endpointsChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, endpoints.length);
|
|
12244
|
-
//serviceEdgeRouterPolicies
|
|
12245
|
-
serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPolicesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, serviceEdgeRouterPolicies, 0, serviceEdgeRouterPolicies.length);
|
|
12246
|
-
if (edgeRouterPoliciesChildren) {
|
|
12247
|
-
serviceEdgeRouterPolicesChildren.name =
|
|
12248
|
-
'Service Edge Router Policies (' + serviceEdgeRouterPolicesChildren.children.length + ')';
|
|
12249
|
-
}
|
|
12250
|
-
rootJson.children.push(appwansChildren);
|
|
12436
|
+
serviceEdgeRouterPolicesChildren.firstChild = 'Yes';
|
|
12437
|
+
serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies(' + service_router_policies_totalCount + ')';
|
|
12438
|
+
servicesChildren = processServicesForTree(servicesChildren, services, 0, services.length);
|
|
12439
|
+
edgerouterChildren = processEdgeroutersForTree(edgerouterChildren, edgerouters, 0, edgerouters.length);
|
|
12440
|
+
servicPoliciesChildren = processServicePoliciesForTree(servicPoliciesChildren, servicePolicies, 0, servicePolicies.length);
|
|
12441
|
+
edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, 0, edgeRouterPolicies.length);
|
|
12442
|
+
identitiesChildren = processIdentitiesForTree(identitiesChildren, identities, 0, identities.length);
|
|
12443
|
+
//serviceRouterPolicies
|
|
12444
|
+
serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPolicesChildren, serviceEdgeRouterPolicies, 0, serviceEdgeRouterPolicies.length);
|
|
12445
|
+
rootJson.children.push(servicPoliciesChildren);
|
|
12251
12446
|
rootJson.children.push(servicesChildren);
|
|
12252
|
-
rootJson.children.push(
|
|
12447
|
+
rootJson.children.push(identitiesChildren);
|
|
12253
12448
|
rootJson.children.push(edgerouterChildren);
|
|
12254
12449
|
rootJson.children.push(edgeRouterPoliciesChildren);
|
|
12255
12450
|
rootJson.children.push(serviceEdgeRouterPolicesChildren);
|
|
@@ -12292,7 +12487,6 @@ class TreeNodeProcessor {
|
|
|
12292
12487
|
rawEpAttributes = rawEp.roleAttributes;
|
|
12293
12488
|
}
|
|
12294
12489
|
;
|
|
12295
|
-
rawEpAttributes.push('@' + rawEp.name);
|
|
12296
12490
|
for (let i = 0; i < rawEpAttributes.length; i++) {
|
|
12297
12491
|
const attribute = new Attribute();
|
|
12298
12492
|
attribute.id = this.createId();
|
|
@@ -12305,67 +12499,60 @@ class TreeNodeProcessor {
|
|
|
12305
12499
|
bindServices.id = this.createId();
|
|
12306
12500
|
dialServices.id = this.createId();
|
|
12307
12501
|
let identityServicePolicies = [];
|
|
12308
|
-
const services_url = this.getLinkForResource(rawEp, 'service-policies').replace('./', '');
|
|
12309
12502
|
const pagesize = 500;
|
|
12310
|
-
|
|
12503
|
+
// fetch associated routers
|
|
12504
|
+
const url = this.getLinkForResource(rawEp, 'edge-routers').replace('./', '');
|
|
12505
|
+
let associatedRouters = [];
|
|
12506
|
+
const paging = this.getPagingObject(pagesize);
|
|
12507
|
+
const erChailds = new Children();
|
|
12508
|
+
erChailds.id = this.createId();
|
|
12509
|
+
erChailds.name = 'Associated Routers';
|
|
12510
|
+
erChailds.type = 'Associated Routers';
|
|
12511
|
+
const associatedRoutersPromise = await zitiService.get(url, paging, [])
|
|
12512
|
+
.then((result) => {
|
|
12513
|
+
result.data.forEach((re) => {
|
|
12514
|
+
const tmp = new ERouter();
|
|
12515
|
+
tmp.id = this.createId();
|
|
12516
|
+
tmp.name = re.name;
|
|
12517
|
+
tmp.type = 'Router';
|
|
12518
|
+
erChailds.children.push(tmp);
|
|
12519
|
+
});
|
|
12520
|
+
});
|
|
12521
|
+
const policies_url = this.getLinkForResource(rawEp, 'service-policies').replace('./', '');
|
|
12522
|
+
const policies_paging = this.getPagingObject(pagesize);
|
|
12311
12523
|
const firstPromise = await zitiService
|
|
12312
|
-
.get(
|
|
12313
|
-
.then(
|
|
12524
|
+
.get(policies_url, policies_paging, [])
|
|
12525
|
+
.then((result) => {
|
|
12314
12526
|
identityServicePolicies = result.data;
|
|
12315
|
-
|
|
12316
|
-
|
|
12317
|
-
|
|
12318
|
-
|
|
12319
|
-
|
|
12320
|
-
|
|
12321
|
-
|
|
12322
|
-
|
|
12323
|
-
|
|
12324
|
-
|
|
12325
|
-
}
|
|
12326
|
-
|
|
12327
|
-
|
|
12328
|
-
|
|
12329
|
-
Promise.all(promises).then(() => {
|
|
12330
|
-
const sub_promises = [];
|
|
12331
|
-
identityServicePolicies.find(async (isp) => {
|
|
12332
|
-
const pagingOb = this.getPagingObject(pagesize);
|
|
12333
|
-
const ser_url = this.getLinkForResource(isp, 'services').replace('./', '');
|
|
12334
|
-
const tmpPromise = await zitiService
|
|
12335
|
-
.get(ser_url, pagingOb, [])
|
|
12336
|
-
.then((result) => {
|
|
12337
|
-
const tmp_services = [];
|
|
12338
|
-
result.data.find((re) => {
|
|
12339
|
-
const serv = new Service();
|
|
12340
|
-
serv.id = this.createId();
|
|
12341
|
-
serv.name = re.name;
|
|
12342
|
-
serv.type = 'Service';
|
|
12343
|
-
// tmp_services.push(serv);
|
|
12344
|
-
if (isp.type === 'Dial') {
|
|
12345
|
-
dialServices.children.push(serv);
|
|
12346
|
-
}
|
|
12347
|
-
else {
|
|
12348
|
-
bindServices.children.push(serv);
|
|
12349
|
-
}
|
|
12350
|
-
});
|
|
12351
|
-
});
|
|
12352
|
-
sub_promises.push(tmpPromise);
|
|
12353
|
-
wait_promises.push(tmpPromise);
|
|
12354
|
-
}); // loop
|
|
12355
|
-
Promise.all(sub_promises).then(() => {
|
|
12356
|
-
if (bindServices.children.length > 0) {
|
|
12357
|
-
bindServices.name = 'Bind-Services(' + bindServices.children.length + ')';
|
|
12358
|
-
identityNode.data.children.push(bindServices);
|
|
12359
|
-
}
|
|
12360
|
-
if (dialServices.children.length > 0) {
|
|
12361
|
-
dialServices.name = 'Dial-Services(' + dialServices.children.length + ')';
|
|
12362
|
-
identityNode.data.children.push(dialServices);
|
|
12363
|
-
}
|
|
12364
|
-
});
|
|
12527
|
+
});
|
|
12528
|
+
const promises = [];
|
|
12529
|
+
identityServicePolicies.forEach((sp) => {
|
|
12530
|
+
const nodeArray = this.getServicesForAServicePolicy(sp, zitiService, 500);
|
|
12531
|
+
promises.push(nodeArray);
|
|
12532
|
+
});
|
|
12533
|
+
await Promise.all(promises).then((nodeArray) => {
|
|
12534
|
+
nodeArray.forEach((arOb) => {
|
|
12535
|
+
if (arOb[0] === 'Bind') {
|
|
12536
|
+
bindServices.children = this.arrayObjectCopyRightToLeft(bindServices.children, arOb[1]);
|
|
12537
|
+
}
|
|
12538
|
+
else {
|
|
12539
|
+
dialServices.children = this.arrayObjectCopyRightToLeft(dialServices.children, arOb[1]);
|
|
12540
|
+
}
|
|
12365
12541
|
});
|
|
12366
12542
|
});
|
|
12367
|
-
wait_promises.push(firstPromise);
|
|
12368
12543
|
Promise.all(wait_promises).then(() => {
|
|
12544
|
+
if (erChailds.children.length > 0) {
|
|
12545
|
+
erChailds.name = erChailds.name + '(' + erChailds.children.length + ')';
|
|
12546
|
+
identityNode.data.children.push(erChailds);
|
|
12547
|
+
}
|
|
12548
|
+
if (bindServices.children.length > 0) {
|
|
12549
|
+
bindServices.name = 'Bind-Services(' + bindServices.children.length + ')';
|
|
12550
|
+
identityNode.data.children.push(bindServices);
|
|
12551
|
+
}
|
|
12552
|
+
if (dialServices.children.length > 0) {
|
|
12553
|
+
dialServices.name = 'Dial-Services(' + dialServices.children.length + ')';
|
|
12554
|
+
identityNode.data.children.push(dialServices);
|
|
12555
|
+
}
|
|
12369
12556
|
resolve('this is a promise');
|
|
12370
12557
|
});
|
|
12371
12558
|
});
|
|
@@ -12386,24 +12573,46 @@ class TreeNodeProcessor {
|
|
|
12386
12573
|
serviceOb.type = 'Service';
|
|
12387
12574
|
return serviceOb;
|
|
12388
12575
|
}
|
|
12389
|
-
|
|
12390
|
-
|
|
12391
|
-
|
|
12392
|
-
|
|
12393
|
-
|
|
12394
|
-
|
|
12395
|
-
|
|
12396
|
-
|
|
12397
|
-
|
|
12398
|
-
|
|
12399
|
-
|
|
12576
|
+
arrayObjectCopyRightToLeft(leftArr, rightArr) {
|
|
12577
|
+
const leftArrIds = [];
|
|
12578
|
+
leftArr.forEach((ob) => {
|
|
12579
|
+
leftArrIds.push(ob.id);
|
|
12580
|
+
});
|
|
12581
|
+
rightArr.forEach((ob) => {
|
|
12582
|
+
if (!leftArr.includes(ob.id)) {
|
|
12583
|
+
leftArr.push(ob);
|
|
12584
|
+
}
|
|
12585
|
+
});
|
|
12586
|
+
return leftArr;
|
|
12587
|
+
}
|
|
12588
|
+
addItemToArray(Idnetities, ob) {
|
|
12589
|
+
if (ob.name && !Idnetities.find((item) => item.uuid === ob.id)) {
|
|
12590
|
+
Idnetities.push(this.createIdentity(ob));
|
|
12400
12591
|
}
|
|
12401
|
-
return
|
|
12592
|
+
return Idnetities;
|
|
12593
|
+
}
|
|
12594
|
+
createIdentity(ob) {
|
|
12595
|
+
const endpoint = new Identity();
|
|
12596
|
+
endpoint.id = this.createId();
|
|
12597
|
+
endpoint.uuid = ob.id;
|
|
12598
|
+
endpoint.name = ob.name;
|
|
12599
|
+
endpoint.online = ob.hasApiSession === true ? 'Yes' : 'No';
|
|
12600
|
+
endpoint.type = 'Identity';
|
|
12601
|
+
endpoint.status = ob.sdkInfo !== null ? 'Registered' : 'Not Registered';
|
|
12602
|
+
if (ob.sdkInfo) {
|
|
12603
|
+
endpoint.os = ob.sdkInfo.type ? ob.sdkInfo.type : ob.sdkInfo.appId;
|
|
12604
|
+
endpoint.osVersion = ob.sdkInfo.version;
|
|
12605
|
+
}
|
|
12606
|
+
if (ob.authPolicy && ob.authPolicy.name.includes("BrowZer")) {
|
|
12607
|
+
endpoint.type = 'BrowZer Identity';
|
|
12608
|
+
}
|
|
12609
|
+
endpoint.createdAt = ob.createdAt;
|
|
12610
|
+
endpoint.updatedAt = ob.updatedAt;
|
|
12611
|
+
return endpoint;
|
|
12402
12612
|
}
|
|
12403
12613
|
getLinkForResource(ob, resource) {
|
|
12404
12614
|
return ob['_links'][resource]['href'];
|
|
12405
12615
|
}
|
|
12406
|
-
//Bind Dial Services
|
|
12407
12616
|
findServicesHostedOnEndpoint(rawEp, services, servicePolicies, zitiService) {
|
|
12408
12617
|
const servicesArr = [];
|
|
12409
12618
|
const childrenNoGroups = [];
|
|
@@ -12495,28 +12704,55 @@ class TreeNodeProcessor {
|
|
|
12495
12704
|
findRawEndpoint(epName, endpoints) {
|
|
12496
12705
|
return endpoints.find((ep) => ep.name === epName);
|
|
12497
12706
|
}
|
|
12707
|
+
serviceConfigAlias(configs) {
|
|
12708
|
+
let intercept = [];
|
|
12709
|
+
_.isArray(configs) && configs.forEach((conf) => {
|
|
12710
|
+
let addresses = '';
|
|
12711
|
+
let ports = '';
|
|
12712
|
+
if (conf.data.addresses) {
|
|
12713
|
+
addresses = conf.data.addresses.toString();
|
|
12714
|
+
}
|
|
12715
|
+
else {
|
|
12716
|
+
addresses = conf.data.address;
|
|
12717
|
+
}
|
|
12718
|
+
if (_.isArray(conf.data.portRanges)) {
|
|
12719
|
+
conf.data.portRanges.forEach((portsJson) => {
|
|
12720
|
+
for (const key in portsJson) {
|
|
12721
|
+
ports = ports + key + ':' + portsJson[key] + ' ';
|
|
12722
|
+
}
|
|
12723
|
+
ports = ports + ';';
|
|
12724
|
+
});
|
|
12725
|
+
}
|
|
12726
|
+
else {
|
|
12727
|
+
ports = conf.data.port;
|
|
12728
|
+
}
|
|
12729
|
+
intercept.push(addresses);
|
|
12730
|
+
intercept.push(ports);
|
|
12731
|
+
});
|
|
12732
|
+
return intercept;
|
|
12733
|
+
}
|
|
12498
12734
|
async processServicesForNodeClick(serviceNode, networkGraph, services, uniqId, zitiService) {
|
|
12499
12735
|
const myPromise = await new Promise(async (resolve, reject) => {
|
|
12500
12736
|
const wait_promises = [];
|
|
12501
12737
|
this.uniqId = uniqId;
|
|
12502
12738
|
const rawServiceObj = services.find((s) => s.name === serviceNode.data.name);
|
|
12503
12739
|
const attributeswithName = [];
|
|
12504
|
-
attributeswithName.push('@' + rawServiceObj.name);
|
|
12505
12740
|
rawServiceObj.roleAttributes && rawServiceObj.roleAttributes.find((srattr) => {
|
|
12506
12741
|
attributeswithName.push(srattr);
|
|
12507
12742
|
});
|
|
12508
12743
|
const serviceAttributes = new Children();
|
|
12509
|
-
serviceAttributes.
|
|
12744
|
+
serviceAttributes.name = 'Attributes';
|
|
12745
|
+
serviceAttributes.type = 'Attributes';
|
|
12510
12746
|
serviceAttributes.id = this.createId();
|
|
12511
12747
|
for (let k = 0; k < attributeswithName.length; k++) {
|
|
12512
12748
|
const attrOb = new Attribute();
|
|
12513
12749
|
attrOb.id = this.createId();
|
|
12514
12750
|
attrOb.name = attributeswithName[k];
|
|
12515
|
-
attrOb.type = '
|
|
12751
|
+
attrOb.type = 'Attribute';
|
|
12516
12752
|
serviceAttributes.children.push(attrOb);
|
|
12517
12753
|
} // end inner for loop
|
|
12518
12754
|
if (serviceAttributes.children.length > 0) {
|
|
12519
|
-
serviceAttributes.name = '
|
|
12755
|
+
serviceAttributes.name = serviceAttributes.name + '(' + serviceAttributes.children.length + ')';
|
|
12520
12756
|
serviceNode.data.children.push(serviceAttributes);
|
|
12521
12757
|
}
|
|
12522
12758
|
let service_configs = [];
|
|
@@ -12527,48 +12763,118 @@ class TreeNodeProcessor {
|
|
|
12527
12763
|
.get(configs_url, pagingOb, [])
|
|
12528
12764
|
.then((configs) => {
|
|
12529
12765
|
service_configs = configs && configs.data ? configs.data : [];
|
|
12766
|
+
const childs = new Children();
|
|
12767
|
+
childs.id = this.createId();
|
|
12768
|
+
childs.name = 'Service Configs';
|
|
12769
|
+
childs.type = 'Service Configs';
|
|
12770
|
+
const service_configs_Arr = [];
|
|
12771
|
+
service_configs.forEach((cfg) => {
|
|
12772
|
+
const obj = new Config();
|
|
12773
|
+
obj.id = this.createId();
|
|
12774
|
+
obj.name = cfg.name;
|
|
12775
|
+
obj.uuid = cfg.uuid;
|
|
12776
|
+
obj.data = JSON.stringify(cfg.data);
|
|
12777
|
+
service_configs_Arr.push(obj);
|
|
12778
|
+
});
|
|
12779
|
+
if (service_configs_Arr.length > 0) {
|
|
12780
|
+
childs.children = service_configs_Arr;
|
|
12781
|
+
childs.name = childs.name + '(' + childs.children.length + ')';
|
|
12782
|
+
serviceNode.data.children.push(childs);
|
|
12783
|
+
serviceNode.data.intercept = this.serviceConfigAlias(service_configs);
|
|
12784
|
+
}
|
|
12530
12785
|
});
|
|
12531
12786
|
wait_promises.push(configPromise);
|
|
12532
12787
|
const service_edge_router_policies_url = this.getLinkForResource(rawServiceObj, 'service-edge-router-policies');
|
|
12788
|
+
let service_routers_urls = [];
|
|
12789
|
+
const ser_promse = await zitiService
|
|
12790
|
+
.get(service_edge_router_policies_url.replace('./', ''), pagingOb, [])
|
|
12791
|
+
.then((result) => {
|
|
12792
|
+
result.data.forEach((serp) => {
|
|
12793
|
+
service_routers_urls.push(this.getLinkForResource(serp, 'edge-routers'));
|
|
12794
|
+
});
|
|
12795
|
+
;
|
|
12796
|
+
});
|
|
12797
|
+
wait_promises.push(ser_promse);
|
|
12798
|
+
let serp_page_Promises = [];
|
|
12799
|
+
service_routers_urls.forEach((er_url) => {
|
|
12800
|
+
const promse = zitiService
|
|
12801
|
+
.get(er_url.replace('./', ''), pagingOb, []);
|
|
12802
|
+
// .then(result => [policy.type, result]);
|
|
12803
|
+
serp_page_Promises.push(promse);
|
|
12804
|
+
});
|
|
12805
|
+
let associatedRouters = [];
|
|
12806
|
+
await Promise.all(serp_page_Promises).then((values) => {
|
|
12807
|
+
values && values.forEach((res) => {
|
|
12808
|
+
if (res && res.data.length > 0) {
|
|
12809
|
+
res.data.forEach((er) => {
|
|
12810
|
+
const erOb = new ERouter();
|
|
12811
|
+
erOb.id = this.createId();
|
|
12812
|
+
erOb.name = er.name;
|
|
12813
|
+
er.type = 'Router';
|
|
12814
|
+
associatedRouters.push(erOb);
|
|
12815
|
+
});
|
|
12816
|
+
}
|
|
12817
|
+
});
|
|
12818
|
+
const tmp = new Children();
|
|
12819
|
+
tmp.name = "Associated Routers(" + associatedRouters.length + ')';
|
|
12820
|
+
tmp.type = "Routers";
|
|
12821
|
+
tmp.children = associatedRouters;
|
|
12822
|
+
tmp.id = this.createId();
|
|
12823
|
+
serviceNode.data.children.push(tmp);
|
|
12824
|
+
});
|
|
12533
12825
|
const service_policies_url = this.getLinkForResource(rawServiceObj, 'service-policies').replace('./', ''); // dial, Bind info
|
|
12534
12826
|
let bindPolicies = [];
|
|
12535
12827
|
let bindIdnetities = [];
|
|
12828
|
+
let dialIdnetities = [];
|
|
12536
12829
|
const promise2 = await zitiService
|
|
12537
12830
|
.get(service_policies_url, pagingOb, [])
|
|
12538
12831
|
.then((policies) => {
|
|
12539
|
-
|
|
12540
|
-
|
|
12541
|
-
|
|
12542
|
-
|
|
12543
|
-
|
|
12544
|
-
|
|
12545
|
-
|
|
12546
|
-
|
|
12547
|
-
|
|
12548
|
-
|
|
12549
|
-
|
|
12832
|
+
bindPolicies = policies.data;
|
|
12833
|
+
});
|
|
12834
|
+
const pagePromises = [];
|
|
12835
|
+
bindPolicies.forEach((policy) => {
|
|
12836
|
+
const bindIdentitiesUrl = this.getLinkForResource(policy, 'identities');
|
|
12837
|
+
const promse = zitiService
|
|
12838
|
+
.get(bindIdentitiesUrl.replace('./', ''), pagingOb, [])
|
|
12839
|
+
.then(result => [policy.type, result]);
|
|
12840
|
+
pagePromises.push(promse);
|
|
12841
|
+
});
|
|
12842
|
+
await Promise.all(pagePromises).then((values) => {
|
|
12843
|
+
values && values.forEach((res) => {
|
|
12844
|
+
if (res && res[1].data.length > 0) {
|
|
12845
|
+
res[1].data.forEach((rs) => {
|
|
12846
|
+
if (res[0] === 'Bind') {
|
|
12847
|
+
bindIdnetities = this.addItemToArray(bindIdnetities, rs);
|
|
12550
12848
|
}
|
|
12551
|
-
else {
|
|
12552
|
-
this.addItemToArray(
|
|
12849
|
+
else if (res[0] === 'Dial') {
|
|
12850
|
+
dialIdnetities = this.addItemToArray(dialIdnetities, rs);
|
|
12553
12851
|
}
|
|
12554
12852
|
});
|
|
12555
|
-
|
|
12556
|
-
|
|
12853
|
+
}
|
|
12854
|
+
else {
|
|
12855
|
+
if (res[0] === 'Bind') {
|
|
12856
|
+
bindIdnetities = this.addItemToArray(bindIdnetities, res[1].data);
|
|
12857
|
+
}
|
|
12858
|
+
else if (res[0] === 'Dial') {
|
|
12859
|
+
dialIdnetities = this.addItemToArray(dialIdnetities, res[1].data);
|
|
12860
|
+
}
|
|
12557
12861
|
}
|
|
12558
12862
|
});
|
|
12559
|
-
|
|
12560
|
-
|
|
12561
|
-
|
|
12562
|
-
|
|
12563
|
-
|
|
12564
|
-
|
|
12565
|
-
|
|
12566
|
-
|
|
12567
|
-
|
|
12568
|
-
|
|
12569
|
-
|
|
12863
|
+
const tmp = new Children();
|
|
12864
|
+
tmp.name = "Bind Identities(" + bindIdnetities.length + ')';
|
|
12865
|
+
tmp.type = "Identities";
|
|
12866
|
+
tmp.children = bindIdnetities;
|
|
12867
|
+
tmp.id = this.createId();
|
|
12868
|
+
serviceNode.data.children.push(tmp);
|
|
12869
|
+
const tmpDial = new Children();
|
|
12870
|
+
tmpDial.name = "Dial Identities(" + dialIdnetities.length + ')';
|
|
12871
|
+
tmpDial.type = "Identities";
|
|
12872
|
+
tmpDial.children = dialIdnetities;
|
|
12873
|
+
tmpDial.id = this.createId();
|
|
12874
|
+
serviceNode.data.children.push(tmpDial);
|
|
12570
12875
|
resolve('this is a promise');
|
|
12571
12876
|
});
|
|
12877
|
+
Promise.all(wait_promises).then(() => { });
|
|
12572
12878
|
}); // end of mypromise
|
|
12573
12879
|
networkGraph = d3.hierarchy(networkGraph.data, function (nd) {
|
|
12574
12880
|
return nd.children;
|
|
@@ -12580,25 +12886,59 @@ class TreeNodeProcessor {
|
|
|
12580
12886
|
const wait_promises = [];
|
|
12581
12887
|
this.uniqId = uniqId;
|
|
12582
12888
|
const rawSPolicy = servicePolicies.find((s) => s.name === policyNode.data.name);
|
|
12889
|
+
const childs = new Children();
|
|
12890
|
+
childs.name = "Attributes";
|
|
12891
|
+
childs.id = this.createId();
|
|
12892
|
+
rawSPolicy.serviceRoles && rawSPolicy.serviceRoles.forEach((ob) => {
|
|
12893
|
+
const attr = new Attribute();
|
|
12894
|
+
attr.name = ob;
|
|
12895
|
+
attr.id = this.createId();
|
|
12896
|
+
attr.type = "Service Attribute";
|
|
12897
|
+
childs.children.push(attr);
|
|
12898
|
+
});
|
|
12899
|
+
rawSPolicy.identityRoles && rawSPolicy.identityRoles.forEach((ob) => {
|
|
12900
|
+
const attr = new Attribute();
|
|
12901
|
+
attr.name = ob;
|
|
12902
|
+
attr.id = this.createId();
|
|
12903
|
+
attr.type = "Identity Attribute";
|
|
12904
|
+
childs.children.push(attr);
|
|
12905
|
+
});
|
|
12906
|
+
childs.name = childs.name + '(' + childs.children.length + ')';
|
|
12907
|
+
policyNode.data.children.push(childs);
|
|
12583
12908
|
const pagesize = 500;
|
|
12584
|
-
const
|
|
12909
|
+
const identities_paging = this.getPagingObject(pagesize);
|
|
12585
12910
|
const bindIdentitiesUrl = this.getLinkForResource(rawSPolicy, 'identities');
|
|
12586
|
-
|
|
12911
|
+
// this.logger.info('bindIdentitiesUrl',bindIdentitiesUrl);
|
|
12912
|
+
const sp_promise = await zitiService.get(bindIdentitiesUrl, identities_paging, [])
|
|
12587
12913
|
.then((ids) => {
|
|
12588
12914
|
const childs = new Children();
|
|
12589
|
-
childs.name = rawSPolicy.type + 'Identities';
|
|
12915
|
+
childs.name = rawSPolicy.type + '-Identities';
|
|
12590
12916
|
childs.id = this.createId();
|
|
12591
12917
|
ids.data.forEach((idOb) => {
|
|
12592
|
-
|
|
12593
|
-
ep.id = idOb.id;
|
|
12594
|
-
ep.name = idOb.name;
|
|
12595
|
-
ep.type = 'Identity';
|
|
12596
|
-
childs.children.push(ep);
|
|
12918
|
+
childs.children.push(this.createIdentity(idOb));
|
|
12597
12919
|
});
|
|
12598
12920
|
childs.name = childs.name + '(' + childs.children.length + ')';
|
|
12599
12921
|
policyNode.data.children.push(childs);
|
|
12600
12922
|
});
|
|
12601
12923
|
wait_promises.push(sp_promise);
|
|
12924
|
+
const services_paging = this.getPagingObject(pagesize);
|
|
12925
|
+
const bindServicesUrl = this.getLinkForResource(rawSPolicy, 'services'); // pull services
|
|
12926
|
+
const _promise = await zitiService.get(bindServicesUrl, services_paging, [])
|
|
12927
|
+
.then((result) => {
|
|
12928
|
+
const childs = new Children();
|
|
12929
|
+
childs.name = rawSPolicy.type + '-Services';
|
|
12930
|
+
childs.id = this.createId();
|
|
12931
|
+
result.data.forEach((idOb) => {
|
|
12932
|
+
const sp = new Service();
|
|
12933
|
+
sp.id = idOb.id;
|
|
12934
|
+
sp.name = idOb.name;
|
|
12935
|
+
sp.type = 'Service';
|
|
12936
|
+
childs.children.push(sp);
|
|
12937
|
+
});
|
|
12938
|
+
childs.name = childs.name + '(' + childs.children.length + ')';
|
|
12939
|
+
policyNode.data.children.push(childs);
|
|
12940
|
+
});
|
|
12941
|
+
wait_promises.push(_promise);
|
|
12602
12942
|
Promise.all(wait_promises).then(() => {
|
|
12603
12943
|
resolve('resolve.');
|
|
12604
12944
|
});
|
|
@@ -12608,6 +12948,23 @@ class TreeNodeProcessor {
|
|
|
12608
12948
|
});
|
|
12609
12949
|
return [networkGraph, this.uniqId];
|
|
12610
12950
|
}
|
|
12951
|
+
async getServicesForAServicePolicy(policyObject, zitiService, pagesize = 500) {
|
|
12952
|
+
const childs = [];
|
|
12953
|
+
const services_paging = this.getPagingObject(pagesize);
|
|
12954
|
+
const bindServicesUrl = this.getLinkForResource(policyObject, 'services');
|
|
12955
|
+
const _promise = await zitiService.get(bindServicesUrl, services_paging, [])
|
|
12956
|
+
.then((result) => {
|
|
12957
|
+
result.data.forEach((idOb) => {
|
|
12958
|
+
const sp = new Service();
|
|
12959
|
+
sp.id = this.createId();
|
|
12960
|
+
sp.uuid = idOb.id;
|
|
12961
|
+
sp.name = idOb.name;
|
|
12962
|
+
sp.type = 'Service';
|
|
12963
|
+
childs.push(sp);
|
|
12964
|
+
});
|
|
12965
|
+
});
|
|
12966
|
+
return [policyObject.type, childs];
|
|
12967
|
+
}
|
|
12611
12968
|
async processEdgeroutersForNodeClick(edgerouterNode, networkGraph, edgerouters, uniqId, zitiService) {
|
|
12612
12969
|
const mainPromise = await new Promise(async (resolve, reject) => {
|
|
12613
12970
|
const wait_promises = [];
|
|
@@ -12649,6 +13006,9 @@ class TreeNodeProcessor {
|
|
|
12649
13006
|
policy.uuid = pol.id;
|
|
12650
13007
|
policy.name = pol.name;
|
|
12651
13008
|
policy.type = 'Router Policy';
|
|
13009
|
+
policy.isSystem = pol.isSystem;
|
|
13010
|
+
policy.semantic = pol.semantic;
|
|
13011
|
+
policy.rootNode = 'No';
|
|
12652
13012
|
erpolChilds.children.push(policy);
|
|
12653
13013
|
});
|
|
12654
13014
|
erpolChilds.name = "Edge Router Policies(" + erpolChilds.children.length + ')';
|
|
@@ -12815,11 +13175,39 @@ class TreeNodeProcessor {
|
|
|
12815
13175
|
return servicesChildren;
|
|
12816
13176
|
}
|
|
12817
13177
|
async processEdgeRouterPoliciesForNodeClick(erPolicyNode, networkGraph, edgeRouterPolicies, uniqId, zitiService) {
|
|
12818
|
-
const myPromise = await new Promise((resolve, reject) => {
|
|
13178
|
+
const myPromise = await new Promise(async (resolve, reject) => {
|
|
12819
13179
|
const wait_promises = [];
|
|
12820
13180
|
this.uniqId = uniqId;
|
|
12821
13181
|
const rawERPolicy = edgeRouterPolicies.find((s) => s.name === erPolicyNode.data.name);
|
|
12822
13182
|
const pagesize = 500;
|
|
13183
|
+
const er_url = this.getLinkForResource(rawERPolicy, 'edge-routers').replace('./', '');
|
|
13184
|
+
let associatedRouters = [];
|
|
13185
|
+
const paging = this.getPagingObject(pagesize);
|
|
13186
|
+
const erChailds = new Children();
|
|
13187
|
+
erChailds.name = 'Associated Routers';
|
|
13188
|
+
erChailds.type = 'Associated Routers';
|
|
13189
|
+
erChailds.id = this.createId();
|
|
13190
|
+
const associatedRoutersPromise = await zitiService.get(er_url, paging, [])
|
|
13191
|
+
.then((result) => {
|
|
13192
|
+
result.data.forEach((er) => {
|
|
13193
|
+
const tmp = new ERouter();
|
|
13194
|
+
tmp.id = this.createId();
|
|
13195
|
+
tmp.name = er.name;
|
|
13196
|
+
tmp.type = 'Router';
|
|
13197
|
+
tmp.verified = er.isVerified ? 'Yes' : 'No';
|
|
13198
|
+
tmp.online = er.isOnline ? 'Yes' : 'No';
|
|
13199
|
+
tmp.disabled = er.disabled ? 'Yes' : 'No';
|
|
13200
|
+
tmp.rootNode = 'Yes';
|
|
13201
|
+
tmp.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
|
|
13202
|
+
tmp.syncStatus = er.syncStatus ? er.syncStatus : 'No';
|
|
13203
|
+
tmp.createdAt = er.createdAt;
|
|
13204
|
+
tmp.updatedAt = er.updatedAt;
|
|
13205
|
+
erChailds.children.push(tmp);
|
|
13206
|
+
});
|
|
13207
|
+
erChailds.name = erChailds.name + '(' + erChailds.children.length + ')';
|
|
13208
|
+
erPolicyNode.data.children.push(erChailds);
|
|
13209
|
+
});
|
|
13210
|
+
wait_promises.push(associatedRoutersPromise);
|
|
12823
13211
|
const services_paging = this.getPagingObject(pagesize);
|
|
12824
13212
|
const url = this.getLinkForResource(rawERPolicy, 'identities');
|
|
12825
13213
|
let ids = [];
|
|
@@ -12841,13 +13229,8 @@ class TreeNodeProcessor {
|
|
|
12841
13229
|
Promise.all(promises).then(() => {
|
|
12842
13230
|
const idChilds = new Children();
|
|
12843
13231
|
idChilds.id = this.createId();
|
|
12844
|
-
ids.forEach((
|
|
12845
|
-
|
|
12846
|
-
idOb.id = this.createId();
|
|
12847
|
-
idOb.uuid = er.id;
|
|
12848
|
-
idOb.name = er.name;
|
|
12849
|
-
idOb.type = 'Identity';
|
|
12850
|
-
idChilds.children.push(idOb);
|
|
13232
|
+
ids.forEach((idOb) => {
|
|
13233
|
+
idChilds.children.push(this.createIdentity(idOb));
|
|
12851
13234
|
});
|
|
12852
13235
|
idChilds.name = "Accessible Identities(" + idChilds.children.length + ')';
|
|
12853
13236
|
erPolicyNode.data.children.push(idChilds);
|
|
@@ -12938,7 +13321,7 @@ class TreeNodeProcessor {
|
|
|
12938
13321
|
});
|
|
12939
13322
|
wait_promises.push(serpromise);
|
|
12940
13323
|
Promise.all(wait_promises).then(() => {
|
|
12941
|
-
resolve('
|
|
13324
|
+
resolve('Done');
|
|
12942
13325
|
});
|
|
12943
13326
|
});
|
|
12944
13327
|
networkGraph = d3.hierarchy(networkGraph.data, function (nd) {
|
|
@@ -12969,9 +13352,30 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
12969
13352
|
// export class NetworkVisualizerComponent implements OnInit {
|
|
12970
13353
|
this.title = 'Network Visualizer';
|
|
12971
13354
|
this.uniqId = 0;
|
|
13355
|
+
this.maxObjectsPerNode = 1001;
|
|
12972
13356
|
this.fullScreen = false;
|
|
12973
13357
|
this.isLoading = true;
|
|
12974
|
-
this.noSearchResults =
|
|
13358
|
+
this.noSearchResults = true;
|
|
13359
|
+
this.services = [];
|
|
13360
|
+
this.services_totalCount = 0;
|
|
13361
|
+
this.all_services_fetched = false;
|
|
13362
|
+
this.identities = [];
|
|
13363
|
+
this.identities_totalCount = 0;
|
|
13364
|
+
this.all_identities_fetched = false;
|
|
13365
|
+
this.edgerouters = [];
|
|
13366
|
+
this.edgerouters_totalCount = 0;
|
|
13367
|
+
this.all_edgerouters_fetched = false;
|
|
13368
|
+
this.service_policies = [];
|
|
13369
|
+
this.service_policies_totalCount = 0;
|
|
13370
|
+
this.all_service_policies_fetched = false;
|
|
13371
|
+
this.edge_router_policies = [];
|
|
13372
|
+
this.edge_router_policies_totalCount = 0;
|
|
13373
|
+
this.all_edge_router_policies_fetched = false;
|
|
13374
|
+
this.service_router_policies = [];
|
|
13375
|
+
this.service_router_policies_totalCount = 0;
|
|
13376
|
+
this.all_service_router_policies_fetched = false;
|
|
13377
|
+
this.configs = [];
|
|
13378
|
+
this.filerResponseMessage = 'search filter..';
|
|
12975
13379
|
this.servicePoliciesTreeNodes = [];
|
|
12976
13380
|
this.servicesTreeNodes = [];
|
|
12977
13381
|
this.identitiesTreeNodes = [];
|
|
@@ -12980,6 +13384,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
12980
13384
|
this.serviceEdgeRouterPolicyTreeNodes = [];
|
|
12981
13385
|
this.resourceTypeError = false;
|
|
12982
13386
|
this.filterText = '';
|
|
13387
|
+
this.searchWord = '';
|
|
12983
13388
|
this.resourceType = '';
|
|
12984
13389
|
this.openNodes = [];
|
|
12985
13390
|
this.contextmenuNodeType = [];
|
|
@@ -12989,16 +13394,15 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
12989
13394
|
this.getNetworkObjects();
|
|
12990
13395
|
}
|
|
12991
13396
|
getPagingObject(pagesize) {
|
|
12992
|
-
|
|
12993
|
-
|
|
12994
|
-
noSearch:
|
|
12995
|
-
|
|
12996
|
-
total: pagesize,
|
|
13397
|
+
return cloneDeep({
|
|
13398
|
+
filter: "",
|
|
13399
|
+
noSearch: true,
|
|
13400
|
+
order: "asc",
|
|
12997
13401
|
page: 1,
|
|
12998
|
-
|
|
12999
|
-
|
|
13000
|
-
|
|
13001
|
-
|
|
13402
|
+
searchOn: "name",
|
|
13403
|
+
sort: "name",
|
|
13404
|
+
total: pagesize
|
|
13405
|
+
});
|
|
13002
13406
|
}
|
|
13003
13407
|
async getNetworkObjects() {
|
|
13004
13408
|
this.isLoading = true;
|
|
@@ -13010,12 +13414,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13010
13414
|
return await this.zitiService
|
|
13011
13415
|
.get(`identities`, identities_paging, [])
|
|
13012
13416
|
.then(async (result) => {
|
|
13013
|
-
this.identities = result.data;
|
|
13417
|
+
this.identities = result.data ? result.data : [];
|
|
13418
|
+
this.identities_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13014
13419
|
if (!this.identities || this.identities.length === 0) {
|
|
13015
13420
|
this.identities = [];
|
|
13016
13421
|
this.isLoading = false;
|
|
13017
13422
|
}
|
|
13018
|
-
else {
|
|
13423
|
+
else if (this.identities_totalCount < this.maxObjectsPerNode) {
|
|
13424
|
+
this.all_identities_fetched = true;
|
|
13019
13425
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13020
13426
|
const promises = [];
|
|
13021
13427
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13028,7 +13434,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13028
13434
|
});
|
|
13029
13435
|
promises.push(tmp_promise);
|
|
13030
13436
|
}
|
|
13031
|
-
Promise.all(promises).then(() => {
|
|
13437
|
+
Promise.all(promises).then(() => {
|
|
13438
|
+
// this.identities_totalCount = this.identities.length;
|
|
13439
|
+
});
|
|
13032
13440
|
}
|
|
13033
13441
|
}).catch(error => {
|
|
13034
13442
|
this.logger.error('Error in fetching Identities', error.message);
|
|
@@ -13039,12 +13447,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13039
13447
|
return await this.zitiService
|
|
13040
13448
|
.get(`services`, services_paging, [])
|
|
13041
13449
|
.then(async (result) => {
|
|
13042
|
-
this.services = result.data;
|
|
13450
|
+
this.services = result.data ? result.data : [];
|
|
13451
|
+
this.services_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13043
13452
|
if (!this.services || this.services.length === 0) {
|
|
13044
13453
|
this.services = [];
|
|
13045
13454
|
this.isLoading = false;
|
|
13046
13455
|
}
|
|
13047
|
-
else {
|
|
13456
|
+
else if (this.services_totalCount < this.maxObjectsPerNode) {
|
|
13457
|
+
this.all_services_fetched = true;
|
|
13048
13458
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13049
13459
|
const s_promises = [];
|
|
13050
13460
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13058,7 +13468,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13058
13468
|
});
|
|
13059
13469
|
s_promises.push(tmp_promise);
|
|
13060
13470
|
}
|
|
13061
|
-
Promise.all(s_promises).then(() => {
|
|
13471
|
+
Promise.all(s_promises).then(() => {
|
|
13472
|
+
// this.services_totalCount = this.services.length;
|
|
13473
|
+
});
|
|
13062
13474
|
}
|
|
13063
13475
|
}).catch(error => {
|
|
13064
13476
|
this.logger.error('Error in fetching services', error.message);
|
|
@@ -13069,12 +13481,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13069
13481
|
return await this.zitiService
|
|
13070
13482
|
.get(`service-policies`, servicesPolicies_paging, [])
|
|
13071
13483
|
.then(async (result) => {
|
|
13072
|
-
this.service_policies = result.data;
|
|
13484
|
+
this.service_policies = result.data ? result.data : [];
|
|
13485
|
+
this.service_policies_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13073
13486
|
if (!this.service_policies || this.service_policies.length === 0) {
|
|
13074
13487
|
this.service_policies = [];
|
|
13075
13488
|
this.isLoading = false;
|
|
13076
13489
|
}
|
|
13077
|
-
else {
|
|
13490
|
+
else if (this.service_policies_totalCount < this.maxObjectsPerNode) {
|
|
13491
|
+
this.all_service_policies_fetched = true;
|
|
13078
13492
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13079
13493
|
const sp_promises = [];
|
|
13080
13494
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13082,13 +13496,15 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13082
13496
|
const tmp_promise = await this.zitiService
|
|
13083
13497
|
.get(`service-policies`, servicesPolicies_paging, [])
|
|
13084
13498
|
.then((pageResult) => {
|
|
13085
|
-
pageResult.data.forEach((serv) => {
|
|
13499
|
+
pageResult.data && pageResult.data.forEach((serv) => {
|
|
13086
13500
|
this.service_policies.push(serv);
|
|
13087
13501
|
});
|
|
13088
13502
|
});
|
|
13089
13503
|
sp_promises.push(tmp_promise);
|
|
13090
13504
|
}
|
|
13091
|
-
Promise.all(sp_promises).then(() => {
|
|
13505
|
+
Promise.all(sp_promises).then(() => {
|
|
13506
|
+
// this.service_policies_totalCount = this.service_policies.length;
|
|
13507
|
+
});
|
|
13092
13508
|
}
|
|
13093
13509
|
}).catch(error => {
|
|
13094
13510
|
this.logger.error('Error in fetching service-policies', error.message);
|
|
@@ -13099,12 +13515,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13099
13515
|
return await this.zitiService
|
|
13100
13516
|
.get(`edge-routers`, routers_paging, [])
|
|
13101
13517
|
.then(async (result) => {
|
|
13102
|
-
this.edgerouters = result.data;
|
|
13518
|
+
this.edgerouters = result.data ? result.data : [];
|
|
13519
|
+
this.edgerouters_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13103
13520
|
if (!this.edgerouters || this.edgerouters.length === 0) {
|
|
13104
13521
|
this.edgerouters = [];
|
|
13105
13522
|
this.isLoading = false;
|
|
13106
13523
|
}
|
|
13107
|
-
else {
|
|
13524
|
+
else if (this.edgerouters_totalCount < this.maxObjectsPerNode) {
|
|
13525
|
+
this.all_edgerouters_fetched = true;
|
|
13108
13526
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13109
13527
|
const r_promises = [];
|
|
13110
13528
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13118,23 +13536,27 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13118
13536
|
});
|
|
13119
13537
|
r_promises.push(tmp_promise);
|
|
13120
13538
|
}
|
|
13121
|
-
Promise.all(r_promises).then(() => {
|
|
13539
|
+
Promise.all(r_promises).then(() => {
|
|
13540
|
+
// this.edgerouters_totalCount = this.edgerouters.length;
|
|
13541
|
+
});
|
|
13122
13542
|
}
|
|
13123
13543
|
}).catch(error => {
|
|
13124
13544
|
this.logger.error('Error in fetching edge-routers', error.message);
|
|
13125
13545
|
});
|
|
13126
13546
|
}
|
|
13127
13547
|
async findEdgeRouterPolicies(pagesize) {
|
|
13128
|
-
this.
|
|
13548
|
+
this.edge_router_policies = [];
|
|
13129
13549
|
const erpolicies_paging = this.getPagingObject(pagesize);
|
|
13130
13550
|
return await this.zitiService
|
|
13131
13551
|
.get(`edge-router-policies`, erpolicies_paging, [])
|
|
13132
13552
|
.then(async (result) => {
|
|
13133
|
-
this.
|
|
13134
|
-
|
|
13553
|
+
this.edge_router_policies = result.data ? result.data : [];
|
|
13554
|
+
this.edge_router_policies_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13555
|
+
if (!this.edge_router_policies || this.edge_router_policies.length === 0) {
|
|
13135
13556
|
this.isLoading = false;
|
|
13136
13557
|
}
|
|
13137
|
-
else {
|
|
13558
|
+
else if (this.edge_router_policies_totalCount < this.maxObjectsPerNode) {
|
|
13559
|
+
this.all_edge_router_policies_fetched = true;
|
|
13138
13560
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13139
13561
|
const r_promises = [];
|
|
13140
13562
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13143,12 +13565,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13143
13565
|
.get(`edge-router-policies`, erpolicies_paging, [])
|
|
13144
13566
|
.then((pageResult) => {
|
|
13145
13567
|
pageResult.data.forEach((serv) => {
|
|
13146
|
-
this.
|
|
13568
|
+
this.edge_router_policies.push(serv);
|
|
13147
13569
|
});
|
|
13148
13570
|
});
|
|
13149
13571
|
r_promises.push(tmp_promise);
|
|
13150
13572
|
}
|
|
13151
|
-
Promise.all(r_promises).then(() => {
|
|
13573
|
+
Promise.all(r_promises).then(() => {
|
|
13574
|
+
// this.edge_router_policies_totalCount = this.edge_router_policies.length;
|
|
13575
|
+
});
|
|
13152
13576
|
}
|
|
13153
13577
|
}).catch(error => {
|
|
13154
13578
|
this.logger.error('Error in fetching edge-router-policies', error);
|
|
@@ -13160,11 +13584,13 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13160
13584
|
return await this.zitiService
|
|
13161
13585
|
.get(`service-edge-router-policies`, serp_paging, [])
|
|
13162
13586
|
.then(async (result) => {
|
|
13163
|
-
this.service_router_policies = result.data;
|
|
13587
|
+
this.service_router_policies = result.data ? result.data : [];
|
|
13588
|
+
this.service_router_policies_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13164
13589
|
if (!this.service_router_policies || this.service_router_policies.length === 0) {
|
|
13165
13590
|
this.isLoading = false;
|
|
13166
13591
|
}
|
|
13167
|
-
else {
|
|
13592
|
+
else if (this.service_router_policies_totalCount < this.maxObjectsPerNode) {
|
|
13593
|
+
this.all_service_router_policies_fetched = false;
|
|
13168
13594
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13169
13595
|
const r_promises = [];
|
|
13170
13596
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13178,7 +13604,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13178
13604
|
});
|
|
13179
13605
|
r_promises.push(tmp_promise);
|
|
13180
13606
|
}
|
|
13181
|
-
Promise.all(r_promises).then(() => {
|
|
13607
|
+
Promise.all(r_promises).then(() => {
|
|
13608
|
+
// this.service_router_policies_totalCount = this.service_router_policies.length;
|
|
13609
|
+
});
|
|
13182
13610
|
}
|
|
13183
13611
|
}).catch(error => {
|
|
13184
13612
|
this.logger.error('Error in fetching service-edge-router-policies', error);
|
|
@@ -13190,11 +13618,12 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13190
13618
|
return await this.zitiService
|
|
13191
13619
|
.get(`configs`, configs_paging, [])
|
|
13192
13620
|
.then(async (result) => {
|
|
13193
|
-
this.configs = result.data;
|
|
13621
|
+
this.configs = result.data ? result.data : [];
|
|
13622
|
+
const configs_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
|
|
13194
13623
|
if (!this.configs || this.configs.length === 0) {
|
|
13195
13624
|
this.configs = [];
|
|
13196
13625
|
}
|
|
13197
|
-
else {
|
|
13626
|
+
else if (configs_totalCount < this.maxObjectsPerNode) {
|
|
13198
13627
|
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
13199
13628
|
const r_promises = [];
|
|
13200
13629
|
for (let page = 2; page <= pages; page++) {
|
|
@@ -13208,7 +13637,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13208
13637
|
});
|
|
13209
13638
|
r_promises.push(tmp_promise);
|
|
13210
13639
|
}
|
|
13211
|
-
Promise.all(r_promises).then(() => {
|
|
13640
|
+
Promise.all(r_promises).then(() => {
|
|
13641
|
+
const configs_totalCount = this.configs.length;
|
|
13642
|
+
});
|
|
13212
13643
|
}
|
|
13213
13644
|
}).catch(error => {
|
|
13214
13645
|
this.logger.error('Error in fetching configs', error);
|
|
@@ -13232,56 +13663,59 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13232
13663
|
}
|
|
13233
13664
|
processFirstNetworkGraph() {
|
|
13234
13665
|
try {
|
|
13235
|
-
const treeObj = this.topologyHelper.getResourceTreeObj('this.currentNetwork.name', 'this.currentNetwork.status', this.services, this.identities, this.service_policies, this.edgerouters, this.
|
|
13666
|
+
const treeObj = this.topologyHelper.getResourceTreeObj('this.currentNetwork.name', 'this.currentNetwork.status', this.services, this.identities, this.service_policies, this.edgerouters, this.edge_router_policies, this.service_router_policies, this.services_totalCount, this.identities_totalCount, this.edgerouters_totalCount, this.service_policies_totalCount, this.edge_router_policies_totalCount, this.service_router_policies_totalCount, this.uniqId, this.logger, this.all_service_policies_fetched, this.all_services_fetched, this.all_identities_fetched, this.all_edgerouters_fetched, this.all_edge_router_policies_fetched, this.all_service_router_policies_fetched);
|
|
13236
13667
|
this.uniqId = treeObj.lastId;
|
|
13237
13668
|
this.networkGraph = d3.hierarchy(treeObj, function (d) {
|
|
13238
13669
|
return d.children;
|
|
13239
13670
|
});
|
|
13240
|
-
this.baseNetworkGraph = this.networkGraph;
|
|
13671
|
+
// this.baseNetworkGraph = _.cloneDeep(this.networkGraph);
|
|
13241
13672
|
this.servicePoliciesTreeNodes = [];
|
|
13242
13673
|
this.servicesTreeNodes = [];
|
|
13243
13674
|
this.identitiesTreeNodes = [];
|
|
13244
13675
|
this.edgeroutersTreeNodes = [];
|
|
13245
13676
|
this.erPoliciesTreeNodes = [];
|
|
13246
13677
|
this.serviceEdgeRouterPolicyTreeNodes = [];
|
|
13247
|
-
this.servicePoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.
|
|
13248
|
-
this.servicesTreeNodes = this.fillAutoCompleteTreeNodes(this.
|
|
13249
|
-
this.identitiesTreeNodes = this.fillAutoCompleteTreeNodes(this.
|
|
13250
|
-
this.edgeroutersTreeNodes = this.fillAutoCompleteTreeNodes(this.
|
|
13251
|
-
this.erPoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.
|
|
13252
|
-
this.serviceEdgeRouterPolicyTreeNodes = this.fillAutoCompleteTreeNodes(this.
|
|
13678
|
+
this.servicePoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.service_policies, this.servicePoliciesTreeNodes, 'ServicePolicy');
|
|
13679
|
+
this.servicesTreeNodes = this.fillAutoCompleteTreeNodes(this.services, this.servicesTreeNodes, 'Service');
|
|
13680
|
+
this.identitiesTreeNodes = this.fillAutoCompleteTreeNodes(this.identities, this.identitiesTreeNodes, 'Identity');
|
|
13681
|
+
this.edgeroutersTreeNodes = this.fillAutoCompleteTreeNodes(this.edgerouters, this.edgeroutersTreeNodes, 'Router');
|
|
13682
|
+
this.erPoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.edge_router_policies, this.erPoliciesTreeNodes, 'Router Policy');
|
|
13683
|
+
this.serviceEdgeRouterPolicyTreeNodes = this.fillAutoCompleteTreeNodes(this.service_router_policies, this.serviceEdgeRouterPolicyTreeNodes, 'Service Router Policy');
|
|
13253
13684
|
this.initTopoView();
|
|
13685
|
+
this.baseNetworkGraph = _.cloneDeep(this.networkGraph);
|
|
13254
13686
|
}
|
|
13255
13687
|
catch (err) {
|
|
13256
13688
|
this.logger.error(err.message);
|
|
13257
13689
|
}
|
|
13258
13690
|
this.isLoading = false;
|
|
13259
13691
|
}
|
|
13260
|
-
fillAutoCompleteTreeNodes(
|
|
13261
|
-
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
return;
|
|
13265
|
-
}
|
|
13266
|
-
if (typeof nodeObj.data.type === 'undefined') {
|
|
13267
|
-
// //
|
|
13268
|
-
}
|
|
13269
|
-
else {
|
|
13270
|
-
if (arr.indexOf(name) < 0 && nodeObj.data.type === typeName) {
|
|
13271
|
-
arr.push(name);
|
|
13272
|
-
}
|
|
13273
|
-
}
|
|
13274
|
-
const childNodes = nodeObj.children ? nodeObj.children : nodeObj._children;
|
|
13275
|
-
for (let i = 0; childNodes && i < childNodes.length; i++) {
|
|
13276
|
-
this.fillAutoCompleteTreeNodes(childNodes[i], arr, typeName);
|
|
13277
|
-
}
|
|
13692
|
+
fillAutoCompleteTreeNodes(resourcesArray, arr, typeName) {
|
|
13693
|
+
resourcesArray && resourcesArray.forEach((ob) => {
|
|
13694
|
+
arr.push(ob.name);
|
|
13695
|
+
});
|
|
13278
13696
|
return arr;
|
|
13279
13697
|
}
|
|
13698
|
+
debounce(func, timeout = 150) {
|
|
13699
|
+
let timer;
|
|
13700
|
+
return (...args) => {
|
|
13701
|
+
this.autocompleteOptions = [];
|
|
13702
|
+
clearTimeout(timer);
|
|
13703
|
+
timer = setTimeout(() => { func.apply(this, args); }, timeout);
|
|
13704
|
+
};
|
|
13705
|
+
}
|
|
13706
|
+
nwSearchChange(event) {
|
|
13707
|
+
if (this.filterText.length > 1 && event.key !== 'Escape' && event.key !== 'ArrowRight' && event.key !== 'ArrowLeft' && event.key !== 'Enter') {
|
|
13708
|
+
this.filerResponseMessage = 'search filter..';
|
|
13709
|
+
this.debounce(this.filterSearchArray());
|
|
13710
|
+
}
|
|
13711
|
+
}
|
|
13280
13712
|
autocompleteSearch(event) {
|
|
13281
13713
|
const str = event ? event.option.value : '';
|
|
13282
13714
|
this.searchResourceConditionCheck(str);
|
|
13283
13715
|
}
|
|
13284
13716
|
resourceTypeChanged() {
|
|
13717
|
+
this.filerResponseMessage = 'search filter..';
|
|
13718
|
+
this.searchCache = [];
|
|
13285
13719
|
this.resetSearchNode();
|
|
13286
13720
|
this.clearSearchLinkColors();
|
|
13287
13721
|
if (_.isEmpty(this.resourceType)) {
|
|
@@ -13292,22 +13726,23 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13292
13726
|
}
|
|
13293
13727
|
this.filterText = '';
|
|
13294
13728
|
this.resourceTypeError = false;
|
|
13295
|
-
|
|
13729
|
+
this.autocompleteOptions = [];
|
|
13730
|
+
if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
|
|
13296
13731
|
this.autocompleteOptions = this.servicePoliciesTreeNodes;
|
|
13297
13732
|
}
|
|
13298
|
-
else if (this.resourceType === 'services') {
|
|
13733
|
+
else if (this.resourceType === 'services' && this.all_services_fetched) {
|
|
13299
13734
|
this.autocompleteOptions = this.servicesTreeNodes;
|
|
13300
13735
|
}
|
|
13301
|
-
else if (this.resourceType === 'identities') {
|
|
13736
|
+
else if (this.resourceType === 'identities' && this.all_identities_fetched) {
|
|
13302
13737
|
this.autocompleteOptions = this.identitiesTreeNodes;
|
|
13303
13738
|
}
|
|
13304
|
-
else if (this.resourceType === 'edge-routers') {
|
|
13739
|
+
else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
|
|
13305
13740
|
this.autocompleteOptions = this.edgeroutersTreeNodes;
|
|
13306
13741
|
}
|
|
13307
|
-
else if (this.resourceType === 'edge-router-policies') {
|
|
13742
|
+
else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
|
|
13308
13743
|
this.autocompleteOptions = this.erPoliciesTreeNodes;
|
|
13309
13744
|
}
|
|
13310
|
-
else if (this.resourceType === 'service-edge-router-policies') {
|
|
13745
|
+
else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
|
|
13311
13746
|
this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes;
|
|
13312
13747
|
}
|
|
13313
13748
|
if (!_.isEmpty(this.filterText)) {
|
|
@@ -13316,7 +13751,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13316
13751
|
}
|
|
13317
13752
|
searchResourceConditionCheck(searchTxt) {
|
|
13318
13753
|
if (this.resourceType === '' && searchTxt !== '') {
|
|
13319
|
-
// if (searchTxt !== '') {
|
|
13320
13754
|
this.resourceTypeError = true;
|
|
13321
13755
|
return;
|
|
13322
13756
|
}
|
|
@@ -13325,7 +13759,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13325
13759
|
}
|
|
13326
13760
|
}
|
|
13327
13761
|
searchResourceInTree(searchTxt) {
|
|
13328
|
-
// this.closeTable();
|
|
13329
13762
|
this.noSearchResults = false;
|
|
13330
13763
|
this.resourceTypeError = false;
|
|
13331
13764
|
this.resetTree(null);
|
|
@@ -13338,32 +13771,152 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13338
13771
|
let paths = [];
|
|
13339
13772
|
let targetNodes = [];
|
|
13340
13773
|
const nodeIds = [];
|
|
13341
|
-
if (this.resourceType === 'service-policies') {
|
|
13342
|
-
|
|
13774
|
+
if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {
|
|
13775
|
+
const rawOb = this.searchCache.find((item) => item.name === searchTxt);
|
|
13776
|
+
const id = this.topologyHelper.createServicePolicyNode(rawOb);
|
|
13777
|
+
// id.clickProcess = "Not Yet";
|
|
13778
|
+
if (!this.isNodeExists(this.nodes[1], id)) {
|
|
13779
|
+
this.nodes[1].data.children.push(id);
|
|
13780
|
+
}
|
|
13781
|
+
this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
|
|
13782
|
+
return nd.children;
|
|
13783
|
+
});
|
|
13784
|
+
this.networkGraph.children.forEach((nd, i) => {
|
|
13785
|
+
if (i !== 0) {
|
|
13786
|
+
this.graphCollapse(nd);
|
|
13787
|
+
}
|
|
13788
|
+
});
|
|
13789
|
+
this.service_policies = [];
|
|
13790
|
+
this.service_policies[0] = rawOb;
|
|
13791
|
+
this.updateTree(this.nodes[1]);
|
|
13792
|
+
targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, targetNodes);
|
|
13793
|
+
}
|
|
13794
|
+
else if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
|
|
13795
|
+
targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, targetNodes);
|
|
13796
|
+
}
|
|
13797
|
+
else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {
|
|
13798
|
+
const rawOb = this.searchCache.find((item) => item.name === searchTxt);
|
|
13799
|
+
const id = this.topologyHelper.createEdgeRouterNode(rawOb);
|
|
13800
|
+
// id.clickProcess = "Not Yet";
|
|
13801
|
+
if (!this.isNodeExists(this.nodes[4], id)) {
|
|
13802
|
+
this.nodes[4].data.children.push(id);
|
|
13803
|
+
}
|
|
13804
|
+
this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
|
|
13805
|
+
return nd.children;
|
|
13806
|
+
});
|
|
13807
|
+
this.networkGraph.children.forEach((nd, i) => {
|
|
13808
|
+
if (i !== 3) {
|
|
13809
|
+
this.graphCollapse(nd);
|
|
13810
|
+
}
|
|
13811
|
+
});
|
|
13812
|
+
this.edgerouters = [];
|
|
13813
|
+
this.edgerouters[0] = rawOb;
|
|
13814
|
+
this.updateTree(this.nodes[4]);
|
|
13815
|
+
targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, targetNodes);
|
|
13816
|
+
}
|
|
13817
|
+
else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
|
|
13818
|
+
targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, targetNodes);
|
|
13819
|
+
}
|
|
13820
|
+
else if (this.resourceType === 'services' && !this.all_services_fetched) {
|
|
13821
|
+
const rawOb = this.searchCache.find((item) => item.name === searchTxt);
|
|
13822
|
+
const id = this.topologyHelper.createServiceNode(rawOb);
|
|
13823
|
+
id.clickProcess = "Not Yet";
|
|
13824
|
+
if (!this.isNodeExists(this.nodes[2], id)) {
|
|
13825
|
+
this.nodes[2].data.children.push(id);
|
|
13826
|
+
}
|
|
13827
|
+
this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
|
|
13828
|
+
return nd.children;
|
|
13829
|
+
});
|
|
13830
|
+
this.services = [];
|
|
13831
|
+
this.services[0] = rawOb;
|
|
13832
|
+
this.updateTree(this.nodes[2]);
|
|
13833
|
+
targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, targetNodes);
|
|
13834
|
+
this.networkGraph.children.forEach((nd, i) => {
|
|
13835
|
+
if (i !== 1) {
|
|
13836
|
+
this.graphCollapse(nd);
|
|
13837
|
+
}
|
|
13838
|
+
});
|
|
13343
13839
|
}
|
|
13344
|
-
else if (this.resourceType === '
|
|
13345
|
-
targetNodes = this.processSearchInPreorder(this.nodes[
|
|
13840
|
+
else if (this.resourceType === 'services' && this.all_services_fetched) {
|
|
13841
|
+
targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, targetNodes);
|
|
13346
13842
|
}
|
|
13347
|
-
else if (this.resourceType === '
|
|
13348
|
-
|
|
13843
|
+
else if (this.resourceType === 'identities' && !this.all_identities_fetched) {
|
|
13844
|
+
const rawOb = this.searchCache.find((item) => item.name === searchTxt);
|
|
13845
|
+
const id = this.topologyHelper.createIdentityNode(rawOb);
|
|
13846
|
+
id.clickProcess = "Not Yet";
|
|
13847
|
+
if (!this.isNodeExists(this.nodes[3], id)) {
|
|
13848
|
+
this.nodes[3].data.children.push(id);
|
|
13849
|
+
}
|
|
13850
|
+
this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
|
|
13851
|
+
return nd.children;
|
|
13852
|
+
});
|
|
13853
|
+
this.identities[0] = [];
|
|
13854
|
+
this.identities[0] = rawOb;
|
|
13855
|
+
this.updateTree(this.nodes[3]);
|
|
13856
|
+
targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, targetNodes);
|
|
13857
|
+
this.networkGraph.children.forEach((nd, i) => {
|
|
13858
|
+
if (i !== 2) {
|
|
13859
|
+
this.graphCollapse(nd);
|
|
13860
|
+
}
|
|
13861
|
+
});
|
|
13349
13862
|
}
|
|
13350
|
-
else if (this.resourceType === 'identities') {
|
|
13351
|
-
targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt,
|
|
13863
|
+
else if (this.resourceType === 'identities' && this.all_identities_fetched) {
|
|
13864
|
+
targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, targetNodes);
|
|
13352
13865
|
}
|
|
13353
|
-
else if (this.resourceType === 'edge-router-policies') {
|
|
13354
|
-
|
|
13866
|
+
else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {
|
|
13867
|
+
const rawOb = this.searchCache.find((item) => item.name === searchTxt);
|
|
13868
|
+
const id = this.topologyHelper.createEdgeRouterPolicyNode(rawOb);
|
|
13869
|
+
id.clickProcess = "Not Yet";
|
|
13870
|
+
if (!this.isNodeExists(this.nodes[5], id)) {
|
|
13871
|
+
this.nodes[5].data.children.push(id);
|
|
13872
|
+
}
|
|
13873
|
+
this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
|
|
13874
|
+
return nd.children;
|
|
13875
|
+
});
|
|
13876
|
+
this.networkGraph.children.forEach((nd, i) => {
|
|
13877
|
+
if (i !== 4) {
|
|
13878
|
+
this.graphCollapse(nd);
|
|
13879
|
+
}
|
|
13880
|
+
});
|
|
13881
|
+
this.networkGraph.children.forEach(nd => this.graphCollapse(nd));
|
|
13882
|
+
this.edge_router_policies = [];
|
|
13883
|
+
this.edge_router_policies[0] = rawOb;
|
|
13884
|
+
this.updateTree(this.nodes[5]);
|
|
13885
|
+
targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, targetNodes);
|
|
13886
|
+
}
|
|
13887
|
+
else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
|
|
13888
|
+
targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, targetNodes);
|
|
13889
|
+
}
|
|
13890
|
+
else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {
|
|
13891
|
+
const rawOb = this.searchCache.find((item) => item.name === searchTxt);
|
|
13892
|
+
const id = this.topologyHelper.createServiceEdgeRouterPolicyNode(rawOb);
|
|
13893
|
+
id.clickProcess = "Not Yet";
|
|
13894
|
+
if (!this.isNodeExists(this.nodes[6], id)) {
|
|
13895
|
+
this.nodes[6].data.children.push(id);
|
|
13896
|
+
}
|
|
13897
|
+
this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
|
|
13898
|
+
return nd.children;
|
|
13899
|
+
});
|
|
13900
|
+
this.networkGraph.children.forEach((nd, i) => {
|
|
13901
|
+
if (i !== 5) {
|
|
13902
|
+
this.graphCollapse(nd);
|
|
13903
|
+
}
|
|
13904
|
+
});
|
|
13905
|
+
this.service_router_policies = [];
|
|
13906
|
+
this.service_router_policies[0] = rawOb;
|
|
13907
|
+
this.updateTree(this.nodes[6]);
|
|
13908
|
+
targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, targetNodes);
|
|
13355
13909
|
}
|
|
13356
|
-
else if (this.resourceType === 'service-edge-router-policies') {
|
|
13357
|
-
targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt,
|
|
13910
|
+
else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
|
|
13911
|
+
targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, targetNodes);
|
|
13358
13912
|
}
|
|
13913
|
+
// this.networkGraph.children.forEach(nd => this.graphCollapse(nd));
|
|
13359
13914
|
paths = this.explorePathsForSearchedNodes(targetNodes, paths, nodeIds);
|
|
13360
13915
|
if (targetNodes && targetNodes.length <= 0) {
|
|
13361
13916
|
this.noSearchResults = true;
|
|
13362
13917
|
this.clearSearchLinkColors();
|
|
13363
|
-
// return false;
|
|
13364
13918
|
}
|
|
13365
13919
|
else {
|
|
13366
|
-
//if (targetNodes) {
|
|
13367
13920
|
this.openPaths(paths, true);
|
|
13368
13921
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
13369
13922
|
// @ts-ignore
|
|
@@ -13372,16 +13925,15 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13372
13925
|
// const dataId = _.get(d, 'data.id', '');
|
|
13373
13926
|
const nodeName = _.get(targetNodes[0], 'data.name', '');
|
|
13374
13927
|
if (dataName.toLowerCase() === searchTxt.toLowerCase() && nodeName === dataName) {
|
|
13375
|
-
d3.select(this).style('fill', '
|
|
13928
|
+
d3.select(this).style('fill', '#a60303'); //#004447, 470000
|
|
13376
13929
|
}
|
|
13377
13930
|
});
|
|
13378
13931
|
}
|
|
13379
|
-
// else {
|
|
13380
|
-
// this.noSearchResults = true;
|
|
13381
|
-
// this.clearSearchLinkColors();
|
|
13382
|
-
// }
|
|
13383
13932
|
}
|
|
13384
13933
|
}
|
|
13934
|
+
isNodeExists(rootNode, id) {
|
|
13935
|
+
return rootNode.data.children.find((nd) => nd.uuid === id.uuid);
|
|
13936
|
+
}
|
|
13385
13937
|
explorePathsForSearchedNodes(targetNodes, paths, nodeIds) {
|
|
13386
13938
|
for (let i = 0; targetNodes && i < targetNodes.length; i++) {
|
|
13387
13939
|
let nd = targetNodes[i];
|
|
@@ -13397,7 +13949,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13397
13949
|
}
|
|
13398
13950
|
return paths;
|
|
13399
13951
|
}
|
|
13400
|
-
processSearchInPreorder(nodeObj, searchTxt,
|
|
13952
|
+
processSearchInPreorder(nodeObj, searchTxt, targetNodes) {
|
|
13401
13953
|
const name = _.get(nodeObj, 'data.name');
|
|
13402
13954
|
// const nodeId = _.get(nodeObj, 'data.id');
|
|
13403
13955
|
const isRootNode = _.get(nodeObj, 'data.rootNode');
|
|
@@ -13409,7 +13961,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13409
13961
|
}
|
|
13410
13962
|
const childNodes = nodeObj.children ? nodeObj.children : nodeObj._children;
|
|
13411
13963
|
for (let i = 0; childNodes && i < childNodes.length; i++) {
|
|
13412
|
-
this.processSearchInPreorder(childNodes[i], searchTxt,
|
|
13964
|
+
this.processSearchInPreorder(childNodes[i], searchTxt, targetNodes);
|
|
13413
13965
|
}
|
|
13414
13966
|
return targetNodes;
|
|
13415
13967
|
}
|
|
@@ -13547,7 +14099,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13547
14099
|
resetSearchNode() {
|
|
13548
14100
|
if (this.searchRootNode) {
|
|
13549
14101
|
this.networkGraph = _.cloneDeep(this.baseNetworkGraph);
|
|
13550
|
-
this.updateTree(this.networkGraph);
|
|
14102
|
+
this.updateTree(this.networkGraph, true);
|
|
13551
14103
|
}
|
|
13552
14104
|
}
|
|
13553
14105
|
resetTree(clearSearch) {
|
|
@@ -13593,6 +14145,35 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13593
14145
|
}
|
|
13594
14146
|
}
|
|
13595
14147
|
}
|
|
14148
|
+
findModelName() {
|
|
14149
|
+
return this.resourceType;
|
|
14150
|
+
}
|
|
14151
|
+
async searchObjectsUsingApi() {
|
|
14152
|
+
this.isLoading = true;
|
|
14153
|
+
const model_name = this.findModelName();
|
|
14154
|
+
this.searchWord = _.clone(this.filterText);
|
|
14155
|
+
const str = `${this.resourceType}?filter=%20name%20contains%20%22${this.searchWord}%22&limit=5&offset=0&sort=name%20%20asc`;
|
|
14156
|
+
return await this.zitiService
|
|
14157
|
+
.call(str)
|
|
14158
|
+
.then((result) => {
|
|
14159
|
+
this.isLoading = false;
|
|
14160
|
+
this.autocompleteOptions = [];
|
|
14161
|
+
this.searchCache = result.data;
|
|
14162
|
+
result.data.forEach((res) => {
|
|
14163
|
+
/* const obj: { [key: string]: string } = {
|
|
14164
|
+
id: res.id,
|
|
14165
|
+
name: res.name,
|
|
14166
|
+
}; */
|
|
14167
|
+
this.autocompleteOptions.push(res.name);
|
|
14168
|
+
});
|
|
14169
|
+
this.noSearchResults = true;
|
|
14170
|
+
const countA = result.data?.length > 0 ? result.data.length : 0;
|
|
14171
|
+
this.filerResponseMessage = "search word:'" + this.searchWord + "', result: top " + countA + " of " + result.meta.pagination.totalCount + " records";
|
|
14172
|
+
}).catch((error) => {
|
|
14173
|
+
this.isLoading = false;
|
|
14174
|
+
this.logger.error(error.message);
|
|
14175
|
+
});
|
|
14176
|
+
}
|
|
13596
14177
|
filterSearchArray() {
|
|
13597
14178
|
if (_.isEmpty(this.resourceType)) {
|
|
13598
14179
|
this.autocompleteOptions = [];
|
|
@@ -13600,37 +14181,96 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13600
14181
|
return;
|
|
13601
14182
|
}
|
|
13602
14183
|
this.autocompleteOptions = [];
|
|
13603
|
-
if (this.resourceType === 'service-policies') {
|
|
14184
|
+
if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
|
|
13604
14185
|
this.autocompleteOptions = this.servicePoliciesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
13605
14186
|
}
|
|
13606
|
-
else if (this.resourceType === '
|
|
14187
|
+
else if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {
|
|
14188
|
+
this.searchObjectsUsingApi();
|
|
14189
|
+
}
|
|
14190
|
+
else if (this.resourceType === 'services' && this.all_services_fetched) {
|
|
13607
14191
|
this.autocompleteOptions = this.servicesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
13608
14192
|
}
|
|
13609
|
-
else if (this.resourceType === '
|
|
14193
|
+
else if (this.resourceType === 'services' && !this.all_services_fetched) {
|
|
14194
|
+
this.searchObjectsUsingApi();
|
|
14195
|
+
}
|
|
14196
|
+
else if (this.resourceType === 'identities' && this.all_identities_fetched) {
|
|
13610
14197
|
this.autocompleteOptions = this.identitiesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
13611
14198
|
}
|
|
13612
|
-
else if (this.resourceType === '
|
|
14199
|
+
else if (this.resourceType === 'identities' && !this.all_identities_fetched) {
|
|
14200
|
+
this.searchObjectsUsingApi();
|
|
14201
|
+
}
|
|
14202
|
+
else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
|
|
13613
14203
|
this.autocompleteOptions = this.edgeroutersTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
13614
14204
|
}
|
|
13615
|
-
else if (this.resourceType === 'edge-
|
|
14205
|
+
else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {
|
|
14206
|
+
this.searchObjectsUsingApi();
|
|
14207
|
+
}
|
|
14208
|
+
else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
|
|
13616
14209
|
this.autocompleteOptions = this.erPoliciesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
13617
14210
|
}
|
|
13618
|
-
else if (this.resourceType === '
|
|
14211
|
+
else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {
|
|
14212
|
+
this.searchObjectsUsingApi();
|
|
14213
|
+
}
|
|
14214
|
+
else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
|
|
13619
14215
|
this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
13620
14216
|
}
|
|
14217
|
+
else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {
|
|
14218
|
+
this.searchObjectsUsingApi();
|
|
14219
|
+
}
|
|
13621
14220
|
}
|
|
13622
14221
|
zoomIn() {
|
|
13623
14222
|
}
|
|
13624
14223
|
zoomOut() {
|
|
13625
14224
|
}
|
|
13626
14225
|
clearSearchFilter() {
|
|
13627
|
-
this.resourceTypeError = false;
|
|
13628
14226
|
this.filterText = '';
|
|
13629
|
-
this.
|
|
14227
|
+
this.resetAutoCompleteOptions();
|
|
14228
|
+
this.resourceTypeError = false;
|
|
14229
|
+
// this.filterSearchArray();
|
|
13630
14230
|
this.resetSearchNode();
|
|
13631
14231
|
this.collapse();
|
|
13632
14232
|
this.clearSearchLinkColors();
|
|
13633
14233
|
}
|
|
14234
|
+
resetAutoCompleteOptions() {
|
|
14235
|
+
this.searchCache = [];
|
|
14236
|
+
this.filerResponseMessage = 'search filter..';
|
|
14237
|
+
if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
|
|
14238
|
+
this.autocompleteOptions = this.servicePoliciesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
14239
|
+
}
|
|
14240
|
+
else if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {
|
|
14241
|
+
this.autocompleteOptions = [];
|
|
14242
|
+
}
|
|
14243
|
+
else if (this.resourceType === 'services' && this.all_services_fetched) {
|
|
14244
|
+
this.autocompleteOptions = this.servicesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
14245
|
+
}
|
|
14246
|
+
else if (this.resourceType === 'services' && !this.all_services_fetched) {
|
|
14247
|
+
this.autocompleteOptions = [];
|
|
14248
|
+
}
|
|
14249
|
+
else if (this.resourceType === 'identities' && this.all_identities_fetched) {
|
|
14250
|
+
this.autocompleteOptions = this.identitiesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
14251
|
+
}
|
|
14252
|
+
else if (this.resourceType === 'identities' && !this.all_identities_fetched) {
|
|
14253
|
+
this.autocompleteOptions = [];
|
|
14254
|
+
}
|
|
14255
|
+
else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
|
|
14256
|
+
this.autocompleteOptions = this.edgeroutersTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
14257
|
+
}
|
|
14258
|
+
else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {
|
|
14259
|
+
this.autocompleteOptions = [];
|
|
14260
|
+
}
|
|
14261
|
+
else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
|
|
14262
|
+
this.autocompleteOptions = this.erPoliciesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
14263
|
+
}
|
|
14264
|
+
else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {
|
|
14265
|
+
this.autocompleteOptions = [];
|
|
14266
|
+
}
|
|
14267
|
+
else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
|
|
14268
|
+
this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
|
|
14269
|
+
}
|
|
14270
|
+
else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {
|
|
14271
|
+
this.autocompleteOptions = [];
|
|
14272
|
+
}
|
|
14273
|
+
}
|
|
13634
14274
|
clearSearchType() {
|
|
13635
14275
|
this.resourceType = '';
|
|
13636
14276
|
this.autocompleteOptions = [];
|
|
@@ -13641,12 +14281,21 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13641
14281
|
transform.k = 1;
|
|
13642
14282
|
this.svg.attr('transform', transform);
|
|
13643
14283
|
}
|
|
14284
|
+
graphCollapse(d) {
|
|
14285
|
+
if (d.data.rootNode === 'Yes') {
|
|
14286
|
+
d.data.clickProcess = 'Not Yet';
|
|
14287
|
+
d._children = null;
|
|
14288
|
+
}
|
|
14289
|
+
if (d.children) {
|
|
14290
|
+
d._children = d.children;
|
|
14291
|
+
d._children && d._children?.find(nd => this.graphCollapse);
|
|
14292
|
+
d.children = null;
|
|
14293
|
+
}
|
|
14294
|
+
}
|
|
13644
14295
|
initTopoView() {
|
|
13645
14296
|
this.autocompleteOptions = [];
|
|
13646
14297
|
const margin = { top: 20, right: 190, bottom: 30, left: 0 };
|
|
13647
|
-
// const width = 1600 - margin.left - margin.right;
|
|
13648
14298
|
const width = window.innerWidth - margin.right;
|
|
13649
|
-
// const height = 1600 - margin.top - margin.bottom;
|
|
13650
14299
|
const height = window.innerHeight - margin.bottom;
|
|
13651
14300
|
this.treetooltip = d3.select('#tooltip');
|
|
13652
14301
|
this.resourceTypeError = false;
|
|
@@ -13668,10 +14317,11 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13668
14317
|
d3.select('#topocontextmenu').style('display', 'none');
|
|
13669
14318
|
});
|
|
13670
14319
|
d3.selectAll('g > *').remove();
|
|
13671
|
-
this.treemap = d3.tree().nodeSize([
|
|
14320
|
+
this.treemap = d3.tree().nodeSize([85, 5]);
|
|
13672
14321
|
this.networkGraph.x = 100; // height / 4;
|
|
13673
14322
|
this.networkGraph.y = 100;
|
|
13674
14323
|
this.networkGraph.children.forEach(collapse);
|
|
14324
|
+
// this.networkGraph.children.forEach( (nd:any) => this.graphCollapse(nd) );
|
|
13675
14325
|
this.updateTree(this.networkGraph);
|
|
13676
14326
|
_.delay(() => {
|
|
13677
14327
|
this.transform = d3.zoomIdentity;
|
|
@@ -13728,7 +14378,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13728
14378
|
if (_.startsWith(d.data.name, 'Edge Routers') || _.includes(d.data.type, 'Edge Router')) {
|
|
13729
14379
|
className = 'edge-router';
|
|
13730
14380
|
}
|
|
13731
|
-
if (_.includes(d.data.name, 'Identities') || _.includes(d.data.type, 'Identity')) {
|
|
14381
|
+
if (_.includes(d.data.name, 'Identities') || _.includes(d.data.name, 'Associated Identities') || _.includes(d.data.type, 'Identity') || _.includes(d.data.type, 'BrowZer Identity')) {
|
|
13732
14382
|
className = 'endpoint';
|
|
13733
14383
|
}
|
|
13734
14384
|
if (_.startsWith(d.data.name, 'Services') || _.startsWith(d.data.type, 'Service')) {
|
|
@@ -13737,10 +14387,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13737
14387
|
if (_.startsWith(d.data.name, 'Bind-Services') || _.startsWith(d.data.name, 'Dial-Services')) {
|
|
13738
14388
|
className = 'service';
|
|
13739
14389
|
}
|
|
13740
|
-
if (_.startsWith(d.data.name, '
|
|
14390
|
+
if (_.startsWith(d.data.name, 'Bind-Policies') || _.startsWith(d.data.name, 'Dial-Policies') || _.startsWith(d.data.name, 'Bind Policy')) {
|
|
13741
14391
|
className = 'service-policy';
|
|
13742
14392
|
}
|
|
13743
|
-
if (_.includes(d.data.name, 'Service Policies') || _.includes(d.data.type, '
|
|
14393
|
+
if (_.includes(d.data.name, 'Service Policies') || _.includes(d.data.type, 'Service Policy')) {
|
|
13744
14394
|
className = 'service-policy';
|
|
13745
14395
|
}
|
|
13746
14396
|
if (_.startsWith(d.data.name, 'Edge Router Policies') || _.startsWith(d.data.type, 'Router Policy')) {
|
|
@@ -13768,7 +14418,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13768
14418
|
const rawEdgerouters = this.edgerouters;
|
|
13769
14419
|
const rawEndpoints = this.identities;
|
|
13770
14420
|
const rawAppwans = this.service_policies;
|
|
13771
|
-
const edgeRouterPolicies = this.
|
|
14421
|
+
const edgeRouterPolicies = this.edge_router_policies;
|
|
13772
14422
|
if (d && d.data && d.data.contextMenu === 'Yes') {
|
|
13773
14423
|
d3.select('#topocontextmenu')
|
|
13774
14424
|
.style('position', 'absolute')
|
|
@@ -13780,7 +14430,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13780
14430
|
return;
|
|
13781
14431
|
}
|
|
13782
14432
|
let obj = null;
|
|
13783
|
-
if (d && d.data && d.data.type === 'Identity') {
|
|
14433
|
+
if (d && d.data && (d.data.type === 'Identity' || d.data.type === 'BrowZer Identity')) {
|
|
13784
14434
|
if (d.data.status === "Registered") {
|
|
13785
14435
|
enableLi('#liSingleUT');
|
|
13786
14436
|
enableLi('#liFLSingleRouter');
|
|
@@ -13802,14 +14452,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13802
14452
|
disableLi('#liSingleLT');
|
|
13803
14453
|
disableLi('#liCL');
|
|
13804
14454
|
disableLi('#liLT');
|
|
13805
|
-
/*
|
|
13806
|
-
obj = new Identity();
|
|
13807
|
-
for (let i = 0; i < rawEndpoints.length; i++) {
|
|
13808
|
-
if (rawEndpoints[i].id === d.data.uuid) {
|
|
13809
|
-
obj = rawEndpoints[i];
|
|
13810
|
-
}
|
|
13811
|
-
}
|
|
13812
|
-
*/
|
|
13813
14455
|
this.contextmenuNodeType = 'identity';
|
|
13814
14456
|
}
|
|
13815
14457
|
else if (d && d.data && d.data.type === 'Edge Router') {
|
|
@@ -13833,14 +14475,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13833
14475
|
disableLi('#liCL');
|
|
13834
14476
|
disableLi('#liLT');
|
|
13835
14477
|
this.contextmenuNodeType = 'edge-router';
|
|
13836
|
-
/*
|
|
13837
|
-
obj = new EdgeRouterV2();
|
|
13838
|
-
for (let i = 0; i < rawEdgerouters.length; i++) {
|
|
13839
|
-
if (rawEdgerouters[i].id === d.data.uuid) {
|
|
13840
|
-
obj = rawEdgerouters[i];
|
|
13841
|
-
}
|
|
13842
|
-
}
|
|
13843
|
-
*/
|
|
13844
14478
|
}
|
|
13845
14479
|
else if (d && d.data && d.data.type === 'Service') {
|
|
13846
14480
|
enableLi('#liMet');
|
|
@@ -13856,16 +14490,8 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13856
14490
|
disableLi('#liLT');
|
|
13857
14491
|
enableLi('#liSingleUT');
|
|
13858
14492
|
this.contextmenuNodeType = 'service';
|
|
13859
|
-
/*
|
|
13860
|
-
obj = new PlatformService();
|
|
13861
|
-
for (let i = 0; i < this.services.length; i++) {
|
|
13862
|
-
if (this.services[i].id === d.data.uuid) {
|
|
13863
|
-
obj = this.services[i];
|
|
13864
|
-
}
|
|
13865
|
-
}
|
|
13866
|
-
*/
|
|
13867
14493
|
}
|
|
13868
|
-
else if (d && d.data && d.data.type === '
|
|
14494
|
+
else if (d && d.data && d.data.type === 'Service Policy') {
|
|
13869
14495
|
disableLi('#liMet');
|
|
13870
14496
|
enableLi('#liVC');
|
|
13871
14497
|
disableLi('#liIns');
|
|
@@ -13878,15 +14504,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13878
14504
|
disableLi('#liCL');
|
|
13879
14505
|
disableLi('#liLT');
|
|
13880
14506
|
disableLi('#liSingleUT');
|
|
13881
|
-
|
|
13882
|
-
obj = new ServicePolicy();
|
|
13883
|
-
for (let i = 0; i < rawAppwans.length; i++) {
|
|
13884
|
-
if (rawAppwans[i].id === d.data.uuid) {
|
|
13885
|
-
obj = rawAppwans[i];
|
|
13886
|
-
}
|
|
13887
|
-
}
|
|
13888
|
-
*/
|
|
13889
|
-
this.contextmenuNodeType = 'appwan';
|
|
14507
|
+
this.contextmenuNodeType = 'service-policy';
|
|
13890
14508
|
}
|
|
13891
14509
|
else if (d && d.data && d.data.type === 'Router Policy') {
|
|
13892
14510
|
disableLi('#liMet');
|
|
@@ -13902,14 +14520,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13902
14520
|
disableLi('#liLT');
|
|
13903
14521
|
disableLi('#liSingleUT');
|
|
13904
14522
|
this.contextmenuNodeType = 'router-policy';
|
|
13905
|
-
/*
|
|
13906
|
-
obj = new EdgeRouterPolicyV2();
|
|
13907
|
-
for (let i = 0; i < edgeRouterPolicies.length; i++) {
|
|
13908
|
-
if (edgeRouterPolicies[i].id === d.data.uuid) {
|
|
13909
|
-
obj = edgeRouterPolicies[i];
|
|
13910
|
-
}
|
|
13911
|
-
}
|
|
13912
|
-
*/
|
|
13913
14523
|
}
|
|
13914
14524
|
else if (d && d.data && d.data.type === 'Network') {
|
|
13915
14525
|
enableLi('#liMet');
|
|
@@ -13941,14 +14551,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13941
14551
|
disableLi('#liLT');
|
|
13942
14552
|
disableLi('#liSingleUT');
|
|
13943
14553
|
this.contextmenuNodeType = 'service-router-policy';
|
|
13944
|
-
/*
|
|
13945
|
-
obj = new ServiceEdgeRouterPolicy();
|
|
13946
|
-
for (let i = 0; i < this.service_router_policies.length; i++) {
|
|
13947
|
-
if (this.service_router_policies[i].id === d.data.uuid) {
|
|
13948
|
-
obj = this.service_router_policies[i];
|
|
13949
|
-
}
|
|
13950
|
-
}
|
|
13951
|
-
*/
|
|
13952
14554
|
}
|
|
13953
14555
|
this.contextmenuNode = obj;
|
|
13954
14556
|
d3.select('#tooltip').style('display', 'none');
|
|
@@ -13960,14 +14562,31 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13960
14562
|
.style('fill', function (d) {
|
|
13961
14563
|
return d._children ? 'var(--tableText)' : '#fff';
|
|
13962
14564
|
})
|
|
13963
|
-
.on('mousemove', (event,
|
|
13964
|
-
this.drawTreeTooltip(event,
|
|
14565
|
+
.on('mousemove', (event, d) => {
|
|
14566
|
+
this.drawTreeTooltip(event, d);
|
|
13965
14567
|
})
|
|
13966
14568
|
.on('mouseout', this.removeTreeTooltip)
|
|
13967
14569
|
.on('contextmenu', (event) => {
|
|
13968
14570
|
event.preventDefault();
|
|
13969
14571
|
})
|
|
13970
14572
|
.on('click', async (event, d) => {
|
|
14573
|
+
if (d.data.rootNode && d.data.rootNode === 'Yes' && d.data.clickProcess === 'Not Yet') {
|
|
14574
|
+
d3.select(event.currentTarget).transition()
|
|
14575
|
+
.duration(600)
|
|
14576
|
+
.style("stroke-width", "10")
|
|
14577
|
+
.transition()
|
|
14578
|
+
.duration(600)
|
|
14579
|
+
.style("stroke-width", "6")
|
|
14580
|
+
.transition()
|
|
14581
|
+
.duration(600)
|
|
14582
|
+
.style("stroke-width", "3")
|
|
14583
|
+
.transition()
|
|
14584
|
+
.duration(600)
|
|
14585
|
+
.style("stroke-width", "9")
|
|
14586
|
+
.transition()
|
|
14587
|
+
.duration(600)
|
|
14588
|
+
.style("stroke-width", "12");
|
|
14589
|
+
}
|
|
13971
14590
|
if (d && d.data && d.data.contextMenu === 'Yes') {
|
|
13972
14591
|
d3.select('#topocontextmenu').style('display', 'none');
|
|
13973
14592
|
}
|
|
@@ -13989,13 +14608,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
13989
14608
|
if (d.data &&
|
|
13990
14609
|
d.data.rootNode &&
|
|
13991
14610
|
d.data.rootNode === 'Yes' &&
|
|
13992
|
-
d.data.type === 'Identity'
|
|
14611
|
+
(d.data.type === 'Identity' ||
|
|
14612
|
+
d.data.type === 'BrowZer Identity') &&
|
|
13993
14613
|
!d.children &&
|
|
13994
14614
|
!d._children) {
|
|
14615
|
+
d.data.clickProcess = 'Completed';
|
|
13995
14616
|
const arr = await this.treeNodeProcessor.processIdentitiesForNodeClick(d, this.networkGraph, this.identities, this.uniqId, this.zitiService, this.configs);
|
|
13996
14617
|
this.uniqId = arr[1];
|
|
13997
14618
|
this.networkGraph = arr[0];
|
|
13998
|
-
d.data.clickProcess = 'Completed';
|
|
13999
14619
|
this.networkGraph.children.find((nd) => {
|
|
14000
14620
|
collapseFew(nd, this.openNodes);
|
|
14001
14621
|
});
|
|
@@ -14007,10 +14627,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14007
14627
|
d.data.type === 'Service' &&
|
|
14008
14628
|
!d.children &&
|
|
14009
14629
|
!d._children) {
|
|
14630
|
+
d.data.clickProcess = 'Completed';
|
|
14010
14631
|
const arr = await this.treeNodeProcessor.processServicesForNodeClick(d, this.networkGraph, this.services, this.uniqId, this.zitiService);
|
|
14011
14632
|
this.uniqId = arr[1];
|
|
14012
14633
|
this.networkGraph = arr[0];
|
|
14013
|
-
d.data.clickProcess = 'Completed';
|
|
14014
14634
|
this.networkGraph.children.find((nd) => {
|
|
14015
14635
|
collapseFew(nd, this.openNodes);
|
|
14016
14636
|
});
|
|
@@ -14019,13 +14639,13 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14019
14639
|
else if (d.data &&
|
|
14020
14640
|
d.data.rootNode &&
|
|
14021
14641
|
d.data.rootNode === 'Yes' &&
|
|
14022
|
-
d.data.type === '
|
|
14642
|
+
d.data.type === 'Service Policy' &&
|
|
14023
14643
|
!d.children &&
|
|
14024
14644
|
!d._children) {
|
|
14645
|
+
d.data.clickProcess = 'Completed';
|
|
14025
14646
|
const arr = await this.treeNodeProcessor.processServicePoliciesForNodeClick(d, this.networkGraph, this.service_policies, this.uniqId, this.zitiService);
|
|
14026
14647
|
this.uniqId = arr[1];
|
|
14027
14648
|
this.networkGraph = arr[0];
|
|
14028
|
-
d.data.clickProcess = 'Completed';
|
|
14029
14649
|
this.networkGraph.children.find((nd) => {
|
|
14030
14650
|
collapseFew(nd, this.openNodes);
|
|
14031
14651
|
});
|
|
@@ -14037,10 +14657,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14037
14657
|
d.data.type === 'Edge Router' &&
|
|
14038
14658
|
!d.children &&
|
|
14039
14659
|
!d._children) {
|
|
14660
|
+
d.data.clickProcess = 'Completed';
|
|
14040
14661
|
const arr = await this.treeNodeProcessor.processEdgeroutersForNodeClick(d, this.networkGraph, this.edgerouters, this.uniqId, this.zitiService);
|
|
14041
14662
|
this.uniqId = arr[1];
|
|
14042
14663
|
this.networkGraph = arr[0];
|
|
14043
|
-
d.data.clickProcess = 'Completed';
|
|
14044
14664
|
this.networkGraph.children.find((nd) => {
|
|
14045
14665
|
collapseFew(nd, this.openNodes);
|
|
14046
14666
|
});
|
|
@@ -14052,10 +14672,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14052
14672
|
d.data.type === 'Router Policy' &&
|
|
14053
14673
|
!d.children &&
|
|
14054
14674
|
!d._children) {
|
|
14055
|
-
|
|
14675
|
+
d.data.clickProcess = 'Completed';
|
|
14676
|
+
const arr = await this.treeNodeProcessor.processEdgeRouterPoliciesForNodeClick(d, this.networkGraph, this.edge_router_policies, this.uniqId, this.zitiService);
|
|
14056
14677
|
this.uniqId = arr[1];
|
|
14057
14678
|
this.networkGraph = arr[0];
|
|
14058
|
-
d.data.clickProcess = 'Completed';
|
|
14059
14679
|
this.networkGraph.children.find((nd) => {
|
|
14060
14680
|
collapseFew(nd, this.openNodes);
|
|
14061
14681
|
});
|
|
@@ -14067,10 +14687,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14067
14687
|
d.data.type === 'Service Router Policy' &&
|
|
14068
14688
|
!d.children &&
|
|
14069
14689
|
!d._children) {
|
|
14690
|
+
d.data.clickProcess = 'Completed';
|
|
14070
14691
|
const arr = await this.treeNodeProcessor.processServiceEdgeRouterPoliciesForNodeClick(d, this.networkGraph, this.service_router_policies, this.uniqId, this.zitiService);
|
|
14071
14692
|
this.uniqId = arr[1];
|
|
14072
14693
|
this.networkGraph = arr[0];
|
|
14073
|
-
d.data.clickProcess = 'Completed';
|
|
14074
14694
|
this.networkGraph.children.find((nd) => {
|
|
14075
14695
|
collapseFew(nd, this.openNodes);
|
|
14076
14696
|
});
|
|
@@ -14099,13 +14719,17 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14099
14719
|
this.nodeEnter
|
|
14100
14720
|
.append('foreignObject')
|
|
14101
14721
|
.attr('height', '50')
|
|
14102
|
-
.attr('width',
|
|
14103
|
-
.
|
|
14104
|
-
|
|
14722
|
+
.attr('width', function (d) {
|
|
14723
|
+
return d && d.data && d.data.name.length >= 20 ? '550' : '330';
|
|
14724
|
+
})
|
|
14725
|
+
.attr('x', '20')
|
|
14726
|
+
.attr('y', function (d) {
|
|
14727
|
+
return d && d.data && d.data.rootNode === 'Yes' ? '-5' : '-40';
|
|
14728
|
+
})
|
|
14105
14729
|
.append('xhtml:body')
|
|
14106
14730
|
.style('background', 'transparent')
|
|
14107
14731
|
.html(function (d) {
|
|
14108
|
-
return `<div class="text-container"
|
|
14732
|
+
return `<div class="node-text-container"><span>${d.data.name}</span></div>`;
|
|
14109
14733
|
});
|
|
14110
14734
|
this.nodeUpdate = this.nodeEnter.merge(this.node);
|
|
14111
14735
|
this.nodeUpdate
|
|
@@ -14199,19 +14823,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14199
14823
|
}
|
|
14200
14824
|
});
|
|
14201
14825
|
}
|
|
14202
|
-
function collapseDepth(d, id) {
|
|
14203
|
-
// unused
|
|
14204
|
-
if (d.children) {
|
|
14205
|
-
if (d.data.id !== id) {
|
|
14206
|
-
d._children = d.children;
|
|
14207
|
-
d._children.forEach(collapseDepth);
|
|
14208
|
-
d.children = null;
|
|
14209
|
-
}
|
|
14210
|
-
else {
|
|
14211
|
-
d.children.forEach(collapseDepth);
|
|
14212
|
-
}
|
|
14213
|
-
}
|
|
14214
|
-
}
|
|
14215
14826
|
function collapseFew(_nd, openNodes) {
|
|
14216
14827
|
if (_nd.data.id === '#all') {
|
|
14217
14828
|
return;
|
|
@@ -14250,54 +14861,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14250
14861
|
this.svg.transition().duration(750).attr('transform', trans);
|
|
14251
14862
|
}
|
|
14252
14863
|
}
|
|
14253
|
-
removeGraphTooltip() {
|
|
14254
|
-
if (this.graphtooltip) {
|
|
14255
|
-
this.graphtooltip.style('display', 'none');
|
|
14256
|
-
}
|
|
14257
|
-
}
|
|
14258
|
-
drawGraphTooltip(event, d) {
|
|
14259
|
-
document.getElementById('tooltip').innerHTML = this.readGraphKeyValues(d);
|
|
14260
|
-
this.graphtooltip.style('display', 'block');
|
|
14261
|
-
const x = event.pageX - 400 + 'px';
|
|
14262
|
-
const y = event.pageY + 10 + 'px';
|
|
14263
|
-
this.graphtooltip.style('left', x);
|
|
14264
|
-
this.graphtooltip.style('top', y);
|
|
14265
|
-
}
|
|
14266
|
-
readGraphKeyValues(d) {
|
|
14267
|
-
let info = '<span style="font-size:14px;font-family:Open Sans; font-weight: 600; font-color: var(--tableText);">';
|
|
14268
|
-
const keys = Object.keys(d.data);
|
|
14269
|
-
keys.forEach((k) => {
|
|
14270
|
-
if (k === 'value' ||
|
|
14271
|
-
k === 'group' ||
|
|
14272
|
-
k === 'index' ||
|
|
14273
|
-
k === 'parent' ||
|
|
14274
|
-
k === 'depth' ||
|
|
14275
|
-
k === 'x' ||
|
|
14276
|
-
k === 'y' ||
|
|
14277
|
-
k === 'id' ||
|
|
14278
|
-
k === 'x0' ||
|
|
14279
|
-
k === 'y0' ||
|
|
14280
|
-
k === 'vy' ||
|
|
14281
|
-
k === 'vx') {
|
|
14282
|
-
// continue;
|
|
14283
|
-
}
|
|
14284
|
-
else if (k === 'children') {
|
|
14285
|
-
const kVal = d.data[k];
|
|
14286
|
-
info = info + ' ' + k + ' : ' + kVal.length + '<br>';
|
|
14287
|
-
}
|
|
14288
|
-
else {
|
|
14289
|
-
if (this.isAnObject(d.data[k])) {
|
|
14290
|
-
const kVal = d.data[k];
|
|
14291
|
-
info = info + ' ' + k + ' : ' + kVal.name + '<br>';
|
|
14292
|
-
}
|
|
14293
|
-
else {
|
|
14294
|
-
const vo = d.data[k];
|
|
14295
|
-
info = info + ' ' + k + ' : ' + (vo !== null || vo !== '' ? d.data[k] : 'N/A') + '<br>';
|
|
14296
|
-
}
|
|
14297
|
-
}
|
|
14298
|
-
});
|
|
14299
|
-
return info + '</span>';
|
|
14300
|
-
}
|
|
14301
14864
|
setColor(d) {
|
|
14302
14865
|
if (d.status === 'Error' && d.group === 3) {
|
|
14303
14866
|
return 'red';
|
|
@@ -14352,22 +14915,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14352
14915
|
return 'blue';
|
|
14353
14916
|
}
|
|
14354
14917
|
}
|
|
14355
|
-
nodeshape(d) {
|
|
14356
|
-
if (d.group === '3') {
|
|
14357
|
-
return 'rect';
|
|
14358
|
-
}
|
|
14359
|
-
else {
|
|
14360
|
-
return 'circle';
|
|
14361
|
-
}
|
|
14362
|
-
}
|
|
14363
|
-
linkWidth(d) {
|
|
14364
|
-
if (d.group === 1) {
|
|
14365
|
-
return 10;
|
|
14366
|
-
}
|
|
14367
|
-
else {
|
|
14368
|
-
return 2;
|
|
14369
|
-
}
|
|
14370
|
-
}
|
|
14371
14918
|
dragstarted(event, d) {
|
|
14372
14919
|
if (!event.active) {
|
|
14373
14920
|
this.simulation.alphaTarget(0.3).restart();
|
|
@@ -14402,10 +14949,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14402
14949
|
document.getElementById('tooltip').innerHTML = this.readTreeKeyValues(event, s);
|
|
14403
14950
|
}
|
|
14404
14951
|
readTreeKeyValues(event, d) {
|
|
14405
|
-
|
|
14952
|
+
const startIndex = d.data.name.indexOf('(');
|
|
14953
|
+
const finIndex = d.data.name.indexOf(')');
|
|
14954
|
+
const countStr = startIndex > 0 ? d.data.name.substring(startIndex + 1, finIndex) : 0;
|
|
14955
|
+
let info = `<div class='tool-tip-container'>`;
|
|
14406
14956
|
const keys = Object.keys(d.data); // mp.keys();
|
|
14407
14957
|
keys.forEach(function (k) {
|
|
14408
|
-
if (k === '
|
|
14958
|
+
if (k === 'firstChild' ||
|
|
14959
|
+
k === 'protocol' ||
|
|
14409
14960
|
k === 'contextMenu' ||
|
|
14410
14961
|
k === 'uuid' ||
|
|
14411
14962
|
k === 'lastId' ||
|
|
@@ -14422,21 +14973,34 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
|
|
|
14422
14973
|
k === 'y0') {
|
|
14423
14974
|
// continue;
|
|
14424
14975
|
}
|
|
14976
|
+
else if (d[k] instanceof Array) {
|
|
14977
|
+
info =
|
|
14978
|
+
info +
|
|
14979
|
+
'<div class="prop-row"><div class="prop-name">' +
|
|
14980
|
+
k +
|
|
14981
|
+
':</div><div class="prop-val">' +
|
|
14982
|
+
d[k].join('<br> ') +
|
|
14983
|
+
'</div></div>';
|
|
14984
|
+
}
|
|
14425
14985
|
else {
|
|
14426
|
-
|
|
14986
|
+
const propVal = d.data[k] || '';
|
|
14987
|
+
info = info + '<div class="prop-row"><div class="prop-name">' + k + ':</div><div class="prop-val">' + propVal + '</div></div>';
|
|
14427
14988
|
}
|
|
14428
14989
|
});
|
|
14429
|
-
|
|
14990
|
+
if (d.data.firstChild && d.data.firstChild === 'Yes' && countStr > this.maxObjectsPerNode - 1) {
|
|
14991
|
+
info = info + '<span class="tooltip-help-text">Note: expand node disabled. Use search filter.</span>';
|
|
14992
|
+
}
|
|
14993
|
+
else if (d.data.firstChild && d.data.firstChild === 'Yes' && countStr < this.maxObjectsPerNode) {
|
|
14994
|
+
info = info + '<span class="tooltip-help-text">Note: click to expand child nodes </span>';
|
|
14995
|
+
}
|
|
14996
|
+
return info + '</div>';
|
|
14430
14997
|
}
|
|
14431
|
-
hide() { }
|
|
14432
|
-
toggleModalSize() { }
|
|
14433
|
-
;
|
|
14434
14998
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i1$1.HttpClient }, { token: LoggerService }, { token: TreeNodeProcessor }, { token: NetworkVisualizerHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14435
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NetworkVisualizerComponent, selector: "app-network-visualizer", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:1px;padding-left:3px;padding-right:3px;top:0}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0;padding-top:1px;padding-left:3px;padding-right:3px;background:#f5e9f2;background-image:linear-gradient(#ecd3e6 2px,transparent 0),linear-gradient(90deg,#ecd3e6 2px,transparent 0),linear-gradient(#ecd3e6 1px,transparent 0),linear-gradient(90deg,#ecd3e6 1px,transparent 0);background-size:40px 40px,40px 40px,10px 10px,10px 10px}.css-header{height:50px;font-size:25px;font-weight:600;margin:8px 0 0 2px;font-family:Russo One;color:#0027ab;font-size:30px;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:230px;flex-shrink:0;border-radius:27px;height:51px;margin-top:20px;margin-left:20px;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);color:var(--tableText);padding-left:20px}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 18px;background-repeat:no-repeat;background-size:18px;padding-right:38px}.no-results-warning{bottom:-20px;left:20px;font-size:15px;color:var(--tableText);padding-left:20px;padding-top:5px}.resource-type-error{border-width:3px;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:50px}.nf-net-vis-filter-container{max-width:300px;margin-top:20px;margin-left:10px;flex:1 0 auto}.table-filter-container{max-width:300px;margin-top:0;margin-left:1px;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:2px;top:2px;width:20px;height:20px;font-size:25px;color:var(--tableText);z-index:99999999}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);border:2px #d3d3d3!important;text-align:center;border:2px;border-color:#d3d3d3;height:25px;top:2px;color:#fff;padding-right:5px;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:5px;top:-33px;width:25px;height:25px;font-size:15px;color:#fff;z-index:99999999}.copydatatable{width:135px;height:17px;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:5px;background:#fff;border:0px solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:50px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px;padding-right:35px}.nf-topology-select-container{max-width:400px;margin-top:20px;margin-left:20px;flex:1 0 auto}.nf-topology-select-input{height:45px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px}input:focus,textarea:focus,select:focus{box-shadow:0 20px 23px 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-filter-input{background:var(--glass)!important;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.nf-topology-zoom-container{display:flex;margin-left:20px;margin-top:20px;flex:1 0 auto}.nf-topology-zoom-button.minus{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 6px 10px 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:10px}.nf-topology-zoom-button{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.placeholder{display:flex;align-items:center;justify-content:center;height:800px}.topotip{display:none;position:fixed;background:var(--navigation);border:0px;border-radius:12px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:10px;font-size:17px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.topotip{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.nodes{cursor:pointer;box-shadow:0 30px 43px 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-150px}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:32px;margin-left:10px;flex:1 0 auto}.changeView .changeViewLabel{margin-top:3px;margin-left:5px}.node circle{fill:#fff;stroke:#07397d;stroke-width:14px;box-shadow:0 20px 23px 0 var(--shadow)}.node text{font:27px sans-serif;cursor:pointer}.text-container{cursor:pointer}.link{fill:none;stroke:var(--table);stroke-width:5px;color:#fff}.nf-topology-legend{width:210px;border-radius:12px;margin-top:10px;margin-right:20px;position:fixed;top:0;right:0;background:var(--navigation);display:inline-block;box-shadow:0 20px 23px 0 var(--shadow);padding:5px 12px 7px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.legend-item{width:100%;height:100%;display:inline-block}.legend-circle{height:12px;width:12px;border-radius:15px;display:inline-block;margin-top:7px}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:15px;font-weight:600;color:var(--tableText);padding-left:7px;padding-bottom:4px}.reset-button{height:50px;width:50px;border-radius:50px;margin-right:10px;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:.3s}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:16px 10px;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:1px}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:1px black solid}.contextmenu_text{position:fixed;background:var(--navigation);border:1px;border-radius:5px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:5px;font-size:10px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:11px;box-shadow:2px 2px 2px #90908d;padding:2px;border-radius:12px;border:1px solid #c6c6c6;max-width:400px}.menuItems{display:block;color:#555;text-decoration:none;padding:6px 8px 6px 30px;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:4px}.container{margin:0 auto;padding:0 24px;max-width:960px}.context-menu__link{display:block;padding:4px 12px;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:250px;width:auto;height:360px;top:100px;border-bottom-left-radius:13px;border-bottom-right-radius:13px;display:none;background:#fff;border:2px solid gray!important;position:absolute!important}.table-filter-input{height:30px;width:100%;top:40px;border-radius:1px;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 20px 23px 0 var(--shadow);padding-top:3px;padding-left:2px;padding-right:2px}#topoDataTable{float:down;min-width:250px;width:auto;height:300px;top:55px;border-radius:10px;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:16px;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:300px}tr{width:auto;padding:5px}th{width:auto;font-family:sans-serif;font-size:16px;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:2px;border:1px solid #ccc;text-align:center}.context-menu{border-radius:12px;background:var(--navigation);width:200px;box-shadow:0 20px 23px 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0}.context-menu .menu-options .menu-option{font-weight:700;font-size:16px;line-height:36px;color:var(--tableText);padding:1px 4px 1px 20px;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:5px;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:4px}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:4px}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.endpoint circle{stroke:#0273fb!important;stroke-width:12px}.node.service circle{stroke:#08dc5a!important;stroke-width:12px}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:12px}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:12px}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:12px}.text-container{color:var(--tableText);font-size:24px;font-weight:700;margin-left:20px;margin-top:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:14px}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:14px}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:2px}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}\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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
14999
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NetworkVisualizerComponent, selector: "app-network-visualizer", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"nwSearchChange($event)\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n\n <div class=\"legend-item\">\n <div class=\"node-expand-help\"></div>\n <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n <div class=\"legend-icon-pointer\"></div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:1px;padding-left:3px;padding-right:3px;top:0}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0;padding-top:1px;padding-left:3px;padding-right:3px;background:#ebefff;background-image:linear-gradient(#d1dcff 2px,transparent 0),linear-gradient(90deg,#d1dcff 2px,transparent 0),linear-gradient(#d1dcff 1px,transparent 0),linear-gradient(90deg,#d1dcff 1px,transparent 0);background-size:40px 40px,40px 40px,10px 10px,10px 10px}.css-header{height:50px;font-size:25px;font-weight:600;margin:8px 0 0 10px;font-family:Russo One;color:#0027ab;font-size:30px;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:270px;flex-shrink:0;border-radius:27px;height:51px;margin-left:5px;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);color:var(--tableText);padding-left:20px}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 18px;background-repeat:no-repeat;background-size:18px;padding-right:38px}.no-results-warning{left:440px;font-size:15px;color:var(--tableText);padding-left:20px;padding-top:0;height:-moz-fit-content;height:fit-content;top:1px}.resource-type-error{border-width:3px;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:60px}.nf-net-vis-filter-container{max-width:490px;margin-top:0;margin-left:10px;flex:1 0 auto}.table-filter-container{max-width:300px;margin-top:0;margin-left:1px;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:15px;top:5px;width:20px;height:20px;font-size:18px;font-weight:600;color:var(--formBase);z-index:99999999}#ClearSearchFilter:hover{filter:brightness(90%)}#ClearSearchFilter:active{transform:translateY(1px);filter:brightness(80%)}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);border:2px #d3d3d3!important;text-align:center;border:2px;border-color:#d3d3d3;height:25px;top:2px;color:#fff;padding-right:5px;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:5px;top:-33px;width:25px;height:25px;font-size:15px;color:#fff;z-index:99999999}.copydatatable{width:135px;height:17px;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:5px;background:#fff;border:0px solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:50px;width:485px;border-radius:25px;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:10px;padding-right:15px}.nf-topology-select-container{max-width:400px;margin-top:20px;margin-left:20px;flex:1 0 auto}.nf-topology-select-input{height:45px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px}input:focus,textarea:focus,select:focus{box-shadow:0 20px 23px 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-filter-input{background:var(--visualizerBackground)!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px)}}.nf-topology-zoom-container{display:flex;margin-left:10px;flex:1 0 auto}.nf-topology-zoom-button.minus{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 6px 10px 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:10px}.nf-topology-zoom-button{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.placeholder{display:flex;align-items:center;justify-content:center;height:800px}.topotip{display:none;position:fixed;background:var(--navigation);border:0px;border-radius:12px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;font-size:15px;font-weight:600;color:var(--tableText);z-index:2000;opacity:1;max-width:400px;overflow:hidden}.nodes{cursor:pointer;box-shadow:0 30px 43px 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-150px}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:32px;margin-left:10px;flex:1 0 auto}.changeView .changeViewLabel{margin-top:3px;margin-left:5px}.node circle{fill:#fff;stroke:#07397d;stroke-width:14px;box-shadow:0 20px 23px 0 var(--shadow)}.node text{font:27px sans-serif;cursor:pointer}.node-text-container{color:var(--tableText);font-size:24px;font-weight:600;margin-left:2px;margin-top:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.link{fill:none;stroke:var(--table);stroke-width:5px;color:#fff}.nf-topology-legend{width:230px;border-radius:12px;margin-top:10px;margin-right:10px;position:absolute;top:0;right:0;background:#ffffff80!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px);border-color:var(--navigation);border-style:solid;border-width:2px;display:inline-block;box-shadow:0 20px 23px 0 var(--shadow);padding:5px 5px 7px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.legend-item{width:100%;height:100%;display:inline-block;position:relative}.legend-itemA{width:100%;height:100%;margin-left:-3px;display:inline-block}.legend-circle{height:12px;width:12px;border-radius:15px;display:inline-block;margin-top:7px}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:15px;font-weight:600;color:var(--tableText);padding-left:7px;padding-bottom:4px}.legend-icon-text{display:inline-block;font-size:14px;font-weight:600;color:var(--tableText);padding-left:22px;padding-bottom:4px}.legend-icon-text.legend-associated-nodes{padding-left:20px}.legend-icon-pointer{background-size:16px 16px;background-image:url(/assets/svgs/cursor-pointer.svg);position:absolute;z-index:999999;width:20px;height:20px;top:10px;left:2px}.reset-button{height:50px;width:50px;border-radius:50px;margin-right:10px;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:.3s}.node-expand-help{border-radius:20px;border-width:4px;border-color:#08dc5a!important;border-style:solid;box-shadow:0 20px 23px 0 var(--shadow);width:16px;height:16px;position:absolute;background-color:brown;margin-left:-2px;top:2px}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:16px 10px;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:1px}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:1px black solid}.contextmenu_text{position:fixed;background:var(--navigation);border:1px;border-radius:5px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:5px;font-size:10px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:11px;box-shadow:2px 2px 2px #90908d;padding:2px;border-radius:12px;border:1px solid #c6c6c6;max-width:400px}.menuItems{display:block;color:#555;text-decoration:none;padding:6px 8px 6px 30px;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:4px}.container{margin:0 auto;padding:0 24px;max-width:960px}.context-menu__link{display:block;padding:4px 12px;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:250px;width:auto;height:360px;top:100px;border-bottom-left-radius:13px;border-bottom-right-radius:13px;display:none;background:#fff;border:2px solid gray!important;position:absolute!important}.table-filter-input{height:30px;width:100%;top:40px;border-radius:1px;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 20px 23px 0 var(--shadow);padding-top:3px;padding-left:2px;padding-right:2px}#topoDataTable{float:down;min-width:250px;width:auto;height:300px;top:55px;border-radius:10px;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:16px;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:300px}tr{width:auto;padding:5px}th{width:auto;font-family:sans-serif;font-size:16px;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:2px;border:1px solid #ccc;text-align:center}.context-menu{border-radius:12px;background:var(--navigation);width:200px;box-shadow:0 20px 23px 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0}.context-menu .menu-options .menu-option{font-weight:700;font-size:16px;line-height:36px;color:var(--tableText);padding:1px 4px 1px 20px;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:5px;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:4px}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:4px}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.endpoint circle{stroke:#0273fb!important;stroke-width:12px}.node.service circle{stroke:#08dc5a!important;stroke-width:12px}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:12px}.node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:12px}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:12px}.text-container{color:var(--tableText);font-size:24px;font-weight:700;margin-left:20px;margin-top:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:14px}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:14px}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:2px}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}.tool-tip-container{font-size:14px;font-family:Open Sans;font-weight:600;font-color:var(--tableText)}.tool-tip-container .prop-row{display:grid;grid-template-columns:1fr 3fr;grid-gap:10px;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:25px;align-items:center;padding:0 10px}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal;font-weight:400}.tool-tip-container .tooltip-help-text{font-size:12px;padding-left:10px;padding-right:10px;display:flex;height:22px;align-items:center}\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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
14436
15000
|
}
|
|
14437
15001
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerComponent, decorators: [{
|
|
14438
15002
|
type: Component,
|
|
14439
|
-
args: [{ selector: 'app-network-visualizer', encapsulation: ViewEncapsulation.None, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:1px;padding-left:3px;padding-right:3px;top:0}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0;padding-top:1px;padding-left:3px;padding-right:3px;background:#f5e9f2;background-image:linear-gradient(#ecd3e6 2px,transparent 0),linear-gradient(90deg,#ecd3e6 2px,transparent 0),linear-gradient(#ecd3e6 1px,transparent 0),linear-gradient(90deg,#ecd3e6 1px,transparent 0);background-size:40px 40px,40px 40px,10px 10px,10px 10px}.css-header{height:50px;font-size:25px;font-weight:600;margin:8px 0 0 2px;font-family:Russo One;color:#0027ab;font-size:30px;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:230px;flex-shrink:0;border-radius:27px;height:51px;margin-top:20px;margin-left:20px;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);color:var(--tableText);padding-left:20px}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 18px;background-repeat:no-repeat;background-size:18px;padding-right:38px}.no-results-warning{bottom:-20px;left:20px;font-size:15px;color:var(--tableText);padding-left:20px;padding-top:5px}.resource-type-error{border-width:3px;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:50px}.nf-net-vis-filter-container{max-width:300px;margin-top:20px;margin-left:10px;flex:1 0 auto}.table-filter-container{max-width:300px;margin-top:0;margin-left:1px;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:2px;top:2px;width:20px;height:20px;font-size:25px;color:var(--tableText);z-index:99999999}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);border:2px #d3d3d3!important;text-align:center;border:2px;border-color:#d3d3d3;height:25px;top:2px;color:#fff;padding-right:5px;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:5px;top:-33px;width:25px;height:25px;font-size:15px;color:#fff;z-index:99999999}.copydatatable{width:135px;height:17px;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:5px;background:#fff;border:0px solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:50px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px;padding-right:35px}.nf-topology-select-container{max-width:400px;margin-top:20px;margin-left:20px;flex:1 0 auto}.nf-topology-select-input{height:45px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px}input:focus,textarea:focus,select:focus{box-shadow:0 20px 23px 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-filter-input{background:var(--glass)!important;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.nf-topology-zoom-container{display:flex;margin-left:20px;margin-top:20px;flex:1 0 auto}.nf-topology-zoom-button.minus{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 6px 10px 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:10px}.nf-topology-zoom-button{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.placeholder{display:flex;align-items:center;justify-content:center;height:800px}.topotip{display:none;position:fixed;background:var(--navigation);border:0px;border-radius:12px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:10px;font-size:17px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.topotip{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.nodes{cursor:pointer;box-shadow:0 30px 43px 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-150px}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:32px;margin-left:10px;flex:1 0 auto}.changeView .changeViewLabel{margin-top:3px;margin-left:5px}.node circle{fill:#fff;stroke:#07397d;stroke-width:14px;box-shadow:0 20px 23px 0 var(--shadow)}.node text{font:27px sans-serif;cursor:pointer}.text-container{cursor:pointer}.link{fill:none;stroke:var(--table);stroke-width:5px;color:#fff}.nf-topology-legend{width:210px;border-radius:12px;margin-top:10px;margin-right:20px;position:fixed;top:0;right:0;background:var(--navigation);display:inline-block;box-shadow:0 20px 23px 0 var(--shadow);padding:5px 12px 7px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.legend-item{width:100%;height:100%;display:inline-block}.legend-circle{height:12px;width:12px;border-radius:15px;display:inline-block;margin-top:7px}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:15px;font-weight:600;color:var(--tableText);padding-left:7px;padding-bottom:4px}.reset-button{height:50px;width:50px;border-radius:50px;margin-right:10px;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:.3s}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:16px 10px;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:1px}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:1px black solid}.contextmenu_text{position:fixed;background:var(--navigation);border:1px;border-radius:5px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:5px;font-size:10px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:11px;box-shadow:2px 2px 2px #90908d;padding:2px;border-radius:12px;border:1px solid #c6c6c6;max-width:400px}.menuItems{display:block;color:#555;text-decoration:none;padding:6px 8px 6px 30px;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:4px}.container{margin:0 auto;padding:0 24px;max-width:960px}.context-menu__link{display:block;padding:4px 12px;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:250px;width:auto;height:360px;top:100px;border-bottom-left-radius:13px;border-bottom-right-radius:13px;display:none;background:#fff;border:2px solid gray!important;position:absolute!important}.table-filter-input{height:30px;width:100%;top:40px;border-radius:1px;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 20px 23px 0 var(--shadow);padding-top:3px;padding-left:2px;padding-right:2px}#topoDataTable{float:down;min-width:250px;width:auto;height:300px;top:55px;border-radius:10px;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:16px;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:300px}tr{width:auto;padding:5px}th{width:auto;font-family:sans-serif;font-size:16px;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:2px;border:1px solid #ccc;text-align:center}.context-menu{border-radius:12px;background:var(--navigation);width:200px;box-shadow:0 20px 23px 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0}.context-menu .menu-options .menu-option{font-weight:700;font-size:16px;line-height:36px;color:var(--tableText);padding:1px 4px 1px 20px;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:5px;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:4px}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:4px}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.endpoint circle{stroke:#0273fb!important;stroke-width:12px}.node.service circle{stroke:#08dc5a!important;stroke-width:12px}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:12px}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:12px}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:12px}.text-container{color:var(--tableText);font-size:24px;font-weight:700;margin-left:20px;margin-top:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:14px}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:14px}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:2px}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}\n"] }]
|
|
15003
|
+
args: [{ selector: 'app-network-visualizer', encapsulation: ViewEncapsulation.None, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"nwSearchChange($event)\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n\n <div class=\"legend-item\">\n <div class=\"node-expand-help\"></div>\n <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n <div class=\"legend-icon-pointer\"></div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:1px;padding-left:3px;padding-right:3px;top:0}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0;padding-top:1px;padding-left:3px;padding-right:3px;background:#ebefff;background-image:linear-gradient(#d1dcff 2px,transparent 0),linear-gradient(90deg,#d1dcff 2px,transparent 0),linear-gradient(#d1dcff 1px,transparent 0),linear-gradient(90deg,#d1dcff 1px,transparent 0);background-size:40px 40px,40px 40px,10px 10px,10px 10px}.css-header{height:50px;font-size:25px;font-weight:600;margin:8px 0 0 10px;font-family:Russo One;color:#0027ab;font-size:30px;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:270px;flex-shrink:0;border-radius:27px;height:51px;margin-left:5px;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);color:var(--tableText);padding-left:20px}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 18px;background-repeat:no-repeat;background-size:18px;padding-right:38px}.no-results-warning{left:440px;font-size:15px;color:var(--tableText);padding-left:20px;padding-top:0;height:-moz-fit-content;height:fit-content;top:1px}.resource-type-error{border-width:3px;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:60px}.nf-net-vis-filter-container{max-width:490px;margin-top:0;margin-left:10px;flex:1 0 auto}.table-filter-container{max-width:300px;margin-top:0;margin-left:1px;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:15px;top:5px;width:20px;height:20px;font-size:18px;font-weight:600;color:var(--formBase);z-index:99999999}#ClearSearchFilter:hover{filter:brightness(90%)}#ClearSearchFilter:active{transform:translateY(1px);filter:brightness(80%)}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);border:2px #d3d3d3!important;text-align:center;border:2px;border-color:#d3d3d3;height:25px;top:2px;color:#fff;padding-right:5px;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:5px;top:-33px;width:25px;height:25px;font-size:15px;color:#fff;z-index:99999999}.copydatatable{width:135px;height:17px;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:5px;background:#fff;border:0px solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:50px;width:485px;border-radius:25px;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:10px;padding-right:15px}.nf-topology-select-container{max-width:400px;margin-top:20px;margin-left:20px;flex:1 0 auto}.nf-topology-select-input{height:45px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px}input:focus,textarea:focus,select:focus{box-shadow:0 20px 23px 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-filter-input{background:var(--visualizerBackground)!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px)}}.nf-topology-zoom-container{display:flex;margin-left:10px;flex:1 0 auto}.nf-topology-zoom-button.minus{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 6px 10px 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:10px}.nf-topology-zoom-button{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.placeholder{display:flex;align-items:center;justify-content:center;height:800px}.topotip{display:none;position:fixed;background:var(--navigation);border:0px;border-radius:12px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;font-size:15px;font-weight:600;color:var(--tableText);z-index:2000;opacity:1;max-width:400px;overflow:hidden}.nodes{cursor:pointer;box-shadow:0 30px 43px 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-150px}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:32px;margin-left:10px;flex:1 0 auto}.changeView .changeViewLabel{margin-top:3px;margin-left:5px}.node circle{fill:#fff;stroke:#07397d;stroke-width:14px;box-shadow:0 20px 23px 0 var(--shadow)}.node text{font:27px sans-serif;cursor:pointer}.node-text-container{color:var(--tableText);font-size:24px;font-weight:600;margin-left:2px;margin-top:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.link{fill:none;stroke:var(--table);stroke-width:5px;color:#fff}.nf-topology-legend{width:230px;border-radius:12px;margin-top:10px;margin-right:10px;position:absolute;top:0;right:0;background:#ffffff80!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px);border-color:var(--navigation);border-style:solid;border-width:2px;display:inline-block;box-shadow:0 20px 23px 0 var(--shadow);padding:5px 5px 7px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.legend-item{width:100%;height:100%;display:inline-block;position:relative}.legend-itemA{width:100%;height:100%;margin-left:-3px;display:inline-block}.legend-circle{height:12px;width:12px;border-radius:15px;display:inline-block;margin-top:7px}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:15px;font-weight:600;color:var(--tableText);padding-left:7px;padding-bottom:4px}.legend-icon-text{display:inline-block;font-size:14px;font-weight:600;color:var(--tableText);padding-left:22px;padding-bottom:4px}.legend-icon-text.legend-associated-nodes{padding-left:20px}.legend-icon-pointer{background-size:16px 16px;background-image:url(/assets/svgs/cursor-pointer.svg);position:absolute;z-index:999999;width:20px;height:20px;top:10px;left:2px}.reset-button{height:50px;width:50px;border-radius:50px;margin-right:10px;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:.3s}.node-expand-help{border-radius:20px;border-width:4px;border-color:#08dc5a!important;border-style:solid;box-shadow:0 20px 23px 0 var(--shadow);width:16px;height:16px;position:absolute;background-color:brown;margin-left:-2px;top:2px}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:16px 10px;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:1px}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:1px black solid}.contextmenu_text{position:fixed;background:var(--navigation);border:1px;border-radius:5px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:5px;font-size:10px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:11px;box-shadow:2px 2px 2px #90908d;padding:2px;border-radius:12px;border:1px solid #c6c6c6;max-width:400px}.menuItems{display:block;color:#555;text-decoration:none;padding:6px 8px 6px 30px;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:4px}.container{margin:0 auto;padding:0 24px;max-width:960px}.context-menu__link{display:block;padding:4px 12px;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:250px;width:auto;height:360px;top:100px;border-bottom-left-radius:13px;border-bottom-right-radius:13px;display:none;background:#fff;border:2px solid gray!important;position:absolute!important}.table-filter-input{height:30px;width:100%;top:40px;border-radius:1px;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 20px 23px 0 var(--shadow);padding-top:3px;padding-left:2px;padding-right:2px}#topoDataTable{float:down;min-width:250px;width:auto;height:300px;top:55px;border-radius:10px;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:16px;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:300px}tr{width:auto;padding:5px}th{width:auto;font-family:sans-serif;font-size:16px;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:2px;border:1px solid #ccc;text-align:center}.context-menu{border-radius:12px;background:var(--navigation);width:200px;box-shadow:0 20px 23px 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0}.context-menu .menu-options .menu-option{font-weight:700;font-size:16px;line-height:36px;color:var(--tableText);padding:1px 4px 1px 20px;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:5px;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:4px}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:4px}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.endpoint circle{stroke:#0273fb!important;stroke-width:12px}.node.service circle{stroke:#08dc5a!important;stroke-width:12px}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:12px}.node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:12px}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:12px}.text-container{color:var(--tableText);font-size:24px;font-weight:700;margin-left:20px;margin-top:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:14px}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:14px}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:2px}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}.tool-tip-container{font-size:14px;font-family:Open Sans;font-weight:600;font-color:var(--tableText)}.tool-tip-container .prop-row{display:grid;grid-template-columns:1fr 3fr;grid-gap:10px;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:25px;align-items:center;padding:0 10px}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal;font-weight:400}.tool-tip-container .tooltip-help-text{font-size:12px;padding-left:10px;padding-right:10px;display:flex;height:22px;align-items:center}\n"] }]
|
|
14440
15004
|
}], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
|
|
14441
15005
|
type: Inject,
|
|
14442
15006
|
args: [SETTINGS_SERVICE]
|
|
@@ -14446,8 +15010,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
14446
15010
|
}] }, { type: i1$1.HttpClient }, { type: LoggerService }, { type: TreeNodeProcessor }, { type: NetworkVisualizerHelper }]; } });
|
|
14447
15011
|
|
|
14448
15012
|
class EdgeRouterFormComponent extends ProjectableForm {
|
|
14449
|
-
constructor(settingsService, svc, zitiService, growlerService, extService, router, route) {
|
|
14450
|
-
super(growlerService, extService, zitiService, router, route);
|
|
15013
|
+
constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
|
|
15014
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
14451
15015
|
this.settingsService = settingsService;
|
|
14452
15016
|
this.svc = svc;
|
|
14453
15017
|
this.zitiService = zitiService;
|
|
@@ -14609,13 +15173,13 @@ class EdgeRouterFormComponent extends ProjectableForm {
|
|
|
14609
15173
|
}
|
|
14610
15174
|
clear() {
|
|
14611
15175
|
}
|
|
14612
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: EdgeRouterFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: EDGE_ROUTER_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15176
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: EdgeRouterFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: EDGE_ROUTER_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14613
15177
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EdgeRouterFormComponent, selector: "lib-edge-router-form", inputs: { formData: "formData", edgeRouterRoleAttributes: "edgeRouterRoleAttributes" }, outputs: { close: "close" }, providers: [
|
|
14614
15178
|
{
|
|
14615
15179
|
provide: MatDialogRef,
|
|
14616
15180
|
useValue: {}
|
|
14617
15181
|
}
|
|
14618
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router: ' : 'Create New Edge Router'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"edge-router-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Edge Router attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Edge Routers to form a group of Edge Routers.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"edgeRouterRoleAttributes\"\n [placeholder]=\"'Add attributes to group Edge Routers'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div *ngIf=\"showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'TUNNELER'\"\n [title2]=\"'TRAVERSAL'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">TUNNELER ENABLED</div>\n <div\n (click)=\"toggleTunnelerEnabled()\"\n [ngClass]=\"{ on: formData.isTunnelerEnabled }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isTunnelerEnabled\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isTunnelerEnabled\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">ALLOW TRAVERSAL</div>\n <div\n (click)=\"toggleNoTraversal()\"\n [ngClass]=\"{ on: !formData.noTraversal }\"\n class=\"toggle\"\n >\n <span [hidden]=\"formData.noTraversal\" class=\"on-label\">YES</span>\n <span [hidden]=\"!formData.noTraversal\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n <lib-form-field-container\n *ngIf=\"hasEnrolmentToken && !extService['hideZitiRegistration']\"\n [showHeader]=\"false\"\n >\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"formData.enrollmentJwt\"\n [token]=\"formData.enrollmentToken\"\n [expiration]=\"formData.enrollmentExpiresAt\"\n (doRefresh)=\"refreshEdgeRouter()\"\n [type]=\"'router'\"\n ></lib-qr-code>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Edge Router is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentities.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"'OPTIONAL'\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [".edge-router-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.form-field-dropdown{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'Stroke_Color' style%3D'enable-background%3Anew 0 0 20.2 10.8%3B' version%3D'1.1' viewBox%3D'0 0 20.2 10.8' 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 %23668291%3B %7D%3C%2Fstyle%3E %3Cg%3E%09%3Cpath class%3D'st0' d%3D'M19.8%2C1.7c0%2C0.4-0.1%2C0.7-0.4%2C0.9l-8.5%2C7.3c-0.5%2C0.4-1.2%2C0.4-1.6%2C0L0.7%2C2.7C0.2%2C2.2%2C0.2%2C1.5%2C0.6%2C0.9%09%09c0.5-0.5%2C1.2-0.6%2C1.8-0.1l7.7%2C6.6l7.7-6.6c0.5-0.5%2C1.3-0.4%2C1.8%2C0.1C19.7%2C1.2%2C19.8%2C1.5%2C19.8%2C1.7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-position:center right 10px;background-repeat:no-repeat;background-size:18px;padding-right:28px}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}\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: 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"] }, { 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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["hideOption", "label", "clickable", "isLoading", "allNames", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { 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: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
|
|
15182
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router: ' : 'Create New Edge Router'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"edge-router-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Edge Router attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Edge Routers to form a group of Edge Routers.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"edgeRouterRoleAttributes\"\n [placeholder]=\"'Add attributes to group Edge Routers'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <ng-content select=\"[slot=column-1-slot-1]\"></ng-content>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div *ngIf=\"showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'TUNNELER'\"\n [title2]=\"'TRAVERSAL'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">TUNNELER ENABLED</div>\n <div\n (click)=\"toggleTunnelerEnabled()\"\n [ngClass]=\"{ on: formData.isTunnelerEnabled }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isTunnelerEnabled\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isTunnelerEnabled\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">ALLOW TRAVERSAL</div>\n <div\n (click)=\"toggleNoTraversal()\"\n [ngClass]=\"{ on: !formData.noTraversal }\"\n class=\"toggle\"\n >\n <span [hidden]=\"formData.noTraversal\" class=\"on-label\">YES</span>\n <span [hidden]=\"!formData.noTraversal\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <ng-content select=\"[slot=column-2-slot-1]\"></ng-content>\n <lib-form-field-container\n *ngIf=\"hasEnrolmentToken && !extService['hideZitiRegistration']\"\n [showHeader]=\"false\"\n >\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"formData.enrollmentJwt\"\n [token]=\"formData.enrollmentToken\"\n [expiration]=\"formData.enrollmentExpiresAt\"\n (doRefresh)=\"refreshEdgeRouter()\"\n [type]=\"'router'\"\n ></lib-qr-code>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Edge Router is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentities.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"'OPTIONAL'\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [".edge-router-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.form-field-dropdown{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'Stroke_Color' style%3D'enable-background%3Anew 0 0 20.2 10.8%3B' version%3D'1.1' viewBox%3D'0 0 20.2 10.8' 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 %23668291%3B %7D%3C%2Fstyle%3E %3Cg%3E%09%3Cpath class%3D'st0' d%3D'M19.8%2C1.7c0%2C0.4-0.1%2C0.7-0.4%2C0.9l-8.5%2C7.3c-0.5%2C0.4-1.2%2C0.4-1.6%2C0L0.7%2C2.7C0.2%2C2.2%2C0.2%2C1.5%2C0.6%2C0.9%09%09c0.5-0.5%2C1.2-0.6%2C1.8-0.1l7.7%2C6.6l7.7-6.6c0.5-0.5%2C1.3-0.4%2C1.8%2C0.1C19.7%2C1.2%2C19.8%2C1.5%2C19.8%2C1.7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-position:center right 10px;background-repeat:no-repeat;background-size:18px;padding-right:28px}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}\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: 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"] }, { 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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { 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: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
|
|
14619
15183
|
}
|
|
14620
15184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterFormComponent, decorators: [{
|
|
14621
15185
|
type: Component,
|
|
@@ -14634,7 +15198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
14634
15198
|
}] }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
14635
15199
|
type: Inject,
|
|
14636
15200
|
args: [EDGE_ROUTER_EXTENSION_SERVICE]
|
|
14637
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
15201
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
14638
15202
|
type: Input
|
|
14639
15203
|
}], edgeRouterRoleAttributes: [{
|
|
14640
15204
|
type: Input
|
|
@@ -14676,6 +15240,7 @@ class ServiceFormService {
|
|
|
14676
15240
|
total: 100
|
|
14677
15241
|
};
|
|
14678
15242
|
this.formData = {};
|
|
15243
|
+
this.selectedConfig = {};
|
|
14679
15244
|
this.selectedConfigId = '';
|
|
14680
15245
|
this.configs = [];
|
|
14681
15246
|
this.configTypes = [];
|
|
@@ -14684,7 +15249,7 @@ class ServiceFormService {
|
|
|
14684
15249
|
this.selectedConfigName = '';
|
|
14685
15250
|
this.selectedConfigTypeId = '';
|
|
14686
15251
|
this.selectedConfigType = {};
|
|
14687
|
-
this.
|
|
15252
|
+
this.addedConfigs = [];
|
|
14688
15253
|
this.addedTerminatorNames = [];
|
|
14689
15254
|
this.addedTerminators = [];
|
|
14690
15255
|
this.configJsonView = false;
|
|
@@ -14709,6 +15274,7 @@ class ServiceFormService {
|
|
|
14709
15274
|
this.associatedTerminators = [];
|
|
14710
15275
|
this.associatedServicePolicies = [];
|
|
14711
15276
|
this.associatedServicePolicyNames = [];
|
|
15277
|
+
this.associatedServicePoliciesMap = {};
|
|
14712
15278
|
this.lColorArray = [
|
|
14713
15279
|
'white',
|
|
14714
15280
|
'white',
|
|
@@ -14779,22 +15345,22 @@ class ServiceFormService {
|
|
|
14779
15345
|
this.zitiService.getSubdata('services', this.formData.id, 'service-policies').then((result) => {
|
|
14780
15346
|
this.associatedServicePolicies = result.data;
|
|
14781
15347
|
this.associatedServicePolicyNames = this.associatedServicePolicies.map((policy) => {
|
|
15348
|
+
this.associatedServicePoliciesMap[policy.name] = policy;
|
|
14782
15349
|
return policy.name;
|
|
14783
15350
|
});
|
|
14784
15351
|
});
|
|
14785
15352
|
}
|
|
14786
|
-
previewConfig(configName) {
|
|
15353
|
+
previewConfig(configName, router) {
|
|
14787
15354
|
this.showCfgPreviewOption = true;
|
|
14788
|
-
this.
|
|
14789
|
-
|
|
14790
|
-
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
this.
|
|
14794
|
-
this.
|
|
14795
|
-
|
|
14796
|
-
|
|
14797
|
-
});
|
|
15355
|
+
this.selectedConfig = this.associatedConfigsMap[configName];
|
|
15356
|
+
router.navigate(['/configs/' + this.selectedConfig.id]);
|
|
15357
|
+
return;
|
|
15358
|
+
}
|
|
15359
|
+
previewPolicy(policyName, router) {
|
|
15360
|
+
this.showCfgPreviewOption = true;
|
|
15361
|
+
this.selectedConfig = this.associatedServicePoliciesMap[policyName];
|
|
15362
|
+
router.navigate(['/service-policies/' + this.selectedConfig.id]);
|
|
15363
|
+
return;
|
|
14798
15364
|
}
|
|
14799
15365
|
addTerminators(serviceId) {
|
|
14800
15366
|
const promises = [];
|
|
@@ -14834,9 +15400,10 @@ class ServiceFormService {
|
|
|
14834
15400
|
this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result) => {
|
|
14835
15401
|
this.associatedConfigs = result.data;
|
|
14836
15402
|
this.associatedConfigsMap = {};
|
|
14837
|
-
this.
|
|
15403
|
+
this.addedConfigs = this.associatedConfigs.map((cfg) => {
|
|
14838
15404
|
this.associatedConfigsMap[cfg.name] = cfg;
|
|
14839
|
-
|
|
15405
|
+
cfg.href = '/configs/' + cfg.id;
|
|
15406
|
+
return cfg;
|
|
14840
15407
|
});
|
|
14841
15408
|
});
|
|
14842
15409
|
}
|
|
@@ -14878,14 +15445,15 @@ class ServiceFormService {
|
|
|
14878
15445
|
this.configChanged(resetData);
|
|
14879
15446
|
}
|
|
14880
15447
|
updatedAddedConfigs() {
|
|
14881
|
-
this.
|
|
15448
|
+
this.addedConfigs = [];
|
|
14882
15449
|
this.configs.forEach((availableConfig) => {
|
|
14883
15450
|
const cfgExists = some(this.formData.configs, configId => {
|
|
14884
15451
|
return availableConfig.id == configId;
|
|
14885
15452
|
});
|
|
14886
15453
|
if (cfgExists) {
|
|
14887
|
-
|
|
14888
|
-
this.
|
|
15454
|
+
availableConfig.href = '/configs/' + availableConfig.id;
|
|
15455
|
+
this.addedConfigs.push(availableConfig);
|
|
15456
|
+
this.addedConfigs = [...this.addedConfigs];
|
|
14889
15457
|
}
|
|
14890
15458
|
});
|
|
14891
15459
|
}
|
|
@@ -14914,6 +15482,7 @@ class ServiceFormService {
|
|
|
14914
15482
|
.then((result) => {
|
|
14915
15483
|
const cfg = result?.data;
|
|
14916
15484
|
newConfig.id = result?.id ? result.id : result?.data?.id;
|
|
15485
|
+
newConfig.href = '/configs/' + newConfig.id;
|
|
14917
15486
|
this.associatedConfigsMap[newConfig.name] = { data: newConfig.data, name: newConfig.name, configTypeId: newConfig.configTypeId };
|
|
14918
15487
|
return newConfig.id;
|
|
14919
15488
|
})
|
|
@@ -14930,8 +15499,8 @@ class ServiceFormService {
|
|
|
14930
15499
|
if (!isEmpty(configId)) {
|
|
14931
15500
|
this.saveDisabled = false;
|
|
14932
15501
|
this.formData.configs.push(configId);
|
|
14933
|
-
this.
|
|
14934
|
-
this.
|
|
15502
|
+
this.addedConfigs.push(newConfig);
|
|
15503
|
+
this.addedConfigs = [...this.addedConfigs];
|
|
14935
15504
|
this.getConfigs();
|
|
14936
15505
|
const growlerData = new GrowlerModel('success', 'Success', `New Config Attached`, `New Config ${this.newConfigName} has been created and attached to the service`);
|
|
14937
15506
|
this.growlerService.show(growlerData);
|
|
@@ -14951,15 +15520,16 @@ class ServiceFormService {
|
|
|
14951
15520
|
}
|
|
14952
15521
|
});
|
|
14953
15522
|
if (!configAdded) {
|
|
14954
|
-
let
|
|
15523
|
+
let newConfig;
|
|
14955
15524
|
this.configs.forEach((config) => {
|
|
14956
15525
|
if (config.id === addedConfigId) {
|
|
14957
|
-
|
|
15526
|
+
newConfig = config;
|
|
14958
15527
|
}
|
|
14959
15528
|
});
|
|
14960
|
-
if (
|
|
14961
|
-
|
|
14962
|
-
this.
|
|
15529
|
+
if (newConfig) {
|
|
15530
|
+
newConfig.href = '/configs/' + newConfig.id;
|
|
15531
|
+
this.addedConfigs.push(newConfig);
|
|
15532
|
+
this.addedConfigs = [...this.addedConfigs];
|
|
14963
15533
|
}
|
|
14964
15534
|
this.formData.configs.push(addedConfigId);
|
|
14965
15535
|
this.selectedConfigTypeId = '';
|
|
@@ -14972,10 +15542,10 @@ class ServiceFormService {
|
|
|
14972
15542
|
}
|
|
14973
15543
|
}
|
|
14974
15544
|
}
|
|
14975
|
-
removeConfig(
|
|
15545
|
+
removeConfig(configToRemove) {
|
|
14976
15546
|
let configIdToRemove;
|
|
14977
15547
|
this.configs.forEach((availableConfig) => {
|
|
14978
|
-
if (availableConfig.name ===
|
|
15548
|
+
if (availableConfig.name === configToRemove.name) {
|
|
14979
15549
|
configIdToRemove = availableConfig.id;
|
|
14980
15550
|
}
|
|
14981
15551
|
});
|
|
@@ -14983,12 +15553,12 @@ class ServiceFormService {
|
|
|
14983
15553
|
const newConfigs = filter(this.formData.configs, configId => {
|
|
14984
15554
|
return configId !== configIdToRemove;
|
|
14985
15555
|
});
|
|
14986
|
-
const
|
|
14987
|
-
return
|
|
15556
|
+
const newConfigItems = filter(this.addedConfigs, (config) => {
|
|
15557
|
+
return config.name !== configToRemove.name;
|
|
14988
15558
|
});
|
|
14989
15559
|
this.formData.configs = newConfigs;
|
|
14990
|
-
this.
|
|
14991
|
-
if (this.selectedConfigId === 'preview' &&
|
|
15560
|
+
this.addedConfigs = newConfigItems;
|
|
15561
|
+
if (this.selectedConfigId === 'preview' && configToRemove.name === this.selectedConfigName) {
|
|
14992
15562
|
this.selectedConfigId = '';
|
|
14993
15563
|
this.selectedConfigTypeId = '';
|
|
14994
15564
|
}
|
|
@@ -15107,8 +15677,8 @@ class ServiceFormComponent extends ProjectableForm {
|
|
|
15107
15677
|
get formData() {
|
|
15108
15678
|
return this.svc.formData;
|
|
15109
15679
|
}
|
|
15110
|
-
constructor(settingsService, svc, zitiService, growlerService, extService, router, route) {
|
|
15111
|
-
super(growlerService, extService, zitiService, router, route);
|
|
15680
|
+
constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
|
|
15681
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
15112
15682
|
this.settingsService = settingsService;
|
|
15113
15683
|
this.svc = svc;
|
|
15114
15684
|
this.zitiService = zitiService;
|
|
@@ -15217,7 +15787,7 @@ class ServiceFormComponent extends ProjectableForm {
|
|
|
15217
15787
|
break;
|
|
15218
15788
|
case 'close':
|
|
15219
15789
|
this.resetForm();
|
|
15220
|
-
this.
|
|
15790
|
+
this.returnToListPage();
|
|
15221
15791
|
break;
|
|
15222
15792
|
case 'toggle-view':
|
|
15223
15793
|
this.formView = action.data;
|
|
@@ -15274,13 +15844,13 @@ class ServiceFormComponent extends ProjectableForm {
|
|
|
15274
15844
|
}
|
|
15275
15845
|
clear() {
|
|
15276
15846
|
}
|
|
15277
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ServiceFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: SERVICE_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15847
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ServiceFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: SERVICE_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15278
15848
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServiceFormComponent, selector: "lib-service-form", inputs: { formData: "formData", serviceRoleAttributes: "serviceRoleAttributes" }, outputs: { close: "close" }, providers: [
|
|
15279
15849
|
{
|
|
15280
15850
|
provide: MatDialogRef,
|
|
15281
15851
|
useValue: {}
|
|
15282
15852
|
}
|
|
15283
|
-
], viewQueries: [{ propertyName: "configEditor", first: true, predicate: ["configEditor"], descendants: true, read: ConfigEditorComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"returnToListPage()\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Service' : 'Create Service')\"\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=\"edge-router-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]=\"'Service Name'\" [label]=\"'Required'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this Service\"\n [ngClass]=\"{error: svc.errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Service attributes'\"\n [label]=\"'Optional'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to a resource. Apply the same tag to other Services to form a group of Services.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"serviceRoleAttributes\"\n [placeholder]=\"'Add attributes to group Services'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Add Configurations'\"\n (actionRequested)=\"attachConfig()\"\n (keyup.enter)=\"captureConfigEnterEvent($event)\"\n [helpText]=\"'Configurations are used to define how to intercept and host a service. Ziti Networks come with built-in configuration types (ie. intercept.v1 and host.v1)'\"\n >\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Select a Config</span>\n </div>\n <select\n [(ngModel)]=\"svc.selectedConfigTypeId\"\n (change)=\"configTypeChanged($event)\"\n id=\"SelectedConfigType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select configuration type...</option>\n <option\n *ngFor=\"let type of svc.configTypes\"\n [value]=\"type.id\"\n >\n {{ type.name }}\n </option>\n </select>\n <select\n [(ngModel)]=\"svc.selectedConfigId\"\n (change)=\"configChanged($event)\"\n id=\"SelectedConfig\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{'disabled': !svc.selectedConfigTypeId || svc.selectedConfigTypeId === ''}\"\n >\n <option value=\"\">Select configuration...</option>\n <option value=\"add-new\">Add a New Config</option>\n <option value=\"preview\" *ngIf=\"svc.selectedConfigId === 'preview'\">View Config Data</option>\n <option\n *ngFor=\"let config of svc.filteredConfigs\"\n [value]=\"config.id\"\n >\n {{ config.name }}\n </option>\n </select>\n <div *ngIf=\"!showConfigData && svc.selectedConfigId && svc.selectedConfigId !== '' && svc.selectedConfigId !== 'preview'\" class=\"button-row-right\" >\n <div class=\"save-button\" (click)=\"svc.attachConfig(svc.selectedConfigId)\">\n {{svc.attachLabel}}\n </div>\n </div>\n <div [hidden]=\"!showConfigData\" class=\"form-field-extended-fields\" [ngClass]=\"{'cfg-preview': svc.selectedConfigId === 'preview'}\">\n <div *ngIf=\"showConfigData\" class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Config Name</span>\n <div\n class=\"save-button\"\n (click)=\"attachConfig()\"\n *ngIf=\"svc.selectedConfigId !== 'preview'\"\n >{{svc.attachLabel}}\n </div>\n </div>\n <input\n *ngIf=\"showConfigData\"\n [(ngModel)]=\"svc.newConfigName\"\n class=\"form-field-input\"\n [placeholder]=\"'New Config Name'\"\n [ngClass]=\"{error: svc.configErrors['name']}\"\n style=\"margin-bottom: 20px;\"\n />\n <div class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\" *ngIf=\"svc.selectedConfigId !== 'preview'\">\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 <lib-config-editor\n [(configData)]=\"svc.configData\"\n [schema]=\"svc.selectedSchema\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"svc.configErrors\"\n #configEditor\n ></lib-config-editor>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div *ngIf=\"showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Terminator Strategy'\"\n [title2]=\"'Encryption'\"\n [layout]=\"'row'\"\n [helpText]=\"'Pick a strategy to determine how to rank available terminators for a service'\"\n [helpText2]=\"'Encrypts packets when entering or leaving the network.'\"\n class=\"form-field-advanced\"\n >\n <select\n [(ngModel)]=\"formData.terminatorStrategy\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select a Strategy....</option>\n <option\n *ngFor=\"let strat of strategies\"\n [value]=\"strat.id\"\n >\n {{ strat.label }}\n </option>\n </select>\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">Require Encryption</div>\n <div\n (click)=\"toggleEncryptionRequired()\"\n [ngClass]=\"{ on: formData.encryptionRequired }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.encryptionRequired\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.encryptionRequired\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\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]=\"'Selected Configurations'\"\n [count]=\"svc.addedConfigNames ? svc.addedConfigNames.length : 0\"\n [helpText]=\"'Preview list of all service configurations that this service is associated with.'\"\n >\n <lib-preview-list\n [allNames]=\"svc.addedConfigNames\"\n [allowRemove]=\"true\"\n [clickable]=\"true\"\n [tooltip]=\"'View Config Data'\"\n (itemRemoved)=\"svc.removeConfig($event)\"\n (itemSelected)=\"svc.previewConfig($event)\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"svc.associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this service is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [allNames]=\"svc.associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [class]=\"'api-call-container'\"\n [helpText]=\"'Preview of the API URL and data model that is used to create/update this service'\"\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)]=\"svc.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\" [(jsonInvalid)]=\"formDataInvalid\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [".edge-router-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.form-field-dropdown{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'Stroke_Color' style%3D'enable-background%3Anew 0 0 20.2 10.8%3B' version%3D'1.1' viewBox%3D'0 0 20.2 10.8' 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 %23668291%3B %7D%3C%2Fstyle%3E %3Cg%3E%09%3Cpath class%3D'st0' d%3D'M19.8%2C1.7c0%2C0.4-0.1%2C0.7-0.4%2C0.9l-8.5%2C7.3c-0.5%2C0.4-1.2%2C0.4-1.6%2C0L0.7%2C2.7C0.2%2C2.2%2C0.2%2C1.5%2C0.6%2C0.9%09%09c0.5-0.5%2C1.2-0.6%2C1.8-0.1l7.7%2C6.6l7.7-6.6c0.5-0.5%2C1.3-0.4%2C1.8%2C0.1C19.7%2C1.2%2C19.8%2C1.5%2C19.8%2C1.7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-position:center right 10px;background-repeat:no-repeat;background-size:18px;padding-right:28px}.form-field-extended-fields{position:relative;display:flex;flex-direction:column}.form-field-extended-fields.cfg-preview{opacity:.8;filter:grayscale(.4);pointer-events:none}.form-header-toggle-container{display:flex;flex-direction:row;align-items:center}.form-header-toggle-container .form-header-toggle{display:flex;flex-direction:row;width:30px;height:18px;border-radius:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;margin-left:5px;cursor:pointer;position:relative;margin-right:5px}.form-header-toggle-container .form-header-toggle:hover{filter:brightness(90%)}.form-header-toggle-container .form-header-toggle:active{transform:translateY(1px);filter:brightness(80%)}.form-header-toggle-container .form-header-toggle .form-toggle-switch{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;height:100%;margin-left:3px;position:absolute;transition:.5s;left:0}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right{left:10px}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right .form-toggle-indicator{border-color:var(--red)}.form-header-toggle-container .form-header-toggle .form-toggle-switch .form-toggle-indicator{height:10px;border-color:var(--green);border-style:solid;border-left-width:1px;border-right-width:1px;position:relative;margin-left:2px}.form-header-toggle-container .toggle-option-text{font-size:13px;font-weight:600;color:var(--placeholder);cursor:pointer}.form-header-toggle-container .toggle-option-text:hover{filter:brightness(90%)}.form-header-toggle-container .toggle-option-text:hover.toggle-option-selected{filter:unset}.form-header-toggle-container .toggle-option-text.toggle-option-selected{color:var(--tableText);cursor:default}.jsonButton{position:relative;top:0;margin:0;padding:10px;height:30px}.disabled{opacity:.5;pointer-events:none}.attach-config{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;background:var(--primary);padding:7px;border-radius:7px;color:var(--white);cursor:pointer;box-shadow:0 3px 9px 0 var(--primaryColorOpaque);border:none;width:-moz-fit-content;width:fit-content}.attach-config:active{background:#648293;box-shadow:none;transform:translateY(1px)}.attach-config:hover{outline:0;filter:brightness(90%);box-shadow:0 2px 3px 0 var(--primaryColorOpaque)}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}::ng-deep .form-field-extended-fields .form-field-extended-fields{padding:0}\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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["hideOption", "label", "clickable", "isLoading", "allNames", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { 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: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { 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"] }] }); }
|
|
15853
|
+
], viewQueries: [{ propertyName: "configEditor", first: true, predicate: ["configEditor"], descendants: true, read: ConfigEditorComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"returnToListPage()\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Service' : 'Create Service')\"\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=\"edge-router-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]=\"'Service Name'\" [label]=\"'Required'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this Service\"\n [ngClass]=\"{error: svc.errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Service attributes'\"\n [label]=\"'Optional'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to a resource. Apply the same tag to other Services to form a group of Services.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"serviceRoleAttributes\"\n [placeholder]=\"'Add attributes to group Services'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Add Configurations'\"\n (actionRequested)=\"attachConfig()\"\n (keyup.enter)=\"captureConfigEnterEvent($event)\"\n [helpText]=\"'Configurations are used to define how to intercept and host a service. Ziti Networks come with built-in configuration types (ie. intercept.v1 and host.v1)'\"\n >\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Select a Config</span>\n </div>\n <select\n [(ngModel)]=\"svc.selectedConfigTypeId\"\n (change)=\"configTypeChanged($event)\"\n id=\"SelectedConfigType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select configuration type...</option>\n <option\n *ngFor=\"let type of svc.configTypes\"\n [value]=\"type.id\"\n >\n {{ type.name }}\n </option>\n </select>\n <select\n [(ngModel)]=\"svc.selectedConfigId\"\n (change)=\"configChanged($event)\"\n id=\"SelectedConfig\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{'disabled': !svc.selectedConfigTypeId || svc.selectedConfigTypeId === ''}\"\n >\n <option value=\"\">Select configuration...</option>\n <option value=\"add-new\">Add a New Config</option>\n <option value=\"preview\" *ngIf=\"svc.selectedConfigId === 'preview'\">View Config Data</option>\n <option\n *ngFor=\"let config of svc.filteredConfigs\"\n [value]=\"config.id\"\n >\n {{ config.name }}\n </option>\n </select>\n <div *ngIf=\"!showConfigData && svc.selectedConfigId && svc.selectedConfigId !== '' && svc.selectedConfigId !== 'preview'\" class=\"button-row-right\" >\n <div class=\"save-button\" (click)=\"svc.attachConfig(svc.selectedConfigId)\">\n {{svc.attachLabel}}\n </div>\n </div>\n <div [hidden]=\"!showConfigData\" class=\"form-field-extended-fields\" [ngClass]=\"{'cfg-preview': svc.selectedConfigId === 'preview'}\">\n <div *ngIf=\"showConfigData\" class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Config Name</span>\n <div\n class=\"save-button\"\n (click)=\"attachConfig()\"\n *ngIf=\"svc.selectedConfigId !== 'preview'\"\n >{{svc.attachLabel}}\n </div>\n </div>\n <input\n *ngIf=\"showConfigData\"\n [(ngModel)]=\"svc.newConfigName\"\n class=\"form-field-input\"\n [placeholder]=\"'New Config Name'\"\n [ngClass]=\"{error: svc.configErrors['name']}\"\n style=\"margin-bottom: 20px;\"\n />\n <div class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\" *ngIf=\"svc.selectedConfigId !== 'preview'\">\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 <lib-config-editor\n [(configData)]=\"svc.configData\"\n [schema]=\"svc.selectedSchema\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"svc.configErrors\"\n #configEditor\n ></lib-config-editor>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div *ngIf=\"showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Terminator Strategy'\"\n [title2]=\"'Encryption'\"\n [layout]=\"'row'\"\n [helpText]=\"'Pick a strategy to determine how to rank available terminators for a service'\"\n [helpText2]=\"'Encrypts packets when entering or leaving the network.'\"\n class=\"form-field-advanced\"\n >\n <select\n [(ngModel)]=\"formData.terminatorStrategy\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select a Strategy....</option>\n <option\n *ngFor=\"let strat of strategies\"\n [value]=\"strat.id\"\n >\n {{ strat.label }}\n </option>\n </select>\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">Require Encryption</div>\n <div\n (click)=\"toggleEncryptionRequired()\"\n [ngClass]=\"{ on: formData.encryptionRequired }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.encryptionRequired\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.encryptionRequired\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\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]=\"'Selected Configurations'\"\n [count]=\"svc.addedConfigs ? svc.addedConfigs.length : 0\"\n [helpText]=\"'Preview list of all service configurations that this service is associated with.'\"\n >\n <lib-preview-list\n [allNames]=\"svc.addedConfigs\"\n [allowRemove]=\"true\"\n [clickable]=\"true\"\n [tooltip]=\"'View Config'\"\n (itemRemoved)=\"svc.removeConfig($event)\"\n (itemSelected)=\"svc.previewConfig($event, router)\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"svc.associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this service is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"true\"\n (itemSelected)=\"svc.previewPolicy($event, router)\"\n [tooltip]=\"'View Service Policy'\"\n [allNames]=\"svc.associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [class]=\"'api-call-container'\"\n [helpText]=\"'Preview of the API URL and data model that is used to create/update this service'\"\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)]=\"svc.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\" [(jsonInvalid)]=\"formDataInvalid\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [".edge-router-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.form-field-dropdown{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'Stroke_Color' style%3D'enable-background%3Anew 0 0 20.2 10.8%3B' version%3D'1.1' viewBox%3D'0 0 20.2 10.8' 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 %23668291%3B %7D%3C%2Fstyle%3E %3Cg%3E%09%3Cpath class%3D'st0' d%3D'M19.8%2C1.7c0%2C0.4-0.1%2C0.7-0.4%2C0.9l-8.5%2C7.3c-0.5%2C0.4-1.2%2C0.4-1.6%2C0L0.7%2C2.7C0.2%2C2.2%2C0.2%2C1.5%2C0.6%2C0.9%09%09c0.5-0.5%2C1.2-0.6%2C1.8-0.1l7.7%2C6.6l7.7-6.6c0.5-0.5%2C1.3-0.4%2C1.8%2C0.1C19.7%2C1.2%2C19.8%2C1.5%2C19.8%2C1.7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-position:center right 10px;background-repeat:no-repeat;background-size:18px;padding-right:28px}.form-field-extended-fields{position:relative;display:flex;flex-direction:column}.form-field-extended-fields.cfg-preview{opacity:.8;filter:grayscale(.4);pointer-events:none}.form-header-toggle-container{display:flex;flex-direction:row;align-items:center}.form-header-toggle-container .form-header-toggle{display:flex;flex-direction:row;width:30px;height:18px;border-radius:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;margin-left:5px;cursor:pointer;position:relative;margin-right:5px}.form-header-toggle-container .form-header-toggle:hover{filter:brightness(90%)}.form-header-toggle-container .form-header-toggle:active{transform:translateY(1px);filter:brightness(80%)}.form-header-toggle-container .form-header-toggle .form-toggle-switch{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;height:100%;margin-left:3px;position:absolute;transition:.5s;left:0}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right{left:10px}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right .form-toggle-indicator{border-color:var(--red)}.form-header-toggle-container .form-header-toggle .form-toggle-switch .form-toggle-indicator{height:10px;border-color:var(--green);border-style:solid;border-left-width:1px;border-right-width:1px;position:relative;margin-left:2px}.form-header-toggle-container .toggle-option-text{font-size:13px;font-weight:600;color:var(--placeholder);cursor:pointer}.form-header-toggle-container .toggle-option-text:hover{filter:brightness(90%)}.form-header-toggle-container .toggle-option-text:hover.toggle-option-selected{filter:unset}.form-header-toggle-container .toggle-option-text.toggle-option-selected{color:var(--tableText);cursor:default}.jsonButton{position:relative;top:0;margin:0;padding:10px;height:30px}.disabled{opacity:.5;pointer-events:none}.attach-config{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;background:var(--primary);padding:7px;border-radius:7px;color:var(--white);cursor:pointer;box-shadow:0 3px 9px 0 var(--primaryColorOpaque);border:none;width:-moz-fit-content;width:fit-content}.attach-config:active{background:#648293;box-shadow:none;transform:translateY(1px)}.attach-config:hover{outline:0;filter:brightness(90%);box-shadow:0 2px 3px 0 var(--primaryColorOpaque)}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}::ng-deep .form-field-extended-fields .form-field-extended-fields{padding:0}\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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { 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: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { 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"] }] }); }
|
|
15284
15854
|
}
|
|
15285
15855
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceFormComponent, decorators: [{
|
|
15286
15856
|
type: Component,
|
|
@@ -15289,7 +15859,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
15289
15859
|
provide: MatDialogRef,
|
|
15290
15860
|
useValue: {}
|
|
15291
15861
|
}
|
|
15292
|
-
], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"returnToListPage()\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Service' : 'Create Service')\"\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=\"edge-router-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]=\"'Service Name'\" [label]=\"'Required'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this Service\"\n [ngClass]=\"{error: svc.errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Service attributes'\"\n [label]=\"'Optional'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to a resource. Apply the same tag to other Services to form a group of Services.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"serviceRoleAttributes\"\n [placeholder]=\"'Add attributes to group Services'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Add Configurations'\"\n (actionRequested)=\"attachConfig()\"\n (keyup.enter)=\"captureConfigEnterEvent($event)\"\n [helpText]=\"'Configurations are used to define how to intercept and host a service. Ziti Networks come with built-in configuration types (ie. intercept.v1 and host.v1)'\"\n >\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Select a Config</span>\n </div>\n <select\n [(ngModel)]=\"svc.selectedConfigTypeId\"\n (change)=\"configTypeChanged($event)\"\n id=\"SelectedConfigType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select configuration type...</option>\n <option\n *ngFor=\"let type of svc.configTypes\"\n [value]=\"type.id\"\n >\n {{ type.name }}\n </option>\n </select>\n <select\n [(ngModel)]=\"svc.selectedConfigId\"\n (change)=\"configChanged($event)\"\n id=\"SelectedConfig\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{'disabled': !svc.selectedConfigTypeId || svc.selectedConfigTypeId === ''}\"\n >\n <option value=\"\">Select configuration...</option>\n <option value=\"add-new\">Add a New Config</option>\n <option value=\"preview\" *ngIf=\"svc.selectedConfigId === 'preview'\">View Config Data</option>\n <option\n *ngFor=\"let config of svc.filteredConfigs\"\n [value]=\"config.id\"\n >\n {{ config.name }}\n </option>\n </select>\n <div *ngIf=\"!showConfigData && svc.selectedConfigId && svc.selectedConfigId !== '' && svc.selectedConfigId !== 'preview'\" class=\"button-row-right\" >\n <div class=\"save-button\" (click)=\"svc.attachConfig(svc.selectedConfigId)\">\n {{svc.attachLabel}}\n </div>\n </div>\n <div [hidden]=\"!showConfigData\" class=\"form-field-extended-fields\" [ngClass]=\"{'cfg-preview': svc.selectedConfigId === 'preview'}\">\n <div *ngIf=\"showConfigData\" class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Config Name</span>\n <div\n class=\"save-button\"\n (click)=\"attachConfig()\"\n *ngIf=\"svc.selectedConfigId !== 'preview'\"\n >{{svc.attachLabel}}\n </div>\n </div>\n <input\n *ngIf=\"showConfigData\"\n [(ngModel)]=\"svc.newConfigName\"\n class=\"form-field-input\"\n [placeholder]=\"'New Config Name'\"\n [ngClass]=\"{error: svc.configErrors['name']}\"\n style=\"margin-bottom: 20px;\"\n />\n <div class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\" *ngIf=\"svc.selectedConfigId !== 'preview'\">\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 <lib-config-editor\n [(configData)]=\"svc.configData\"\n [schema]=\"svc.selectedSchema\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"svc.configErrors\"\n #configEditor\n ></lib-config-editor>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div *ngIf=\"showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Terminator Strategy'\"\n [title2]=\"'Encryption'\"\n [layout]=\"'row'\"\n [helpText]=\"'Pick a strategy to determine how to rank available terminators for a service'\"\n [helpText2]=\"'Encrypts packets when entering or leaving the network.'\"\n class=\"form-field-advanced\"\n >\n <select\n [(ngModel)]=\"formData.terminatorStrategy\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select a Strategy....</option>\n <option\n *ngFor=\"let strat of strategies\"\n [value]=\"strat.id\"\n >\n {{ strat.label }}\n </option>\n </select>\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">Require Encryption</div>\n <div\n (click)=\"toggleEncryptionRequired()\"\n [ngClass]=\"{ on: formData.encryptionRequired }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.encryptionRequired\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.encryptionRequired\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\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]=\"'Selected Configurations'\"\n [count]=\"svc.addedConfigNames ? svc.addedConfigNames.length : 0\"\n [helpText]=\"'Preview list of all service configurations that this service is associated with.'\"\n >\n <lib-preview-list\n [allNames]=\"svc.addedConfigNames\"\n [allowRemove]=\"true\"\n [clickable]=\"true\"\n [tooltip]=\"'View Config Data'\"\n (itemRemoved)=\"svc.removeConfig($event)\"\n (itemSelected)=\"svc.previewConfig($event)\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"svc.associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this service is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [allNames]=\"svc.associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [class]=\"'api-call-container'\"\n [helpText]=\"'Preview of the API URL and data model that is used to create/update this service'\"\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)]=\"svc.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\" [(jsonInvalid)]=\"formDataInvalid\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [".edge-router-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.form-field-dropdown{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'Stroke_Color' style%3D'enable-background%3Anew 0 0 20.2 10.8%3B' version%3D'1.1' viewBox%3D'0 0 20.2 10.8' 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 %23668291%3B %7D%3C%2Fstyle%3E %3Cg%3E%09%3Cpath class%3D'st0' d%3D'M19.8%2C1.7c0%2C0.4-0.1%2C0.7-0.4%2C0.9l-8.5%2C7.3c-0.5%2C0.4-1.2%2C0.4-1.6%2C0L0.7%2C2.7C0.2%2C2.2%2C0.2%2C1.5%2C0.6%2C0.9%09%09c0.5-0.5%2C1.2-0.6%2C1.8-0.1l7.7%2C6.6l7.7-6.6c0.5-0.5%2C1.3-0.4%2C1.8%2C0.1C19.7%2C1.2%2C19.8%2C1.5%2C19.8%2C1.7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-position:center right 10px;background-repeat:no-repeat;background-size:18px;padding-right:28px}.form-field-extended-fields{position:relative;display:flex;flex-direction:column}.form-field-extended-fields.cfg-preview{opacity:.8;filter:grayscale(.4);pointer-events:none}.form-header-toggle-container{display:flex;flex-direction:row;align-items:center}.form-header-toggle-container .form-header-toggle{display:flex;flex-direction:row;width:30px;height:18px;border-radius:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;margin-left:5px;cursor:pointer;position:relative;margin-right:5px}.form-header-toggle-container .form-header-toggle:hover{filter:brightness(90%)}.form-header-toggle-container .form-header-toggle:active{transform:translateY(1px);filter:brightness(80%)}.form-header-toggle-container .form-header-toggle .form-toggle-switch{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;height:100%;margin-left:3px;position:absolute;transition:.5s;left:0}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right{left:10px}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right .form-toggle-indicator{border-color:var(--red)}.form-header-toggle-container .form-header-toggle .form-toggle-switch .form-toggle-indicator{height:10px;border-color:var(--green);border-style:solid;border-left-width:1px;border-right-width:1px;position:relative;margin-left:2px}.form-header-toggle-container .toggle-option-text{font-size:13px;font-weight:600;color:var(--placeholder);cursor:pointer}.form-header-toggle-container .toggle-option-text:hover{filter:brightness(90%)}.form-header-toggle-container .toggle-option-text:hover.toggle-option-selected{filter:unset}.form-header-toggle-container .toggle-option-text.toggle-option-selected{color:var(--tableText);cursor:default}.jsonButton{position:relative;top:0;margin:0;padding:10px;height:30px}.disabled{opacity:.5;pointer-events:none}.attach-config{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;background:var(--primary);padding:7px;border-radius:7px;color:var(--white);cursor:pointer;box-shadow:0 3px 9px 0 var(--primaryColorOpaque);border:none;width:-moz-fit-content;width:fit-content}.attach-config:active{background:#648293;box-shadow:none;transform:translateY(1px)}.attach-config:hover{outline:0;filter:brightness(90%);box-shadow:0 2px 3px 0 var(--primaryColorOpaque)}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}::ng-deep .form-field-extended-fields .form-field-extended-fields{padding:0}\n"] }]
|
|
15862
|
+
], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"returnToListPage()\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Edit Service' : 'Create Service')\"\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=\"edge-router-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]=\"'Service Name'\" [label]=\"'Required'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this Service\"\n [ngClass]=\"{error: svc.errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Service attributes'\"\n [label]=\"'Optional'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to a resource. Apply the same tag to other Services to form a group of Services.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"serviceRoleAttributes\"\n [placeholder]=\"'Add attributes to group Services'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Add Configurations'\"\n (actionRequested)=\"attachConfig()\"\n (keyup.enter)=\"captureConfigEnterEvent($event)\"\n [helpText]=\"'Configurations are used to define how to intercept and host a service. Ziti Networks come with built-in configuration types (ie. intercept.v1 and host.v1)'\"\n >\n <div class=\"form-field-input-group\">\n <div class=\"config-title-row\">\n <span class=\"form-field-title\">Select a Config</span>\n </div>\n <select\n [(ngModel)]=\"svc.selectedConfigTypeId\"\n (change)=\"configTypeChanged($event)\"\n id=\"SelectedConfigType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select configuration type...</option>\n <option\n *ngFor=\"let type of svc.configTypes\"\n [value]=\"type.id\"\n >\n {{ type.name }}\n </option>\n </select>\n <select\n [(ngModel)]=\"svc.selectedConfigId\"\n (change)=\"configChanged($event)\"\n id=\"SelectedConfig\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{'disabled': !svc.selectedConfigTypeId || svc.selectedConfigTypeId === ''}\"\n >\n <option value=\"\">Select configuration...</option>\n <option value=\"add-new\">Add a New Config</option>\n <option value=\"preview\" *ngIf=\"svc.selectedConfigId === 'preview'\">View Config Data</option>\n <option\n *ngFor=\"let config of svc.filteredConfigs\"\n [value]=\"config.id\"\n >\n {{ config.name }}\n </option>\n </select>\n <div *ngIf=\"!showConfigData && svc.selectedConfigId && svc.selectedConfigId !== '' && svc.selectedConfigId !== 'preview'\" class=\"button-row-right\" >\n <div class=\"save-button\" (click)=\"svc.attachConfig(svc.selectedConfigId)\">\n {{svc.attachLabel}}\n </div>\n </div>\n <div [hidden]=\"!showConfigData\" class=\"form-field-extended-fields\" [ngClass]=\"{'cfg-preview': svc.selectedConfigId === 'preview'}\">\n <div *ngIf=\"showConfigData\" class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Config Name</span>\n <div\n class=\"save-button\"\n (click)=\"attachConfig()\"\n *ngIf=\"svc.selectedConfigId !== 'preview'\"\n >{{svc.attachLabel}}\n </div>\n </div>\n <input\n *ngIf=\"showConfigData\"\n [(ngModel)]=\"svc.newConfigName\"\n class=\"form-field-input\"\n [placeholder]=\"'New Config Name'\"\n [ngClass]=\"{error: svc.configErrors['name']}\"\n style=\"margin-bottom: 20px;\"\n />\n <div class=\"config-title-row\" style=\"margin-bottom: 10px;\">\n <span class=\"form-field-title\">Configuration Data</span>\n <div class=\"form-header-toggle-container\" *ngIf=\"svc.selectedConfigId !== 'preview'\">\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 <lib-config-editor\n [(configData)]=\"svc.configData\"\n [schema]=\"svc.selectedSchema\"\n [showJsonView]=\"svc.configJsonView\"\n [(configErrors)]=\"svc.configErrors\"\n #configEditor\n ></lib-config-editor>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div *ngIf=\"showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Terminator Strategy'\"\n [title2]=\"'Encryption'\"\n [layout]=\"'row'\"\n [helpText]=\"'Pick a strategy to determine how to rank available terminators for a service'\"\n [helpText2]=\"'Encrypts packets when entering or leaving the network.'\"\n class=\"form-field-advanced\"\n >\n <select\n [(ngModel)]=\"formData.terminatorStrategy\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select a Strategy....</option>\n <option\n *ngFor=\"let strat of strategies\"\n [value]=\"strat.id\"\n >\n {{ strat.label }}\n </option>\n </select>\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">Require Encryption</div>\n <div\n (click)=\"toggleEncryptionRequired()\"\n [ngClass]=\"{ on: formData.encryptionRequired }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.encryptionRequired\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.encryptionRequired\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\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]=\"'Selected Configurations'\"\n [count]=\"svc.addedConfigs ? svc.addedConfigs.length : 0\"\n [helpText]=\"'Preview list of all service configurations that this service is associated with.'\"\n >\n <lib-preview-list\n [allNames]=\"svc.addedConfigs\"\n [allowRemove]=\"true\"\n [clickable]=\"true\"\n [tooltip]=\"'View Config'\"\n (itemRemoved)=\"svc.removeConfig($event)\"\n (itemSelected)=\"svc.previewConfig($event, router)\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"svc.associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this service is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"true\"\n (itemSelected)=\"svc.previewPolicy($event, router)\"\n [tooltip]=\"'View Service Policy'\"\n [allNames]=\"svc.associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n [class]=\"'api-call-container'\"\n [helpText]=\"'Preview of the API URL and data model that is used to create/update this service'\"\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)]=\"svc.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\" [(jsonInvalid)]=\"formDataInvalid\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [".edge-router-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:15px}.form-field-dropdown{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'Stroke_Color' style%3D'enable-background%3Anew 0 0 20.2 10.8%3B' version%3D'1.1' viewBox%3D'0 0 20.2 10.8' 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 %23668291%3B %7D%3C%2Fstyle%3E %3Cg%3E%09%3Cpath class%3D'st0' d%3D'M19.8%2C1.7c0%2C0.4-0.1%2C0.7-0.4%2C0.9l-8.5%2C7.3c-0.5%2C0.4-1.2%2C0.4-1.6%2C0L0.7%2C2.7C0.2%2C2.2%2C0.2%2C1.5%2C0.6%2C0.9%09%09c0.5-0.5%2C1.2-0.6%2C1.8-0.1l7.7%2C6.6l7.7-6.6c0.5-0.5%2C1.3-0.4%2C1.8%2C0.1C19.7%2C1.2%2C19.8%2C1.5%2C19.8%2C1.7z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-position:center right 10px;background-repeat:no-repeat;background-size:18px;padding-right:28px}.form-field-extended-fields{position:relative;display:flex;flex-direction:column}.form-field-extended-fields.cfg-preview{opacity:.8;filter:grayscale(.4);pointer-events:none}.form-header-toggle-container{display:flex;flex-direction:row;align-items:center}.form-header-toggle-container .form-header-toggle{display:flex;flex-direction:row;width:30px;height:18px;border-radius:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;margin-left:5px;cursor:pointer;position:relative;margin-right:5px}.form-header-toggle-container .form-header-toggle:hover{filter:brightness(90%)}.form-header-toggle-container .form-header-toggle:active{transform:translateY(1px);filter:brightness(80%)}.form-header-toggle-container .form-header-toggle .form-toggle-switch{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;height:100%;margin-left:3px;position:absolute;transition:.5s;left:0}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right{left:10px}.form-header-toggle-container .form-header-toggle .form-toggle-switch.toggle-right .form-toggle-indicator{border-color:var(--red)}.form-header-toggle-container .form-header-toggle .form-toggle-switch .form-toggle-indicator{height:10px;border-color:var(--green);border-style:solid;border-left-width:1px;border-right-width:1px;position:relative;margin-left:2px}.form-header-toggle-container .toggle-option-text{font-size:13px;font-weight:600;color:var(--placeholder);cursor:pointer}.form-header-toggle-container .toggle-option-text:hover{filter:brightness(90%)}.form-header-toggle-container .toggle-option-text:hover.toggle-option-selected{filter:unset}.form-header-toggle-container .toggle-option-text.toggle-option-selected{color:var(--tableText);cursor:default}.jsonButton{position:relative;top:0;margin:0;padding:10px;height:30px}.disabled{opacity:.5;pointer-events:none}.attach-config{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;background:var(--primary);padding:7px;border-radius:7px;color:var(--white);cursor:pointer;box-shadow:0 3px 9px 0 var(--primaryColorOpaque);border:none;width:-moz-fit-content;width:fit-content}.attach-config:active{background:#648293;box-shadow:none;transform:translateY(1px)}.attach-config:hover{outline:0;filter:brightness(90%);box-shadow:0 2px 3px 0 var(--primaryColorOpaque)}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:10px;padding-right:10px;border-color:var(--inputBorder);border-style:solid;border-width:2px;border-bottom-right-radius:7px;border-bottom-left-radius:7px;border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -2px 11px 0 var(--boxShadow);padding-bottom:15px;padding-top:15px}.svc-test-result .close.icon-close{top:10px;right:10px;font-size:18px;height:18px;width:18px;line-height:18px}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:2px}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:1px}::ng-deep .form-field-extended-fields .form-field-extended-fields{padding:0}\n"] }]
|
|
15293
15863
|
}], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
|
|
15294
15864
|
type: Inject,
|
|
15295
15865
|
args: [SETTINGS_SERVICE]
|
|
@@ -15299,7 +15869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
15299
15869
|
}] }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
15300
15870
|
type: Inject,
|
|
15301
15871
|
args: [SERVICE_EXTENSION_SERVICE]
|
|
15302
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
15872
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
15303
15873
|
type: Input
|
|
15304
15874
|
}], serviceRoleAttributes: [{
|
|
15305
15875
|
type: Input
|
|
@@ -15659,6 +16229,10 @@ class SimpleServiceComponent extends ProjectableForm {
|
|
|
15659
16229
|
if (!this.validate()) {
|
|
15660
16230
|
return;
|
|
15661
16231
|
}
|
|
16232
|
+
const hasConflicts = await this.checkNameConflicts();
|
|
16233
|
+
if (hasConflicts) {
|
|
16234
|
+
return;
|
|
16235
|
+
}
|
|
15662
16236
|
const summaryData = this.showSummary();
|
|
15663
16237
|
this.serviceApiData.configs = [];
|
|
15664
16238
|
await this.createInterceptConfig(summaryData);
|
|
@@ -15793,11 +16367,93 @@ class SimpleServiceComponent extends ProjectableForm {
|
|
|
15793
16367
|
/// Do nothing, stay on page
|
|
15794
16368
|
}
|
|
15795
16369
|
else {
|
|
15796
|
-
this.
|
|
16370
|
+
this.router?.navigateByUrl(`${this.basePath}`);
|
|
15797
16371
|
}
|
|
15798
16372
|
});
|
|
15799
16373
|
return summaryData;
|
|
15800
16374
|
}
|
|
16375
|
+
async checkNameConflicts() {
|
|
16376
|
+
const filter = {
|
|
16377
|
+
filterName: 'name',
|
|
16378
|
+
columnId: 'name',
|
|
16379
|
+
value: this.serviceApiData.name,
|
|
16380
|
+
label: '',
|
|
16381
|
+
type: 'TEXTINPUT',
|
|
16382
|
+
hidden: false,
|
|
16383
|
+
verb: '='
|
|
16384
|
+
};
|
|
16385
|
+
const results = {
|
|
16386
|
+
serviceConflict: false,
|
|
16387
|
+
interceptConflict: false,
|
|
16388
|
+
hostConflict: false,
|
|
16389
|
+
dialPolicyConflict: false,
|
|
16390
|
+
bindPolicyConflict: false,
|
|
16391
|
+
names: []
|
|
16392
|
+
};
|
|
16393
|
+
const paging = cloneDeep(this.zitiService.DEFAULT_PAGING);
|
|
16394
|
+
paging.noSearch = false;
|
|
16395
|
+
const serviceProm = this.zitiService.get('services', paging, [filter]).then((result) => {
|
|
16396
|
+
if (result.data?.length > 0) {
|
|
16397
|
+
results.serviceConflict = true;
|
|
16398
|
+
results.names.push(this.serviceApiData.name);
|
|
16399
|
+
}
|
|
16400
|
+
});
|
|
16401
|
+
filter.value = this.interceptConfigApiData.name;
|
|
16402
|
+
const interceptProm = this.zitiService.get('configs', paging, [filter]).then((result) => {
|
|
16403
|
+
if (result.data?.length > 0) {
|
|
16404
|
+
results.interceptConflict = true;
|
|
16405
|
+
results.names.push(this.interceptConfigApiData.name);
|
|
16406
|
+
}
|
|
16407
|
+
});
|
|
16408
|
+
filter.value = this.hostConfigApiData.name;
|
|
16409
|
+
const hostProm = this.zitiService.get('configs', paging, [filter]).then((result) => {
|
|
16410
|
+
if (result.data?.length > 0) {
|
|
16411
|
+
results.hostConflict = true;
|
|
16412
|
+
results.names.push(this.hostConfigApiData.name);
|
|
16413
|
+
}
|
|
16414
|
+
});
|
|
16415
|
+
filter.value = this.dialPolicyApiData.name;
|
|
16416
|
+
const dialProm = this.zitiService.get('service-policies', paging, [filter]).then((result) => {
|
|
16417
|
+
if (result.data?.length > 0) {
|
|
16418
|
+
results.dialPolicyConflict = true;
|
|
16419
|
+
results.names.push(this.dialPolicyApiData.name);
|
|
16420
|
+
}
|
|
16421
|
+
});
|
|
16422
|
+
filter.value = this.bindPolicyApiData.name;
|
|
16423
|
+
const bindProm = this.zitiService.get('service-policies', paging, [filter]).then((result) => {
|
|
16424
|
+
if (result.data?.length > 0) {
|
|
16425
|
+
results.bindPolicyConflict = true;
|
|
16426
|
+
results.names.push(this.bindPolicyApiData.name);
|
|
16427
|
+
}
|
|
16428
|
+
});
|
|
16429
|
+
return Promise.all([serviceProm, interceptProm, hostProm, dialProm, bindProm]).then(() => {
|
|
16430
|
+
let hasConflict = results.names.length > 0;
|
|
16431
|
+
if (hasConflict) {
|
|
16432
|
+
this.errors.name = true;
|
|
16433
|
+
this.showConflictWarning(results);
|
|
16434
|
+
}
|
|
16435
|
+
return hasConflict;
|
|
16436
|
+
});
|
|
16437
|
+
}
|
|
16438
|
+
showConflictWarning(conflictData) {
|
|
16439
|
+
const data = {
|
|
16440
|
+
appendId: 'SimpleServiceConflicts',
|
|
16441
|
+
title: 'Name Conflict',
|
|
16442
|
+
message: `The name you have entered has conflicts for the following entities`,
|
|
16443
|
+
bulletList: conflictData.names,
|
|
16444
|
+
submessage: `Please update the entered name and try again.`,
|
|
16445
|
+
confirmLabel: 'Return',
|
|
16446
|
+
showCancelLink: false,
|
|
16447
|
+
imageUrl: '../../assets/svgs/Growl_Error.svg'
|
|
16448
|
+
};
|
|
16449
|
+
this.dialogRef = this.dialogForm.open(ConfirmComponent, {
|
|
16450
|
+
data: data,
|
|
16451
|
+
autoFocus: false,
|
|
16452
|
+
});
|
|
16453
|
+
this.dialogRef.afterClosed(() => {
|
|
16454
|
+
this.nameFieldInput.nativeElement.focus();
|
|
16455
|
+
});
|
|
16456
|
+
}
|
|
15801
16457
|
async createInterceptConfig(summaryData) {
|
|
15802
16458
|
if (this.sdkOnlyDial) {
|
|
15803
16459
|
return;
|
|
@@ -17202,11 +17858,11 @@ class ServicePoliciesPageComponent extends ListPageComponent {
|
|
|
17202
17858
|
this.svc.serviceType = event;
|
|
17203
17859
|
}
|
|
17204
17860
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePoliciesPageComponent, deps: [{ token: ServicePoliciesPageService }, { token: DataTableFilterService }, { token: i3$2.MatDialog }, { token: TabNameService }, { token: ConsoleEventsService }, { token: ZAC_WRAPPER_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17205
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicePoliciesPageComponent, selector: "lib-service-policies-page", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-service-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'
|
|
17861
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicePoliciesPageComponent, selector: "lib-service-policies-page", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-service-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'service-policies'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Service Policies defined, Click the plus to add a Service Policy.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
|
|
17206
17862
|
}
|
|
17207
17863
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePoliciesPageComponent, decorators: [{
|
|
17208
17864
|
type: Component,
|
|
17209
|
-
args: [{ selector: 'lib-service-policies-page', template: "<div class=\"ziti-page-container ziti-service-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'
|
|
17865
|
+
args: [{ selector: 'lib-service-policies-page', template: "<div class=\"ziti-page-container ziti-service-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'service-policies'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Service Policies defined, Click the plus to add a Service Policy.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n" }]
|
|
17210
17866
|
}], ctorParameters: function () { return [{ type: ServicePoliciesPageService }, { type: DataTableFilterService }, { type: i3$2.MatDialog }, { type: TabNameService }, { type: ConsoleEventsService }, { type: ZacWrapperServiceClass, decorators: [{
|
|
17211
17867
|
type: Inject,
|
|
17212
17868
|
args: [ZAC_WRAPPER_SERVICE]
|
|
@@ -17451,8 +18107,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
17451
18107
|
}] }]; } });
|
|
17452
18108
|
|
|
17453
18109
|
class ServicePolicyFormComponent extends ProjectableForm {
|
|
17454
|
-
constructor(settingsService, svc, zitiService, growlerService, extService, router, route) {
|
|
17455
|
-
super(growlerService, extService, zitiService, router, route);
|
|
18110
|
+
constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
|
|
18111
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
17456
18112
|
this.settingsService = settingsService;
|
|
17457
18113
|
this.svc = svc;
|
|
17458
18114
|
this.zitiService = zitiService;
|
|
@@ -17589,6 +18245,7 @@ class ServicePolicyFormComponent extends ProjectableForm {
|
|
|
17589
18245
|
this.closeModal(true, true);
|
|
17590
18246
|
}
|
|
17591
18247
|
const data = result?.data?.id ? result.data : result;
|
|
18248
|
+
this._dataChange = false;
|
|
17592
18249
|
if (!isEmpty(data.id)) {
|
|
17593
18250
|
this.formData = data || this.formData;
|
|
17594
18251
|
this.initData = this.formData;
|
|
@@ -17672,13 +18329,13 @@ class ServicePolicyFormComponent extends ProjectableForm {
|
|
|
17672
18329
|
}
|
|
17673
18330
|
clear() {
|
|
17674
18331
|
}
|
|
17675
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ServicePolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: SERVICE_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18332
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ServicePolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: SERVICE_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17676
18333
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicePolicyFormComponent, selector: "lib-service-policy-form", inputs: { formData: "formData" }, outputs: { close: "close" }, providers: [
|
|
17677
18334
|
{
|
|
17678
18335
|
provide: MatDialogRef,
|
|
17679
18336
|
useValue: {}
|
|
17680
18337
|
}
|
|
17681
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [""], 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: 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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["hideOption", "label", "clickable", "isLoading", "allNames", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }] }); }
|
|
18338
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [""], 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: 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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }] }); }
|
|
17682
18339
|
}
|
|
17683
18340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePolicyFormComponent, decorators: [{
|
|
17684
18341
|
type: Component,
|
|
@@ -17697,7 +18354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
17697
18354
|
}] }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
17698
18355
|
type: Inject,
|
|
17699
18356
|
args: [SERVICE_POLICY_EXTENSION_SERVICE]
|
|
17700
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
18357
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
17701
18358
|
type: Input
|
|
17702
18359
|
}], close: [{
|
|
17703
18360
|
type: Output
|
|
@@ -17889,8 +18546,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
17889
18546
|
}] }]; } });
|
|
17890
18547
|
|
|
17891
18548
|
class EdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
17892
|
-
constructor(settingsService, svc, zitiService, growlerService, extService, router, route) {
|
|
17893
|
-
super(growlerService, extService, zitiService, router, route);
|
|
18549
|
+
constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
|
|
18550
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
17894
18551
|
this.settingsService = settingsService;
|
|
17895
18552
|
this.svc = svc;
|
|
17896
18553
|
this.zitiService = zitiService;
|
|
@@ -18027,11 +18684,8 @@ class EdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
|
18027
18684
|
this.isLoading = true;
|
|
18028
18685
|
this.applySelectedAttributes();
|
|
18029
18686
|
this.svc.save(this.formData).then((result) => {
|
|
18030
|
-
if (result?.close) {
|
|
18031
|
-
this.closeModal(true, true);
|
|
18032
|
-
this.returnToListPage();
|
|
18033
|
-
}
|
|
18034
18687
|
const data = result?.data?.id ? result.data : result;
|
|
18688
|
+
this._dataChange = false;
|
|
18035
18689
|
if (!isEmpty(data.id)) {
|
|
18036
18690
|
this.formData = data || this.formData;
|
|
18037
18691
|
this.initData = this.formData;
|
|
@@ -18039,6 +18693,10 @@ class EdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
|
18039
18693
|
else {
|
|
18040
18694
|
this.initData = this.formData;
|
|
18041
18695
|
}
|
|
18696
|
+
if (result?.close) {
|
|
18697
|
+
this.closeModal(true, true);
|
|
18698
|
+
this.returnToListPage();
|
|
18699
|
+
}
|
|
18042
18700
|
}).finally(() => {
|
|
18043
18701
|
this.isLoading = false;
|
|
18044
18702
|
});
|
|
@@ -18108,13 +18766,13 @@ ${this.formData.id ? '--request PATCH \\' : ''}
|
|
|
18108
18766
|
}
|
|
18109
18767
|
clear() {
|
|
18110
18768
|
}
|
|
18111
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterPolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: EdgeRouterPolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: EDGE_ROUTER_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18769
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterPolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: EdgeRouterPolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: EDGE_ROUTER_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18112
18770
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EdgeRouterPolicyFormComponent, selector: "lib-edge-router-policy-form", inputs: { formData: "formData" }, outputs: { close: "close" }, providers: [
|
|
18113
18771
|
{
|
|
18114
18772
|
provide: MatDialogRef,
|
|
18115
18773
|
useValue: {}
|
|
18116
18774
|
}
|
|
18117
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [""], 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: 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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["
|
|
18775
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [""], 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: 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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }] }); }
|
|
18118
18776
|
}
|
|
18119
18777
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterPolicyFormComponent, decorators: [{
|
|
18120
18778
|
type: Component,
|
|
@@ -18133,7 +18791,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
18133
18791
|
}] }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
18134
18792
|
type: Inject,
|
|
18135
18793
|
args: [EDGE_ROUTER_POLICY_EXTENSION_SERVICE]
|
|
18136
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
18794
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
18137
18795
|
type: Input
|
|
18138
18796
|
}], close: [{
|
|
18139
18797
|
type: Output
|
|
@@ -18796,8 +19454,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
18796
19454
|
}] }]; } });
|
|
18797
19455
|
|
|
18798
19456
|
class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
18799
|
-
constructor(settingsService, svc, zitiService, growlerService, extService, router, route) {
|
|
18800
|
-
super(growlerService, extService, zitiService, router, route);
|
|
19457
|
+
constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
|
|
19458
|
+
super(growlerService, extService, zitiService, router, route, location);
|
|
18801
19459
|
this.settingsService = settingsService;
|
|
18802
19460
|
this.svc = svc;
|
|
18803
19461
|
this.zitiService = zitiService;
|
|
@@ -18933,11 +19591,8 @@ class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
|
18933
19591
|
this.isLoading = true;
|
|
18934
19592
|
this.applySelectedAttributes();
|
|
18935
19593
|
this.svc.save(this.formData).then((result) => {
|
|
18936
|
-
if (result?.close) {
|
|
18937
|
-
this.closeModal(true, true);
|
|
18938
|
-
this.returnToListPage();
|
|
18939
|
-
}
|
|
18940
19594
|
const data = result?.data?.id ? result.data : result;
|
|
19595
|
+
this._dataChange = false;
|
|
18941
19596
|
if (!isEmpty(data.id)) {
|
|
18942
19597
|
this.formData = data || this.formData;
|
|
18943
19598
|
this.initData = this.formData;
|
|
@@ -18945,6 +19600,10 @@ class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
|
18945
19600
|
else {
|
|
18946
19601
|
this.initData = this.formData;
|
|
18947
19602
|
}
|
|
19603
|
+
if (result?.close) {
|
|
19604
|
+
this.closeModal(true, true);
|
|
19605
|
+
this.returnToListPage();
|
|
19606
|
+
}
|
|
18948
19607
|
}).finally(() => {
|
|
18949
19608
|
this.isLoading = false;
|
|
18950
19609
|
});
|
|
@@ -19013,13 +19672,13 @@ ${this.formData.id ? '--request PATCH \\' : ''}
|
|
|
19013
19672
|
}
|
|
19014
19673
|
clear() {
|
|
19015
19674
|
}
|
|
19016
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ServiceEdgeRouterPolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19675
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ServiceEdgeRouterPolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: GrowlerService }, { token: SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i1$4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19017
19676
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServiceEdgeRouterPolicyFormComponent, selector: "lib-service-edge-router-policy-form", inputs: { formData: "formData" }, outputs: { close: "close" }, providers: [
|
|
19018
19677
|
{
|
|
19019
19678
|
provide: MatDialogRef,
|
|
19020
19679
|
useValue: {}
|
|
19021
19680
|
}
|
|
19022
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select
|
|
19681
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>", styles: [""], 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: 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.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", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }] }); }
|
|
19023
19682
|
}
|
|
19024
19683
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPolicyFormComponent, decorators: [{
|
|
19025
19684
|
type: Component,
|
|
@@ -19028,7 +19687,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
19028
19687
|
provide: MatDialogRef,
|
|
19029
19688
|
useValue: {}
|
|
19030
19689
|
}
|
|
19031
|
-
], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select
|
|
19690
|
+
], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Edge Router Policy: ' : 'Create New Service Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-edge-router-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this service edge edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [helpText]=\"'Preview list of all Services that this Service Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"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>" }]
|
|
19032
19691
|
}], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
|
|
19033
19692
|
type: Inject,
|
|
19034
19693
|
args: [SETTINGS_SERVICE]
|
|
@@ -19038,7 +19697,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
19038
19697
|
}] }, { type: GrowlerService }, { type: undefined, decorators: [{
|
|
19039
19698
|
type: Inject,
|
|
19040
19699
|
args: [SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE]
|
|
19041
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, propDecorators: { formData: [{
|
|
19700
|
+
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i1$4.Location }]; }, propDecorators: { formData: [{
|
|
19042
19701
|
type: Input
|
|
19043
19702
|
}], close: [{
|
|
19044
19703
|
type: Output
|
|
@@ -20825,11 +21484,12 @@ class ZitiControllerDataService extends ZitiDataService {
|
|
|
20825
21484
|
let filterVal = '';
|
|
20826
21485
|
switch (filter.type) {
|
|
20827
21486
|
case 'TEXTINPUT':
|
|
20828
|
-
|
|
21487
|
+
const verb = filter.verb ? filter.verb : 'contains';
|
|
21488
|
+
filterVal = `${filter.columnId} ${verb} "${filter.value}"`;
|
|
20829
21489
|
break;
|
|
20830
21490
|
case 'SELECT':
|
|
20831
21491
|
case 'COMBO':
|
|
20832
|
-
const val = isNumber(filter.value) ? `${filter.value}` : `"${filter.value}"`;
|
|
21492
|
+
const val = (isNumber(filter.value) || isBoolean(filter.value)) ? `${filter.value}` : `"${filter.value}"`;
|
|
20833
21493
|
filterVal = `${filter.columnId} = ${val}`;
|
|
20834
21494
|
break;
|
|
20835
21495
|
case 'DATETIME':
|
|
@@ -20838,6 +21498,9 @@ class ZitiControllerDataService extends ZitiDataService {
|
|
|
20838
21498
|
case 'ATTRIBUTE':
|
|
20839
21499
|
filterVal = this.getAttributeFilter(filter.value, filter.columnId);
|
|
20840
21500
|
break;
|
|
21501
|
+
case 'BOOLEAN':
|
|
21502
|
+
filterVal = `${filter.columnId}=${filter.value}`;
|
|
21503
|
+
break;
|
|
20841
21504
|
default:
|
|
20842
21505
|
filterVal = `${filter.columnId} contains "${filter.value}"`;
|
|
20843
21506
|
break;
|
|
@@ -20917,5 +21580,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
20917
21580
|
* Generated bundle index. Do not edit.
|
|
20918
21581
|
*/
|
|
20919
21582
|
|
|
20920
|
-
export { BooleanToggleInputComponent, COMPONENTS, CardListComponent, CheckboxListInputComponent, ConfigurationFormComponent, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, IDENTITY_EXTENSION_SERVICE, IdentitiesPageComponent, IdentitiesPageService, Identity$1 as Identity, IdentityFormComponent, IdentityFormService, IdentityServicePathComponent, ListPageComponent, ListPageServiceClass, LoadingIndicatorComponent, LoggerService, LoginServiceClass, NetworkVisualizerComponent, NodeDataService, NodeWrapperService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, ProjectableForm, ProtocolAddressPortInputComponent, ResetEnrollmentService, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE, SERVICE_EXTENSION_SERVICE, SERVICE_POLICY_EXTENSION_SERVICE, SETTINGS_SERVICE, SHAREDZ_EXTENSION, SelectorInputComponent, ServiceEdgeRouterPoliciesPageComponent, ServiceEdgeRouterPoliciesPageService, ServiceEdgeRouterPolicyFormComponent, ServiceEdgeRouterPolicyFormService, ServiceFormComponent, ServiceFormService, ServicePoliciesPageComponent, ServicePoliciesPageService, ServicePolicyFormComponent, ServicePolicyFormService, ServicesPageComponent, ServicesPageService, SettingsService, SettingsServiceClass, SideBannerComponent, SideModalComponent, SideNavbarComponent, SideToolbarComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TextListInputComponent, VERSION, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_WRAPPER_SERVICE, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZacWrapperComponent, ZacWrapperService, ZacWrapperServiceClass, ZitiControllerDataService, ZitiDataService, playerFactory };
|
|
21583
|
+
export { BooleanToggleInputComponent, COMPONENTS, CardListComponent, CheckboxListInputComponent, ConfigurationFormComponent, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, IDENTITY_EXTENSION_SERVICE, IdentitiesPageComponent, IdentitiesPageService, Identity$1 as Identity, IdentityFormComponent, IdentityFormService, IdentityServicePathComponent, ListPageComponent, ListPageServiceClass, LoadingIndicatorComponent, LoggerService, LoginServiceClass, NetworkVisualizerComponent, NodeDataService, NodeWrapperService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, ProjectableForm, ProtocolAddressPortInputComponent, ResetEnrollmentService, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE, SERVICE_EXTENSION_SERVICE, SERVICE_POLICY_EXTENSION_SERVICE, SETTINGS_SERVICE, SHAREDZ_EXTENSION, SelectorInputComponent, ServiceEdgeRouterPoliciesPageComponent, ServiceEdgeRouterPoliciesPageService, ServiceEdgeRouterPolicyFormComponent, ServiceEdgeRouterPolicyFormService, ServiceFormComponent, ServiceFormService, ServicePoliciesPageComponent, ServicePoliciesPageService, ServicePolicyFormComponent, ServicePolicyFormService, ServicesPageComponent, ServicesPageService, SettingsService, SettingsServiceClass, SideBannerComponent, SideModalComponent, SideNavbarComponent, SideToolbarComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TextListInputComponent, VERSION, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_WRAPPER_SERVICE, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZacWrapperComponent, ZacWrapperService, ZacWrapperServiceClass, ZitiControllerDataService, ZitiDataService, playerFactory };
|
|
20921
21584
|
//# sourceMappingURL=openziti-ziti-console-lib.mjs.map
|