@openziti/ziti-console-lib 0.4.6 → 0.4.7

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.
Files changed (42) hide show
  1. package/assets/images/visualizer/node-click.png +0 -0
  2. package/assets/styles/ziti.css +1 -0
  3. package/assets/svgs/cursor-pointer.svg +1 -0
  4. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -2
  5. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -2
  6. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +3 -3
  7. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -1
  8. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +3 -1
  9. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +7 -7
  10. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +441 -259
  11. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +180 -63
  12. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +307 -118
  13. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -1
  14. package/esm2022/lib/pages/identities/identities-page.component.mjs +4 -4
  15. package/esm2022/lib/pages/identities/identities-page.service.mjs +11 -1
  16. package/esm2022/lib/services/ziti-controller-data.service.mjs +6 -3
  17. package/esm2022/lib/shared/list-page-component.class.mjs +6 -4
  18. package/esm2022/public-api.mjs +2 -1
  19. package/fesm2022/openziti-ziti-console-lib.mjs +966 -458
  20. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  21. package/lib/features/data-table/data-table-filter.service.d.ts +1 -0
  22. package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
  23. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
  24. package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
  25. package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
  26. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  27. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +36 -20
  28. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
  29. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +42 -1
  30. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
  31. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +6 -2
  32. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +1 -1
  33. package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
  34. package/lib/pages/identities/identities-page.component.d.ts +1 -1
  35. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  36. package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
  37. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  38. package/lib/shared/list-page-component.class.d.ts +3 -1
  39. package/lib/shared/list-page-component.class.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/public-api.d.ts +1 -0
  42. package/public-api.d.ts.map +1 -1
@@ -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) {
@@ -2301,7 +2303,7 @@ class DataTableFilterService {
2301
2303
  this.pageChanged = new BehaviorSubject(this.currentPage);
2302
2304
  }
2303
2305
  updateFilter(filterObj) {
2304
- if (isEmpty(filterObj.value) && isNaN(filterObj.value))
2306
+ if (isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === ''))
2305
2307
  this.removeFilter(filterObj);
2306
2308
  else {
2307
2309
  let isFound = false;
@@ -2589,11 +2591,12 @@ ListPageServiceClass = __decorate([
2589
2591
  ], ListPageServiceClass);
2590
2592
 
2591
2593
  class ListPageComponent {
2592
- constructor(filterService, svc, consoleEvents, dialogForm) {
2594
+ constructor(filterService, svc, consoleEvents, dialogForm, extensionService) {
2593
2595
  this.filterService = filterService;
2594
2596
  this.svc = svc;
2595
2597
  this.consoleEvents = consoleEvents;
2596
2598
  this.dialogForm = dialogForm;
2599
+ this.extensionService = extensionService;
2597
2600
  this.startCount = '-';
2598
2601
  this.endCount = '-';
2599
2602
  this.totalCount = '-';
@@ -2612,6 +2615,7 @@ class ListPageComponent {
2612
2615
  this.svc.refreshData = this.refreshData.bind(this);
2613
2616
  this.columnDefs = this.svc.initTableColumns();
2614
2617
  this.filterService.clearFilters();
2618
+ this.extensionService?.extendOnInit();
2615
2619
  this.subscription.add(this.filterService.filtersChanged.subscribe(filters => {
2616
2620
  this.filterApplied = filters && filters.length > 0;
2617
2621
  this.refreshData();
@@ -2716,12 +2720,12 @@ class ListPageComponent {
2716
2720
  this.gridObj?.api?.refreshCells(params);
2717
2721
  });
2718
2722
  }
2719
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, deps: [{ token: DataTableFilterService }, { token: ListPageServiceClass }, { token: ConsoleEventsService }, { token: i3$2.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
2723
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
2720
2724
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent }); }
2721
2725
  }
2722
2726
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, decorators: [{
2723
2727
  type: Injectable
2724
- }], ctorParameters: function () { return [{ type: DataTableFilterService }, { type: ListPageServiceClass }, { type: ConsoleEventsService }, { type: i3$2.MatDialog }]; } });
2728
+ }], ctorParameters: function () { return [{ type: DataTableFilterService }, { type: ListPageServiceClass }, { type: ConsoleEventsService }, { type: i3$2.MatDialog }, { type: undefined }]; } });
2725
2729
 
2726
2730
  /*
2727
2731
  Copyright NetFoundry Inc.
@@ -4330,6 +4334,7 @@ class ConfigurationsPageService extends ListPageServiceClass {
4330
4334
  throw new Error('no schema definition selected');
4331
4335
  }
4332
4336
  };
4337
+ this.getConfigTypes();
4333
4338
  }
4334
4339
  initTableColumns() {
4335
4340
  const typeRenderer = (row) => {
@@ -5258,6 +5263,15 @@ class IdentitiesPageService extends ListPageServiceClass {
5258
5263
  ],
5259
5264
  columnFilters,
5260
5265
  };
5266
+ const isAdminHeaderComponentParams = {
5267
+ filterType: 'SELECT',
5268
+ enableSorting: true,
5269
+ filterOptions: [
5270
+ { label: 'All', value: '' },
5271
+ { label: 'Admins', value: true },
5272
+ { label: 'Non-Admins', value: false },
5273
+ ]
5274
+ };
5261
5275
  return [
5262
5276
  {
5263
5277
  colId: 'name',
@@ -5338,6 +5352,7 @@ class IdentitiesPageService extends ListPageServiceClass {
5338
5352
  field: 'isAdmin',
5339
5353
  headerName: 'Is Admin',
5340
5354
  headerComponent: TableColumnDefaultComponent,
5355
+ headerComponentParams: isAdminHeaderComponentParams,
5341
5356
  resizable: true,
5342
5357
  sortable: true,
5343
5358
  sortColumn: this.sort.bind(this),
@@ -6416,7 +6431,9 @@ class FilterBarComponent {
6416
6431
  this.filterString = '';
6417
6432
  this.inputChangedDebounced = debounce(this.inputChanged.bind(this), 400);
6418
6433
  this.filterService.filtersChanged.subscribe(filters => {
6419
- this._filters = [...filters];
6434
+ this._filters = filters.filter((filter) => {
6435
+ return filter.hidden !== true;
6436
+ });
6420
6437
  let tmp = '';
6421
6438
  for (let idx = 0; idx < filters.length; idx++) {
6422
6439
  if (filters[idx].columnId === 'name') {
@@ -6490,11 +6507,11 @@ class HiddenColumnsBarComponent {
6490
6507
  this.columnVisibilityChanged.emit(event);
6491
6508
  }
6492
6509
  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 <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>", styles: [".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"] }] }); }
6510
+ 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
6511
  }
6495
6512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HiddenColumnsBarComponent, decorators: [{
6496
6513
  type: Component,
6497
- args: [{ selector: 'lib-table-hidden-columns-bar', template: "<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>", styles: [".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"] }]
6514
+ 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
6515
  }], propDecorators: { hiddenColumns: [{
6499
6516
  type: Input
6500
6517
  }], columnVisibilityChanged: [{
@@ -8467,13 +8484,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8467
8484
  args: [JsonEditorComponent, { static: false }]
8468
8485
  }] } });
8469
8486
 
8470
- class Config {
8487
+ let Config$1 = class Config {
8471
8488
  constructor() {
8472
8489
  this.name = '';
8473
8490
  this.data = {};
8474
8491
  this.configTypeId = '';
8475
8492
  }
8476
- }
8493
+ };
8477
8494
  ;
8478
8495
 
8479
8496
  class ConfigurationService {
@@ -8586,7 +8603,7 @@ class ConfigurationService {
8586
8603
  });
8587
8604
  }
8588
8605
  getConfigDataModel(formData, isUpdate) {
8589
- const saveModel = new Config();
8606
+ const saveModel = new Config$1();
8590
8607
  const modelProperties = keys(saveModel);
8591
8608
  modelProperties.forEach((prop) => {
8592
8609
  switch (prop) {
@@ -8841,7 +8858,7 @@ class ConfigurationFormComponent extends ProjectableForm {
8841
8858
  this.settings = {};
8842
8859
  this.selectedConfigTypeId = '';
8843
8860
  this.entityType = 'configs';
8844
- this.entityClass = Config;
8861
+ this.entityClass = Config$1;
8845
8862
  this._apiData = {};
8846
8863
  }
8847
8864
  ngOnInit() {
@@ -8936,6 +8953,8 @@ class ConfigurationFormComponent extends ProjectableForm {
8936
8953
  this.isLoading = false;
8937
8954
  });
8938
8955
  if (configId) {
8956
+ this.initData = this.formData;
8957
+ this._dataChange = false;
8939
8958
  if (this.isModal) {
8940
8959
  this.closeModal(true, true);
8941
8960
  }
@@ -10368,7 +10387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10368
10387
  */
10369
10388
  class IdentitiesPageComponent extends ListPageComponent {
10370
10389
  constructor(svc, filterService, dialogForm, tabNames, zacWrapperService, router, consoleEvents, extService) {
10371
- super(filterService, svc, consoleEvents, dialogForm);
10390
+ super(filterService, svc, consoleEvents, dialogForm, extService);
10372
10391
  this.svc = svc;
10373
10392
  this.tabNames = tabNames;
10374
10393
  this.zacWrapperService = zacWrapperService;
@@ -10547,11 +10566,11 @@ class IdentitiesPageComponent extends ListPageComponent {
10547
10566
  return true;
10548
10567
  }
10549
10568
  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"] }] }); }
10569
+ 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
10570
  }
10552
10571
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageComponent, decorators: [{
10553
10572
  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"] }]
10573
+ 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
10574
  }], ctorParameters: function () { return [{ type: IdentitiesPageService }, { type: DataTableFilterService }, { type: i3$2.MatDialog }, { type: TabNameService }, { type: ZacWrapperServiceClass, decorators: [{
10556
10575
  type: Inject,
10557
10576
  args: [ZAC_WRAPPER_SERVICE]
@@ -11705,6 +11724,13 @@ class Service {
11705
11724
  this.contextMenu = 'Yes';
11706
11725
  }
11707
11726
  }
11727
+ class Config {
11728
+ constructor() {
11729
+ this.rootNode = 'No';
11730
+ this.children = [];
11731
+ this.contextMenu = 'Yes';
11732
+ }
11733
+ }
11708
11734
  class Group {
11709
11735
  constructor(idv, s, g) {
11710
11736
  this.id = idv;
@@ -11749,16 +11775,118 @@ class ERouter {
11749
11775
  }
11750
11776
  class Children {
11751
11777
  constructor() {
11778
+ this.rootNode = 'No';
11779
+ this.firstChild = 'No';
11752
11780
  this.type = 'Children';
11753
11781
  this.children = [];
11754
11782
  }
11755
11783
  }
11756
11784
  class NetworkVisualizerHelper {
11757
- getResourceTreeObj(networkName, networkStatus, services, endpoints, appwans, edgerouters, edgeRouterPolicies, serviceEdgeRouterPolicies,
11785
+ constructor() {
11786
+ this.uniqIId = 0;
11787
+ }
11788
+ createUniqId() {
11789
+ return ++this.uniqIId;
11790
+ }
11791
+ createEdgeRouterNode(er, isRootNode = 'Yes') {
11792
+ const erOb = new ERouter();
11793
+ // erOb.id = createId();
11794
+ erOb.uuid = er.id;
11795
+ erOb.name = er.name;
11796
+ erOb.verified = er.isVerified ? 'Yes' : 'No';
11797
+ //erOb.version = er.productVersion;
11798
+ erOb.online = er.isOnline ? 'Yes' : 'No';
11799
+ erOb.disabled = er.disabled ? 'Yes' : 'No';
11800
+ erOb.type = 'Edge Router';
11801
+ erOb.rootNode = isRootNode;
11802
+ erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
11803
+ erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
11804
+ erOb.createdAt = er.createdAt;
11805
+ erOb.updatedAt = er.updatedAt;
11806
+ return erOb;
11807
+ }
11808
+ createServiceEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
11809
+ const serviceerpolicy = new ServiceERPolicy();
11810
+ // serviceerpolicy.id = createId();
11811
+ serviceerpolicy.uuid = rawObj.id;
11812
+ serviceerpolicy.name = rawObj.name;
11813
+ serviceerpolicy.type = 'Service Router Policy';
11814
+ serviceerpolicy.rootNode = isRootNode;
11815
+ return serviceerpolicy;
11816
+ }
11817
+ createEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
11818
+ const erpolicy = new ERPolicy();
11819
+ // erpolicy.id = createId();
11820
+ erpolicy.uuid = rawObj.id;
11821
+ erpolicy.name = rawObj.name;
11822
+ erpolicy.type = 'Router Policy';
11823
+ erpolicy.rootNode = isRootNode;
11824
+ erpolicy.isSystem = rawObj.isSystem;
11825
+ erpolicy.semantic = rawObj.semantic;
11826
+ return erpolicy;
11827
+ }
11828
+ createServicePolicyNode(rawObj, isRootNode = 'Yes') {
11829
+ const bindGrp = new Group(43423, 'Bind-Policies', 'Bind Service Policy');
11830
+ const dialGrp = new Group(43545, 'Dial-Policies', 'Dial Service Policy');
11831
+ const spolicy = new ServicePolicy$1();
11832
+ // spolicy.id = createId();
11833
+ spolicy.id = 87956;
11834
+ spolicy.uuid = rawObj.id;
11835
+ spolicy.name = rawObj.name;
11836
+ spolicy.type = 'Service Policy';
11837
+ spolicy.rootNode = isRootNode;
11838
+ spolicy.clickProcess = "Not Yet";
11839
+ if (rawObj.type === 'Bind') {
11840
+ bindGrp.children.push(spolicy);
11841
+ return bindGrp;
11842
+ }
11843
+ else {
11844
+ dialGrp.children.push(spolicy);
11845
+ return dialGrp;
11846
+ }
11847
+ }
11848
+ createIdentityNode(rawObj, isRootNode = 'Yes') {
11849
+ const endpoint = new Identity();
11850
+ endpoint.rootNode = isRootNode;
11851
+ // endpoint.id = createId();
11852
+ endpoint.id = 5432;
11853
+ endpoint.uuid = rawObj.id;
11854
+ endpoint.name = rawObj.name;
11855
+ endpoint.online = rawObj.hasApiSession === true ? 'Yes' : 'No';
11856
+ endpoint.type = 'Identity';
11857
+ endpoint.createdAt = rawObj.createdAt;
11858
+ endpoint.updatedAt = rawObj.updatedAt;
11859
+ endpoint.status = rawObj.sdkInfo !== null ? 'Registered' : 'Not Registered';
11860
+ if (rawObj.sdkInfo) {
11861
+ endpoint.os = rawObj.sdkInfo.type ? rawObj.sdkInfo.type : rawObj.sdkInfo.appId;
11862
+ endpoint.osVersion = rawObj.sdkInfo.version;
11863
+ }
11864
+ if (rawObj.authPolicy && rawObj.authPolicy.name.includes("BrowZer")) {
11865
+ endpoint.type = 'BrowZer Identity';
11866
+ }
11867
+ return endpoint;
11868
+ }
11869
+ createServiceNode(rawObj, isRootNode = 'Yes') {
11870
+ const serviceobj = new Service();
11871
+ // serviceobj.id = createId();
11872
+ serviceobj.name = rawObj.name;
11873
+ serviceobj.uuid = rawObj.id;
11874
+ serviceobj.type = 'Service';
11875
+ serviceobj.rootNode = isRootNode;
11876
+ const attributeswithName = [];
11877
+ // attributeswithName.push('@' + rawObj.name);
11878
+ rawObj && rawObj.roleAttributes && rawObj.roleAttributes.find((srattr) => {
11879
+ attributeswithName.push(srattr);
11880
+ });
11881
+ return serviceobj;
11882
+ }
11883
+ getResourceTreeObj(networkName, networkStatus, services, identities, servicePolicies, edgerouters, edgeRouterPolicies, serviceEdgeRouterPolicies,
11758
11884
  // networkProductVersion,
11759
- uniqId, logger) {
11885
+ services_totalCount, identities_totalCount, edgerouters_totalCount, service_policies_totalCount, edge_router_policies_totalCount, service_router_policies_totalCount, uniqId, logger, ...args) {
11886
+ this.uniqIId = uniqId;
11760
11887
  function createId() {
11761
11888
  ++uniqId;
11889
+ // ++this.uniqIId;
11762
11890
  return uniqId;
11763
11891
  }
11764
11892
  class RootJson {
@@ -11768,13 +11896,16 @@ class NetworkVisualizerHelper {
11768
11896
  this.children = [];
11769
11897
  this.contextMenu = 'Yes';
11770
11898
  this.type = 'Network';
11899
+ this.rootNode = 'No';
11771
11900
  }
11772
11901
  }
11773
11902
  const rootJson = new RootJson();
11774
11903
  rootJson.name = 'Network';
11775
11904
  rootJson.status = 'Provisioned';
11776
- function processIdentitiesForTree(identitiesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
11777
- identitiesChildren.name = identitiesChildren.name + ' (' + ny + ')';
11905
+ function processIdentitiesForTree(identitiesChildren, identities, nx, ny) {
11906
+ if (args[2] === false)
11907
+ return identitiesChildren;
11908
+ // identitiesChildren.name = identitiesChildren.name + ' (' + ny + ')';
11778
11909
  const unregisteredGrp = new Group(createId(), 'Identities[Unregistered]', 'Identities that are not registered');
11779
11910
  const abcdGrp = new Group(createId(), 'Identities [A-D]', 'Identity name starts with A to D');
11780
11911
  const efghGrp = new Group(createId(), 'Identities [E-H]', 'Identity name starts with E to H');
@@ -11789,16 +11920,20 @@ class NetworkVisualizerHelper {
11789
11920
  const endpoint = new Identity();
11790
11921
  endpoint.rootNode = 'Yes';
11791
11922
  endpoint.id = createId();
11792
- endpoint.uuid = endpoints[j].id;
11793
- endpoint.name = endpoints[j].name;
11794
- endpoint.online = endpoints[j].hasApiSession === true ? 'Yes' : 'No';
11923
+ endpoint.uuid = identities[j].id;
11924
+ endpoint.name = identities[j].name;
11925
+ endpoint.online = identities[j].hasApiSession === true ? 'Yes' : 'No';
11795
11926
  endpoint.type = 'Identity';
11796
- endpoint.status = endpoints[j].osRelease !== null ? 'Registered' : 'Not Registered';
11797
- if (endpoints[j].osRelease === null && endpoints[j].type && endpoints[j].type.includes('browzer')) {
11798
- endpoint.status = 'Registered';
11799
- // endpoint.type = 'Browzer Endpoint';
11927
+ endpoint.createdAt = identities[j].createdAt;
11928
+ endpoint.updatedAt = identities[j].updatedAt;
11929
+ endpoint.status = identities[j].sdkInfo !== null ? 'Registered' : 'Not Registered';
11930
+ if (identities[j].sdkInfo) {
11931
+ endpoint.os = identities[j].sdkInfo.type ? identities[j].sdkInfo.type : identities[j].sdkInfo.appId;
11932
+ endpoint.osVersion = identities[j].sdkInfo.version;
11933
+ }
11934
+ if (identities[j].authPolicy && identities[j].authPolicy.name.includes("BrowZer")) {
11935
+ endpoint.type = 'BrowZer Identity';
11800
11936
  }
11801
- endpoint.os = endpoints[j].os;
11802
11937
  const cha = endpoint.name.charAt(0).toLowerCase();
11803
11938
  if (endpoint.status === 'Not Registered') {
11804
11939
  unregisteredGrp.children.push(endpoint);
@@ -11925,22 +12060,24 @@ class NetworkVisualizerHelper {
11925
12060
  for (let j = i; j < lastElement; j++) {
11926
12061
  chld.children.push(oneTo9Grp.children[j]);
11927
12062
  }
11928
- chld.name = chld.name + ' (' + chld.children.length + ')';
12063
+ // chld.name = chld.name + ' (' + chld.children.length + ')';
11929
12064
  identitiesChildren.children.push(chld);
11930
12065
  i = i + 80;
11931
12066
  }
11932
12067
  }
11933
12068
  return identitiesChildren;
11934
12069
  }
11935
- function processServicePoliciesForTree(servicePolicyChildren, edgerouters, identities, servicePolicies, services, edgeRouterPolicies, nx, ny) {
11936
- const bindGrp = new Group(createId(), 'BindPolicies', 'Bind Service Policy');
11937
- const dialGrp = new Group(createId(), 'DialPolicies', 'Dial Service Policy');
12070
+ function processServicePoliciesForTree(servicePolicyChildren, servicePolicies, nx, ny) {
12071
+ if (args[0] === false)
12072
+ return servicePolicyChildren;
12073
+ const bindGrp = new Group(createId(), 'Bind-Policies', 'Bind Service Policy');
12074
+ const dialGrp = new Group(createId(), 'Dial-Policies', 'Dial Service Policy');
11938
12075
  servicePolicies.forEach((sp) => {
11939
12076
  const spolicy = new ServicePolicy$1();
11940
12077
  spolicy.id = createId();
11941
12078
  spolicy.uuid = sp.id;
11942
12079
  spolicy.name = sp.name;
11943
- spolicy.type = 'ServicePolicy';
12080
+ spolicy.type = 'Service Policy';
11944
12081
  spolicy.rootNode = 'Yes';
11945
12082
  if (sp.type === 'Bind') {
11946
12083
  bindGrp.children.push(spolicy);
@@ -11953,7 +12090,6 @@ class NetworkVisualizerHelper {
11953
12090
  servicePolicyChildren.children.push(bindGrp);
11954
12091
  dialGrp.name = dialGrp.name + '(' + dialGrp.children.length + ')';
11955
12092
  servicePolicyChildren.children.push(dialGrp);
11956
- servicePolicyChildren.name = servicePolicyChildren.name + ' (' + (bindGrp.children.length + dialGrp.children.length) + ')';
11957
12093
  return servicePolicyChildren;
11958
12094
  }
11959
12095
  function serviceGrouping(servicesChildren, servicestree) {
@@ -12110,10 +12246,12 @@ class NetworkVisualizerHelper {
12110
12246
  oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';
12111
12247
  servicesChildren.children.push(oneTo9Grp);
12112
12248
  }
12113
- servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
12249
+ // servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
12114
12250
  return servicesChildren;
12115
12251
  }
12116
- function processServicesForTree(servicesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
12252
+ function processServicesForTree(servicesChildren, services, nx, ny) {
12253
+ if (args[1] === false)
12254
+ return servicesChildren;
12117
12255
  const servicestree = [];
12118
12256
  for (let i = nx; i < ny; i++) {
12119
12257
  const serviceobj = new Service();
@@ -12158,7 +12296,9 @@ class NetworkVisualizerHelper {
12158
12296
  } // end for loop
12159
12297
  return serviceGrouping(servicesChildren, servicestree);
12160
12298
  } // end of processServicesForTree
12161
- function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
12299
+ function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, nx, ny) {
12300
+ if (args[4] === false)
12301
+ return edgeRouterPoliciesChildren;
12162
12302
  for (let i = nx; i < ny; i++) {
12163
12303
  const erpolicy = new ERPolicy();
12164
12304
  erpolicy.id = createId();
@@ -12166,11 +12306,15 @@ class NetworkVisualizerHelper {
12166
12306
  erpolicy.name = edgeRouterPolicies[i].name;
12167
12307
  erpolicy.type = 'Router Policy';
12168
12308
  erpolicy.rootNode = 'Yes';
12309
+ erpolicy.isSystem = edgeRouterPolicies[i].isSystem;
12310
+ erpolicy.semantic = edgeRouterPolicies[i].semantic;
12169
12311
  edgeRouterPoliciesChildren.children.push(erpolicy);
12170
12312
  } // end of main for loop
12171
12313
  return edgeRouterPoliciesChildren;
12172
12314
  } // end
12173
- function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, serviceEdgeRouterPolicies, nx, ny) {
12315
+ function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, serviceEdgeRouterPolicies, nx, ny) {
12316
+ if (args[5] === false)
12317
+ return serviceEdgeRouterPoliciesChildren;
12174
12318
  for (let i = nx; i < ny; i++) {
12175
12319
  const serviceerpolicy = new ServiceERPolicy();
12176
12320
  serviceerpolicy.id = createId();
@@ -12182,7 +12326,9 @@ class NetworkVisualizerHelper {
12182
12326
  } // end of main for loop
12183
12327
  return serviceEdgeRouterPoliciesChildren;
12184
12328
  } // end
12185
- function processEdgeroutersForTree(edgerouterChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
12329
+ function processEdgeroutersForTree(edgerouterChildren, edgerouters, nx, ny) {
12330
+ if (args[3] === false)
12331
+ return edgerouterChildren;
12186
12332
  for (let i = nx; i < ny; i++) {
12187
12333
  const erOb = new ERouter();
12188
12334
  erOb.id = createId();
@@ -12196,60 +12342,50 @@ class NetworkVisualizerHelper {
12196
12342
  erOb.disabled = er.disabled ? 'Yes' : 'No';
12197
12343
  erOb.type = 'Edge Router';
12198
12344
  erOb.rootNode = 'Yes';
12199
- if (er.hostId !== null) {
12200
- // erOb.provider = findProviderNameForHostId(er.hostId);
12201
- }
12202
- else if (er.status === 'ERROR') {
12203
- erOb.provider = 'N/A';
12204
- }
12205
- else {
12206
- erOb.provider = 'Private DC';
12207
- }
12345
+ erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
12346
+ erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
12347
+ erOb.createdAt = er.createdAt;
12348
+ erOb.updatedAt = er.updatedAt;
12208
12349
  edgerouterChildren.children.push(erOb);
12209
12350
  }
12210
12351
  } // end main for loop
12211
12352
  return edgerouterChildren;
12212
12353
  }
12213
12354
  // createId() generates node Id 1,2,3,4,5 for the following five nodes. this id is used to search capability.
12214
- let appwansChildren = new Children();
12215
- appwansChildren.id = createId();
12216
- appwansChildren.name = 'Service Policies';
12355
+ let servicPoliciesChildren = new Children();
12356
+ servicPoliciesChildren.id = createId();
12357
+ servicPoliciesChildren.firstChild = 'Yes';
12358
+ servicPoliciesChildren.name = 'Service Policies(' + service_policies_totalCount + ')';
12217
12359
  let servicesChildren = new Children();
12218
12360
  servicesChildren.id = createId();
12219
- servicesChildren.name = 'Services';
12220
- let endpointsChildren = new Children();
12221
- endpointsChildren.id = createId();
12222
- endpointsChildren.name = 'Identities';
12361
+ servicesChildren.firstChild = 'Yes';
12362
+ servicesChildren.name = 'Services(' + services_totalCount + ')';
12363
+ let identitiesChildren = new Children();
12364
+ identitiesChildren.id = createId();
12365
+ identitiesChildren.firstChild = 'Yes';
12366
+ identitiesChildren.name = 'Identities(' + identities_totalCount + ')';
12223
12367
  let edgerouterChildren = new Children();
12224
12368
  edgerouterChildren.id = createId();
12225
- edgerouterChildren.name = 'Edge Routers';
12369
+ edgerouterChildren.firstChild = 'Yes';
12370
+ edgerouterChildren.name = 'Edge Routers(' + edgerouters_totalCount + ')';
12226
12371
  let edgeRouterPoliciesChildren = new Children();
12227
12372
  edgeRouterPoliciesChildren.id = createId();
12228
- edgeRouterPoliciesChildren.name = 'Edge Router Policies';
12373
+ edgeRouterPoliciesChildren.firstChild = 'Yes';
12374
+ edgeRouterPoliciesChildren.name = 'Edge Router Policies(' + edge_router_policies_totalCount + ')';
12229
12375
  let serviceEdgeRouterPolicesChildren = new Children();
12230
12376
  serviceEdgeRouterPolicesChildren.id = createId();
12231
- serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies';
12232
- servicesChildren = processServicesForTree(servicesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, services.length);
12233
- edgerouterChildren = processEdgeroutersForTree(edgerouterChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, edgerouters.length);
12234
- if (edgerouterChildren) {
12235
- edgerouterChildren.name = edgerouterChildren.name + ' (' + edgerouterChildren.children.length + ')';
12236
- }
12237
- appwansChildren = processServicePoliciesForTree(appwansChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, appwans.length);
12238
- edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, edgeRouterPolicies.length);
12239
- if (edgeRouterPoliciesChildren) {
12240
- edgeRouterPoliciesChildren.name =
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);
12377
+ serviceEdgeRouterPolicesChildren.firstChild = 'Yes';
12378
+ serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies(' + service_router_policies_totalCount + ')';
12379
+ servicesChildren = processServicesForTree(servicesChildren, services, 0, services.length);
12380
+ edgerouterChildren = processEdgeroutersForTree(edgerouterChildren, edgerouters, 0, edgerouters.length);
12381
+ servicPoliciesChildren = processServicePoliciesForTree(servicPoliciesChildren, servicePolicies, 0, servicePolicies.length);
12382
+ edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, 0, edgeRouterPolicies.length);
12383
+ identitiesChildren = processIdentitiesForTree(identitiesChildren, identities, 0, identities.length);
12384
+ //serviceRouterPolicies
12385
+ serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPolicesChildren, serviceEdgeRouterPolicies, 0, serviceEdgeRouterPolicies.length);
12386
+ rootJson.children.push(servicPoliciesChildren);
12251
12387
  rootJson.children.push(servicesChildren);
12252
- rootJson.children.push(endpointsChildren);
12388
+ rootJson.children.push(identitiesChildren);
12253
12389
  rootJson.children.push(edgerouterChildren);
12254
12390
  rootJson.children.push(edgeRouterPoliciesChildren);
12255
12391
  rootJson.children.push(serviceEdgeRouterPolicesChildren);
@@ -12292,7 +12428,6 @@ class TreeNodeProcessor {
12292
12428
  rawEpAttributes = rawEp.roleAttributes;
12293
12429
  }
12294
12430
  ;
12295
- rawEpAttributes.push('@' + rawEp.name);
12296
12431
  for (let i = 0; i < rawEpAttributes.length; i++) {
12297
12432
  const attribute = new Attribute();
12298
12433
  attribute.id = this.createId();
@@ -12305,67 +12440,60 @@ class TreeNodeProcessor {
12305
12440
  bindServices.id = this.createId();
12306
12441
  dialServices.id = this.createId();
12307
12442
  let identityServicePolicies = [];
12308
- const services_url = this.getLinkForResource(rawEp, 'service-policies').replace('./', '');
12309
12443
  const pagesize = 500;
12310
- const services_paging = this.getPagingObject(pagesize);
12444
+ // fetch associated routers
12445
+ const url = this.getLinkForResource(rawEp, 'edge-routers').replace('./', '');
12446
+ let associatedRouters = [];
12447
+ const paging = this.getPagingObject(pagesize);
12448
+ const erChailds = new Children();
12449
+ erChailds.id = this.createId();
12450
+ erChailds.name = 'Associated Routers';
12451
+ erChailds.type = 'Associated Routers';
12452
+ const associatedRoutersPromise = await zitiService.get(url, paging, [])
12453
+ .then((result) => {
12454
+ result.data.forEach((re) => {
12455
+ const tmp = new ERouter();
12456
+ tmp.id = this.createId();
12457
+ tmp.name = re.name;
12458
+ tmp.type = 'Router';
12459
+ erChailds.children.push(tmp);
12460
+ });
12461
+ });
12462
+ const policies_url = this.getLinkForResource(rawEp, 'service-policies').replace('./', '');
12463
+ const policies_paging = this.getPagingObject(pagesize);
12311
12464
  const firstPromise = await zitiService
12312
- .get(services_url, services_paging, [])
12313
- .then(async (result) => {
12465
+ .get(policies_url, policies_paging, [])
12466
+ .then((result) => {
12314
12467
  identityServicePolicies = result.data;
12315
- const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
12316
- const promises = [];
12317
- for (let page = 2; page <= pages; page++) {
12318
- services_paging.page = page;
12319
- const tmp_promise = await zitiService
12320
- .get(services_url, services_paging, [])
12321
- .then((pageResult) => {
12322
- pageResult.data.forEach((serv) => {
12323
- identityServicePolicies.push(serv);
12324
- });
12325
- });
12326
- promises.push(tmp_promise);
12327
- wait_promises.push(tmp_promise);
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
- });
12468
+ });
12469
+ const promises = [];
12470
+ identityServicePolicies.forEach((sp) => {
12471
+ const nodeArray = this.getServicesForAServicePolicy(sp, zitiService, 500);
12472
+ promises.push(nodeArray);
12473
+ });
12474
+ await Promise.all(promises).then((nodeArray) => {
12475
+ nodeArray.forEach((arOb) => {
12476
+ if (arOb[0] === 'Bind') {
12477
+ bindServices.children = this.arrayObjectCopyRightToLeft(bindServices.children, arOb[1]);
12478
+ }
12479
+ else {
12480
+ dialServices.children = this.arrayObjectCopyRightToLeft(dialServices.children, arOb[1]);
12481
+ }
12365
12482
  });
12366
12483
  });
12367
- wait_promises.push(firstPromise);
12368
12484
  Promise.all(wait_promises).then(() => {
12485
+ if (erChailds.children.length > 0) {
12486
+ erChailds.name = erChailds.name + '(' + erChailds.children.length + ')';
12487
+ identityNode.data.children.push(erChailds);
12488
+ }
12489
+ if (bindServices.children.length > 0) {
12490
+ bindServices.name = 'Bind-Services(' + bindServices.children.length + ')';
12491
+ identityNode.data.children.push(bindServices);
12492
+ }
12493
+ if (dialServices.children.length > 0) {
12494
+ dialServices.name = 'Dial-Services(' + dialServices.children.length + ')';
12495
+ identityNode.data.children.push(dialServices);
12496
+ }
12369
12497
  resolve('this is a promise');
12370
12498
  });
12371
12499
  });
@@ -12386,24 +12514,46 @@ class TreeNodeProcessor {
12386
12514
  serviceOb.type = 'Service';
12387
12515
  return serviceOb;
12388
12516
  }
12389
- addItemToArray(bindIdnetities, ob) {
12390
- if (!bindIdnetities.find((item) => item.uuid === ob.id)) {
12391
- const epOb = new Identity();
12392
- epOb.id = this.createId();
12393
- epOb.uuid = ob.id;
12394
- epOb.name = ob.name;
12395
- epOb.online = ob.hasApiSession === true ? 'Yes' : 'No';
12396
- epOb.type = 'Identity';
12397
- epOb.status = ob.os !== null ? 'Registered' : 'Not Registered';
12398
- epOb.os = ob.os;
12399
- bindIdnetities.push(epOb);
12517
+ arrayObjectCopyRightToLeft(leftArr, rightArr) {
12518
+ const leftArrIds = [];
12519
+ leftArr.forEach((ob) => {
12520
+ leftArrIds.push(ob.id);
12521
+ });
12522
+ rightArr.forEach((ob) => {
12523
+ if (!leftArr.includes(ob.id)) {
12524
+ leftArr.push(ob);
12525
+ }
12526
+ });
12527
+ return leftArr;
12528
+ }
12529
+ addItemToArray(Idnetities, ob) {
12530
+ if (ob.name && !Idnetities.find((item) => item.uuid === ob.id)) {
12531
+ Idnetities.push(this.createIdentity(ob));
12400
12532
  }
12401
- return bindIdnetities;
12533
+ return Idnetities;
12534
+ }
12535
+ createIdentity(ob) {
12536
+ const endpoint = new Identity();
12537
+ endpoint.id = this.createId();
12538
+ endpoint.uuid = ob.id;
12539
+ endpoint.name = ob.name;
12540
+ endpoint.online = ob.hasApiSession === true ? 'Yes' : 'No';
12541
+ endpoint.type = 'Identity';
12542
+ endpoint.status = ob.sdkInfo !== null ? 'Registered' : 'Not Registered';
12543
+ if (ob.sdkInfo) {
12544
+ endpoint.os = ob.sdkInfo.type ? ob.sdkInfo.type : ob.sdkInfo.appId;
12545
+ endpoint.osVersion = ob.sdkInfo.version;
12546
+ }
12547
+ if (ob.authPolicy && ob.authPolicy.name.includes("BrowZer")) {
12548
+ endpoint.type = 'BrowZer Identity';
12549
+ }
12550
+ endpoint.createdAt = ob.createdAt;
12551
+ endpoint.updatedAt = ob.updatedAt;
12552
+ return endpoint;
12402
12553
  }
12403
12554
  getLinkForResource(ob, resource) {
12404
12555
  return ob['_links'][resource]['href'];
12405
12556
  }
12406
- //Bind Dial Services
12407
12557
  findServicesHostedOnEndpoint(rawEp, services, servicePolicies, zitiService) {
12408
12558
  const servicesArr = [];
12409
12559
  const childrenNoGroups = [];
@@ -12495,28 +12645,55 @@ class TreeNodeProcessor {
12495
12645
  findRawEndpoint(epName, endpoints) {
12496
12646
  return endpoints.find((ep) => ep.name === epName);
12497
12647
  }
12648
+ serviceConfigAlias(configs) {
12649
+ let intercept = [];
12650
+ _.isArray(configs) && configs.forEach((conf) => {
12651
+ let addresses = '';
12652
+ let ports = '';
12653
+ if (conf.data.addresses) {
12654
+ addresses = conf.data.addresses.toString();
12655
+ }
12656
+ else {
12657
+ addresses = conf.data.address;
12658
+ }
12659
+ if (_.isArray(conf.data.portRanges)) {
12660
+ conf.data.portRanges.forEach((portsJson) => {
12661
+ for (const key in portsJson) {
12662
+ ports = ports + key + ':' + portsJson[key] + ' ';
12663
+ }
12664
+ ports = ports + ';';
12665
+ });
12666
+ }
12667
+ else {
12668
+ ports = conf.data.port;
12669
+ }
12670
+ intercept.push(addresses);
12671
+ intercept.push(ports);
12672
+ });
12673
+ return intercept;
12674
+ }
12498
12675
  async processServicesForNodeClick(serviceNode, networkGraph, services, uniqId, zitiService) {
12499
12676
  const myPromise = await new Promise(async (resolve, reject) => {
12500
12677
  const wait_promises = [];
12501
12678
  this.uniqId = uniqId;
12502
12679
  const rawServiceObj = services.find((s) => s.name === serviceNode.data.name);
12503
12680
  const attributeswithName = [];
12504
- attributeswithName.push('@' + rawServiceObj.name);
12505
12681
  rawServiceObj.roleAttributes && rawServiceObj.roleAttributes.find((srattr) => {
12506
12682
  attributeswithName.push(srattr);
12507
12683
  });
12508
12684
  const serviceAttributes = new Children();
12509
- serviceAttributes.type = 'ServiceAttributes';
12685
+ serviceAttributes.name = 'Attributes';
12686
+ serviceAttributes.type = 'Attributes';
12510
12687
  serviceAttributes.id = this.createId();
12511
12688
  for (let k = 0; k < attributeswithName.length; k++) {
12512
12689
  const attrOb = new Attribute();
12513
12690
  attrOb.id = this.createId();
12514
12691
  attrOb.name = attributeswithName[k];
12515
- attrOb.type = 'Service Attribute';
12692
+ attrOb.type = 'Attribute';
12516
12693
  serviceAttributes.children.push(attrOb);
12517
12694
  } // end inner for loop
12518
12695
  if (serviceAttributes.children.length > 0) {
12519
- serviceAttributes.name = 'Service Attributes(' + serviceAttributes.children.length + ')';
12696
+ serviceAttributes.name = serviceAttributes.name + '(' + serviceAttributes.children.length + ')';
12520
12697
  serviceNode.data.children.push(serviceAttributes);
12521
12698
  }
12522
12699
  let service_configs = [];
@@ -12527,48 +12704,118 @@ class TreeNodeProcessor {
12527
12704
  .get(configs_url, pagingOb, [])
12528
12705
  .then((configs) => {
12529
12706
  service_configs = configs && configs.data ? configs.data : [];
12707
+ const childs = new Children();
12708
+ childs.id = this.createId();
12709
+ childs.name = 'Service Configs';
12710
+ childs.type = 'Service Configs';
12711
+ const service_configs_Arr = [];
12712
+ service_configs.forEach((cfg) => {
12713
+ const obj = new Config();
12714
+ obj.id = this.createId();
12715
+ obj.name = cfg.name;
12716
+ obj.uuid = cfg.uuid;
12717
+ obj.data = JSON.stringify(cfg.data);
12718
+ service_configs_Arr.push(obj);
12719
+ });
12720
+ if (service_configs_Arr.length > 0) {
12721
+ childs.children = service_configs_Arr;
12722
+ childs.name = childs.name + '(' + childs.children.length + ')';
12723
+ serviceNode.data.children.push(childs);
12724
+ serviceNode.data.intercept = this.serviceConfigAlias(service_configs);
12725
+ }
12530
12726
  });
12531
12727
  wait_promises.push(configPromise);
12532
12728
  const service_edge_router_policies_url = this.getLinkForResource(rawServiceObj, 'service-edge-router-policies');
12729
+ let service_routers_urls = [];
12730
+ const ser_promse = await zitiService
12731
+ .get(service_edge_router_policies_url.replace('./', ''), pagingOb, [])
12732
+ .then((result) => {
12733
+ result.data.forEach((serp) => {
12734
+ service_routers_urls.push(this.getLinkForResource(serp, 'edge-routers'));
12735
+ });
12736
+ ;
12737
+ });
12738
+ wait_promises.push(ser_promse);
12739
+ let serp_page_Promises = [];
12740
+ service_routers_urls.forEach((er_url) => {
12741
+ const promse = zitiService
12742
+ .get(er_url.replace('./', ''), pagingOb, []);
12743
+ // .then(result => [policy.type, result]);
12744
+ serp_page_Promises.push(promse);
12745
+ });
12746
+ let associatedRouters = [];
12747
+ await Promise.all(serp_page_Promises).then((values) => {
12748
+ values && values.forEach((res) => {
12749
+ if (res && res.data.length > 0) {
12750
+ res.data.forEach((er) => {
12751
+ const erOb = new ERouter();
12752
+ erOb.id = this.createId();
12753
+ erOb.name = er.name;
12754
+ er.type = 'Router';
12755
+ associatedRouters.push(erOb);
12756
+ });
12757
+ }
12758
+ });
12759
+ const tmp = new Children();
12760
+ tmp.name = "Associated Routers(" + associatedRouters.length + ')';
12761
+ tmp.type = "Routers";
12762
+ tmp.children = associatedRouters;
12763
+ tmp.id = this.createId();
12764
+ serviceNode.data.children.push(tmp);
12765
+ });
12533
12766
  const service_policies_url = this.getLinkForResource(rawServiceObj, 'service-policies').replace('./', ''); // dial, Bind info
12534
12767
  let bindPolicies = [];
12535
12768
  let bindIdnetities = [];
12769
+ let dialIdnetities = [];
12536
12770
  const promise2 = await zitiService
12537
12771
  .get(service_policies_url, pagingOb, [])
12538
12772
  .then((policies) => {
12539
- const identityPromises = [];
12540
- policies.data.forEach(async (policy) => {
12541
- if (policy.type === 'Bind') {
12542
- const bindIdentitiesUrl = this.getLinkForResource(policy, 'identities');
12543
- const promse = await zitiService
12544
- .get(bindIdentitiesUrl.replace('./', ''), pagingOb, [])
12545
- .then((res) => {
12546
- if (res && res.data.length > 0) {
12547
- res.data.forEach((rs) => {
12548
- this.addItemToArray(bindIdnetities, rs);
12549
- });
12773
+ bindPolicies = policies.data;
12774
+ });
12775
+ const pagePromises = [];
12776
+ bindPolicies.forEach((policy) => {
12777
+ const bindIdentitiesUrl = this.getLinkForResource(policy, 'identities');
12778
+ const promse = zitiService
12779
+ .get(bindIdentitiesUrl.replace('./', ''), pagingOb, [])
12780
+ .then(result => [policy.type, result]);
12781
+ pagePromises.push(promse);
12782
+ });
12783
+ await Promise.all(pagePromises).then((values) => {
12784
+ values && values.forEach((res) => {
12785
+ if (res && res[1].data.length > 0) {
12786
+ res[1].data.forEach((rs) => {
12787
+ if (res[0] === 'Bind') {
12788
+ bindIdnetities = this.addItemToArray(bindIdnetities, rs);
12550
12789
  }
12551
- else {
12552
- this.addItemToArray(bindIdnetities, res.data);
12790
+ else if (res[0] === 'Dial') {
12791
+ dialIdnetities = this.addItemToArray(dialIdnetities, rs);
12553
12792
  }
12554
12793
  });
12555
- identityPromises.push(promse);
12556
- wait_promises.push(promse);
12794
+ }
12795
+ else {
12796
+ if (res[0] === 'Bind') {
12797
+ bindIdnetities = this.addItemToArray(bindIdnetities, res[1].data);
12798
+ }
12799
+ else if (res[0] === 'Dial') {
12800
+ dialIdnetities = this.addItemToArray(dialIdnetities, res[1].data);
12801
+ }
12557
12802
  }
12558
12803
  });
12559
- Promise.all(identityPromises).then(() => {
12560
- const tmp = new Children();
12561
- tmp.name = "Bind Identities(" + bindIdnetities.length + ')';
12562
- tmp.type = "Identities";
12563
- tmp.children = bindIdnetities;
12564
- tmp.id = this.createId();
12565
- serviceNode.data.children.push(tmp);
12566
- });
12567
- });
12568
- wait_promises.push(promise2);
12569
- Promise.all(wait_promises).then(() => {
12804
+ const tmp = new Children();
12805
+ tmp.name = "Bind Identities(" + bindIdnetities.length + ')';
12806
+ tmp.type = "Identities";
12807
+ tmp.children = bindIdnetities;
12808
+ tmp.id = this.createId();
12809
+ serviceNode.data.children.push(tmp);
12810
+ const tmpDial = new Children();
12811
+ tmpDial.name = "Dial Identities(" + dialIdnetities.length + ')';
12812
+ tmpDial.type = "Identities";
12813
+ tmpDial.children = dialIdnetities;
12814
+ tmpDial.id = this.createId();
12815
+ serviceNode.data.children.push(tmpDial);
12570
12816
  resolve('this is a promise');
12571
12817
  });
12818
+ Promise.all(wait_promises).then(() => { });
12572
12819
  }); // end of mypromise
12573
12820
  networkGraph = d3.hierarchy(networkGraph.data, function (nd) {
12574
12821
  return nd.children;
@@ -12580,25 +12827,59 @@ class TreeNodeProcessor {
12580
12827
  const wait_promises = [];
12581
12828
  this.uniqId = uniqId;
12582
12829
  const rawSPolicy = servicePolicies.find((s) => s.name === policyNode.data.name);
12830
+ const childs = new Children();
12831
+ childs.name = "Attributes";
12832
+ childs.id = this.createId();
12833
+ rawSPolicy.serviceRoles && rawSPolicy.serviceRoles.forEach((ob) => {
12834
+ const attr = new Attribute();
12835
+ attr.name = ob;
12836
+ attr.id = this.createId();
12837
+ attr.type = "Service Attribute";
12838
+ childs.children.push(attr);
12839
+ });
12840
+ rawSPolicy.identityRoles && rawSPolicy.identityRoles.forEach((ob) => {
12841
+ const attr = new Attribute();
12842
+ attr.name = ob;
12843
+ attr.id = this.createId();
12844
+ attr.type = "Identity Attribute";
12845
+ childs.children.push(attr);
12846
+ });
12847
+ childs.name = childs.name + '(' + childs.children.length + ')';
12848
+ policyNode.data.children.push(childs);
12583
12849
  const pagesize = 500;
12584
- const services_paging = this.getPagingObject(pagesize);
12850
+ const identities_paging = this.getPagingObject(pagesize);
12585
12851
  const bindIdentitiesUrl = this.getLinkForResource(rawSPolicy, 'identities');
12586
- const sp_promise = await zitiService.get(bindIdentitiesUrl, services_paging, [])
12852
+ // this.logger.info('bindIdentitiesUrl',bindIdentitiesUrl);
12853
+ const sp_promise = await zitiService.get(bindIdentitiesUrl, identities_paging, [])
12587
12854
  .then((ids) => {
12588
12855
  const childs = new Children();
12589
- childs.name = rawSPolicy.type + 'Identities';
12856
+ childs.name = rawSPolicy.type + '-Identities';
12590
12857
  childs.id = this.createId();
12591
12858
  ids.data.forEach((idOb) => {
12592
- const ep = new Identity();
12593
- ep.id = idOb.id;
12594
- ep.name = idOb.name;
12595
- ep.type = 'Identity';
12596
- childs.children.push(ep);
12859
+ childs.children.push(this.createIdentity(idOb));
12597
12860
  });
12598
12861
  childs.name = childs.name + '(' + childs.children.length + ')';
12599
12862
  policyNode.data.children.push(childs);
12600
12863
  });
12601
12864
  wait_promises.push(sp_promise);
12865
+ const services_paging = this.getPagingObject(pagesize);
12866
+ const bindServicesUrl = this.getLinkForResource(rawSPolicy, 'services'); // pull services
12867
+ const _promise = await zitiService.get(bindServicesUrl, services_paging, [])
12868
+ .then((result) => {
12869
+ const childs = new Children();
12870
+ childs.name = rawSPolicy.type + '-Services';
12871
+ childs.id = this.createId();
12872
+ result.data.forEach((idOb) => {
12873
+ const sp = new Service();
12874
+ sp.id = idOb.id;
12875
+ sp.name = idOb.name;
12876
+ sp.type = 'Service';
12877
+ childs.children.push(sp);
12878
+ });
12879
+ childs.name = childs.name + '(' + childs.children.length + ')';
12880
+ policyNode.data.children.push(childs);
12881
+ });
12882
+ wait_promises.push(_promise);
12602
12883
  Promise.all(wait_promises).then(() => {
12603
12884
  resolve('resolve.');
12604
12885
  });
@@ -12608,6 +12889,23 @@ class TreeNodeProcessor {
12608
12889
  });
12609
12890
  return [networkGraph, this.uniqId];
12610
12891
  }
12892
+ async getServicesForAServicePolicy(policyObject, zitiService, pagesize = 500) {
12893
+ const childs = [];
12894
+ const services_paging = this.getPagingObject(pagesize);
12895
+ const bindServicesUrl = this.getLinkForResource(policyObject, 'services');
12896
+ const _promise = await zitiService.get(bindServicesUrl, services_paging, [])
12897
+ .then((result) => {
12898
+ result.data.forEach((idOb) => {
12899
+ const sp = new Service();
12900
+ sp.id = this.createId();
12901
+ sp.uuid = idOb.id;
12902
+ sp.name = idOb.name;
12903
+ sp.type = 'Service';
12904
+ childs.push(sp);
12905
+ });
12906
+ });
12907
+ return [policyObject.type, childs];
12908
+ }
12611
12909
  async processEdgeroutersForNodeClick(edgerouterNode, networkGraph, edgerouters, uniqId, zitiService) {
12612
12910
  const mainPromise = await new Promise(async (resolve, reject) => {
12613
12911
  const wait_promises = [];
@@ -12649,6 +12947,9 @@ class TreeNodeProcessor {
12649
12947
  policy.uuid = pol.id;
12650
12948
  policy.name = pol.name;
12651
12949
  policy.type = 'Router Policy';
12950
+ policy.isSystem = pol.isSystem;
12951
+ policy.semantic = pol.semantic;
12952
+ policy.rootNode = 'No';
12652
12953
  erpolChilds.children.push(policy);
12653
12954
  });
12654
12955
  erpolChilds.name = "Edge Router Policies(" + erpolChilds.children.length + ')';
@@ -12815,11 +13116,39 @@ class TreeNodeProcessor {
12815
13116
  return servicesChildren;
12816
13117
  }
12817
13118
  async processEdgeRouterPoliciesForNodeClick(erPolicyNode, networkGraph, edgeRouterPolicies, uniqId, zitiService) {
12818
- const myPromise = await new Promise((resolve, reject) => {
13119
+ const myPromise = await new Promise(async (resolve, reject) => {
12819
13120
  const wait_promises = [];
12820
13121
  this.uniqId = uniqId;
12821
13122
  const rawERPolicy = edgeRouterPolicies.find((s) => s.name === erPolicyNode.data.name);
12822
13123
  const pagesize = 500;
13124
+ const er_url = this.getLinkForResource(rawERPolicy, 'edge-routers').replace('./', '');
13125
+ let associatedRouters = [];
13126
+ const paging = this.getPagingObject(pagesize);
13127
+ const erChailds = new Children();
13128
+ erChailds.name = 'Associated Routers';
13129
+ erChailds.type = 'Associated Routers';
13130
+ erChailds.id = this.createId();
13131
+ const associatedRoutersPromise = await zitiService.get(er_url, paging, [])
13132
+ .then((result) => {
13133
+ result.data.forEach((er) => {
13134
+ const tmp = new ERouter();
13135
+ tmp.id = this.createId();
13136
+ tmp.name = er.name;
13137
+ tmp.type = 'Router';
13138
+ tmp.verified = er.isVerified ? 'Yes' : 'No';
13139
+ tmp.online = er.isOnline ? 'Yes' : 'No';
13140
+ tmp.disabled = er.disabled ? 'Yes' : 'No';
13141
+ tmp.rootNode = 'Yes';
13142
+ tmp.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
13143
+ tmp.syncStatus = er.syncStatus ? er.syncStatus : 'No';
13144
+ tmp.createdAt = er.createdAt;
13145
+ tmp.updatedAt = er.updatedAt;
13146
+ erChailds.children.push(tmp);
13147
+ });
13148
+ erChailds.name = erChailds.name + '(' + erChailds.children.length + ')';
13149
+ erPolicyNode.data.children.push(erChailds);
13150
+ });
13151
+ wait_promises.push(associatedRoutersPromise);
12823
13152
  const services_paging = this.getPagingObject(pagesize);
12824
13153
  const url = this.getLinkForResource(rawERPolicy, 'identities');
12825
13154
  let ids = [];
@@ -12841,13 +13170,8 @@ class TreeNodeProcessor {
12841
13170
  Promise.all(promises).then(() => {
12842
13171
  const idChilds = new Children();
12843
13172
  idChilds.id = this.createId();
12844
- ids.forEach((er) => {
12845
- const idOb = new Identity();
12846
- idOb.id = this.createId();
12847
- idOb.uuid = er.id;
12848
- idOb.name = er.name;
12849
- idOb.type = 'Identity';
12850
- idChilds.children.push(idOb);
13173
+ ids.forEach((idOb) => {
13174
+ idChilds.children.push(this.createIdentity(idOb));
12851
13175
  });
12852
13176
  idChilds.name = "Accessible Identities(" + idChilds.children.length + ')';
12853
13177
  erPolicyNode.data.children.push(idChilds);
@@ -12938,7 +13262,7 @@ class TreeNodeProcessor {
12938
13262
  });
12939
13263
  wait_promises.push(serpromise);
12940
13264
  Promise.all(wait_promises).then(() => {
12941
- resolve('this is a promise');
13265
+ resolve('Done');
12942
13266
  });
12943
13267
  });
12944
13268
  networkGraph = d3.hierarchy(networkGraph.data, function (nd) {
@@ -12969,9 +13293,30 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
12969
13293
  // export class NetworkVisualizerComponent implements OnInit {
12970
13294
  this.title = 'Network Visualizer';
12971
13295
  this.uniqId = 0;
13296
+ this.maxObjectsPerNode = 1001;
12972
13297
  this.fullScreen = false;
12973
13298
  this.isLoading = true;
12974
- this.noSearchResults = false;
13299
+ this.noSearchResults = true;
13300
+ this.services = [];
13301
+ this.services_totalCount = 0;
13302
+ this.all_services_fetched = false;
13303
+ this.identities = [];
13304
+ this.identities_totalCount = 0;
13305
+ this.all_identities_fetched = false;
13306
+ this.edgerouters = [];
13307
+ this.edgerouters_totalCount = 0;
13308
+ this.all_edgerouters_fetched = false;
13309
+ this.service_policies = [];
13310
+ this.service_policies_totalCount = 0;
13311
+ this.all_service_policies_fetched = false;
13312
+ this.edge_router_policies = [];
13313
+ this.edge_router_policies_totalCount = 0;
13314
+ this.all_edge_router_policies_fetched = false;
13315
+ this.service_router_policies = [];
13316
+ this.service_router_policies_totalCount = 0;
13317
+ this.all_service_router_policies_fetched = false;
13318
+ this.configs = [];
13319
+ this.filerResponseMessage = 'search filter..';
12975
13320
  this.servicePoliciesTreeNodes = [];
12976
13321
  this.servicesTreeNodes = [];
12977
13322
  this.identitiesTreeNodes = [];
@@ -12980,6 +13325,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
12980
13325
  this.serviceEdgeRouterPolicyTreeNodes = [];
12981
13326
  this.resourceTypeError = false;
12982
13327
  this.filterText = '';
13328
+ this.searchWord = '';
12983
13329
  this.resourceType = '';
12984
13330
  this.openNodes = [];
12985
13331
  this.contextmenuNodeType = [];
@@ -12989,16 +13335,15 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
12989
13335
  this.getNetworkObjects();
12990
13336
  }
12991
13337
  getPagingObject(pagesize) {
12992
- const paging = {
12993
- searchOn: 'name',
12994
- noSearch: false,
12995
- filter: '',
12996
- total: pagesize,
13338
+ return cloneDeep({
13339
+ filter: "",
13340
+ noSearch: true,
13341
+ order: "asc",
12997
13342
  page: 1,
12998
- sort: 'name',
12999
- order: 'asc',
13000
- };
13001
- return paging;
13343
+ searchOn: "name",
13344
+ sort: "name",
13345
+ total: pagesize
13346
+ });
13002
13347
  }
13003
13348
  async getNetworkObjects() {
13004
13349
  this.isLoading = true;
@@ -13010,12 +13355,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13010
13355
  return await this.zitiService
13011
13356
  .get(`identities`, identities_paging, [])
13012
13357
  .then(async (result) => {
13013
- this.identities = result.data;
13358
+ this.identities = result.data ? result.data : [];
13359
+ this.identities_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13014
13360
  if (!this.identities || this.identities.length === 0) {
13015
13361
  this.identities = [];
13016
13362
  this.isLoading = false;
13017
13363
  }
13018
- else {
13364
+ else if (this.identities_totalCount < this.maxObjectsPerNode) {
13365
+ this.all_identities_fetched = true;
13019
13366
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13020
13367
  const promises = [];
13021
13368
  for (let page = 2; page <= pages; page++) {
@@ -13028,7 +13375,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13028
13375
  });
13029
13376
  promises.push(tmp_promise);
13030
13377
  }
13031
- Promise.all(promises).then(() => { });
13378
+ Promise.all(promises).then(() => {
13379
+ // this.identities_totalCount = this.identities.length;
13380
+ });
13032
13381
  }
13033
13382
  }).catch(error => {
13034
13383
  this.logger.error('Error in fetching Identities', error.message);
@@ -13039,12 +13388,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13039
13388
  return await this.zitiService
13040
13389
  .get(`services`, services_paging, [])
13041
13390
  .then(async (result) => {
13042
- this.services = result.data;
13391
+ this.services = result.data ? result.data : [];
13392
+ this.services_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13043
13393
  if (!this.services || this.services.length === 0) {
13044
13394
  this.services = [];
13045
13395
  this.isLoading = false;
13046
13396
  }
13047
- else {
13397
+ else if (this.services_totalCount < this.maxObjectsPerNode) {
13398
+ this.all_services_fetched = true;
13048
13399
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13049
13400
  const s_promises = [];
13050
13401
  for (let page = 2; page <= pages; page++) {
@@ -13058,7 +13409,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13058
13409
  });
13059
13410
  s_promises.push(tmp_promise);
13060
13411
  }
13061
- Promise.all(s_promises).then(() => { });
13412
+ Promise.all(s_promises).then(() => {
13413
+ // this.services_totalCount = this.services.length;
13414
+ });
13062
13415
  }
13063
13416
  }).catch(error => {
13064
13417
  this.logger.error('Error in fetching services', error.message);
@@ -13069,12 +13422,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13069
13422
  return await this.zitiService
13070
13423
  .get(`service-policies`, servicesPolicies_paging, [])
13071
13424
  .then(async (result) => {
13072
- this.service_policies = result.data;
13425
+ this.service_policies = result.data ? result.data : [];
13426
+ this.service_policies_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13073
13427
  if (!this.service_policies || this.service_policies.length === 0) {
13074
13428
  this.service_policies = [];
13075
13429
  this.isLoading = false;
13076
13430
  }
13077
- else {
13431
+ else if (this.service_policies_totalCount < this.maxObjectsPerNode) {
13432
+ this.all_service_policies_fetched = true;
13078
13433
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13079
13434
  const sp_promises = [];
13080
13435
  for (let page = 2; page <= pages; page++) {
@@ -13082,13 +13437,15 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13082
13437
  const tmp_promise = await this.zitiService
13083
13438
  .get(`service-policies`, servicesPolicies_paging, [])
13084
13439
  .then((pageResult) => {
13085
- pageResult.data.forEach((serv) => {
13440
+ pageResult.data && pageResult.data.forEach((serv) => {
13086
13441
  this.service_policies.push(serv);
13087
13442
  });
13088
13443
  });
13089
13444
  sp_promises.push(tmp_promise);
13090
13445
  }
13091
- Promise.all(sp_promises).then(() => { });
13446
+ Promise.all(sp_promises).then(() => {
13447
+ // this.service_policies_totalCount = this.service_policies.length;
13448
+ });
13092
13449
  }
13093
13450
  }).catch(error => {
13094
13451
  this.logger.error('Error in fetching service-policies', error.message);
@@ -13099,12 +13456,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13099
13456
  return await this.zitiService
13100
13457
  .get(`edge-routers`, routers_paging, [])
13101
13458
  .then(async (result) => {
13102
- this.edgerouters = result.data;
13459
+ this.edgerouters = result.data ? result.data : [];
13460
+ this.edgerouters_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13103
13461
  if (!this.edgerouters || this.edgerouters.length === 0) {
13104
13462
  this.edgerouters = [];
13105
13463
  this.isLoading = false;
13106
13464
  }
13107
- else {
13465
+ else if (this.edgerouters_totalCount < this.maxObjectsPerNode) {
13466
+ this.all_edgerouters_fetched = true;
13108
13467
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13109
13468
  const r_promises = [];
13110
13469
  for (let page = 2; page <= pages; page++) {
@@ -13118,23 +13477,27 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13118
13477
  });
13119
13478
  r_promises.push(tmp_promise);
13120
13479
  }
13121
- Promise.all(r_promises).then(() => { });
13480
+ Promise.all(r_promises).then(() => {
13481
+ // this.edgerouters_totalCount = this.edgerouters.length;
13482
+ });
13122
13483
  }
13123
13484
  }).catch(error => {
13124
13485
  this.logger.error('Error in fetching edge-routers', error.message);
13125
13486
  });
13126
13487
  }
13127
13488
  async findEdgeRouterPolicies(pagesize) {
13128
- this.router_policies = [];
13489
+ this.edge_router_policies = [];
13129
13490
  const erpolicies_paging = this.getPagingObject(pagesize);
13130
13491
  return await this.zitiService
13131
13492
  .get(`edge-router-policies`, erpolicies_paging, [])
13132
13493
  .then(async (result) => {
13133
- this.router_policies = result.data;
13134
- if (!this.router_policies || this.router_policies.length === 0) {
13494
+ this.edge_router_policies = result.data ? result.data : [];
13495
+ this.edge_router_policies_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13496
+ if (!this.edge_router_policies || this.edge_router_policies.length === 0) {
13135
13497
  this.isLoading = false;
13136
13498
  }
13137
- else {
13499
+ else if (this.edge_router_policies_totalCount < this.maxObjectsPerNode) {
13500
+ this.all_edge_router_policies_fetched = true;
13138
13501
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13139
13502
  const r_promises = [];
13140
13503
  for (let page = 2; page <= pages; page++) {
@@ -13143,12 +13506,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13143
13506
  .get(`edge-router-policies`, erpolicies_paging, [])
13144
13507
  .then((pageResult) => {
13145
13508
  pageResult.data.forEach((serv) => {
13146
- this.router_policies.push(serv);
13509
+ this.edge_router_policies.push(serv);
13147
13510
  });
13148
13511
  });
13149
13512
  r_promises.push(tmp_promise);
13150
13513
  }
13151
- Promise.all(r_promises).then(() => { });
13514
+ Promise.all(r_promises).then(() => {
13515
+ // this.edge_router_policies_totalCount = this.edge_router_policies.length;
13516
+ });
13152
13517
  }
13153
13518
  }).catch(error => {
13154
13519
  this.logger.error('Error in fetching edge-router-policies', error);
@@ -13160,11 +13525,13 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13160
13525
  return await this.zitiService
13161
13526
  .get(`service-edge-router-policies`, serp_paging, [])
13162
13527
  .then(async (result) => {
13163
- this.service_router_policies = result.data;
13528
+ this.service_router_policies = result.data ? result.data : [];
13529
+ this.service_router_policies_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13164
13530
  if (!this.service_router_policies || this.service_router_policies.length === 0) {
13165
13531
  this.isLoading = false;
13166
13532
  }
13167
- else {
13533
+ else if (this.service_router_policies_totalCount < this.maxObjectsPerNode) {
13534
+ this.all_service_router_policies_fetched = false;
13168
13535
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13169
13536
  const r_promises = [];
13170
13537
  for (let page = 2; page <= pages; page++) {
@@ -13178,7 +13545,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13178
13545
  });
13179
13546
  r_promises.push(tmp_promise);
13180
13547
  }
13181
- Promise.all(r_promises).then(() => { });
13548
+ Promise.all(r_promises).then(() => {
13549
+ // this.service_router_policies_totalCount = this.service_router_policies.length;
13550
+ });
13182
13551
  }
13183
13552
  }).catch(error => {
13184
13553
  this.logger.error('Error in fetching service-edge-router-policies', error);
@@ -13190,11 +13559,12 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13190
13559
  return await this.zitiService
13191
13560
  .get(`configs`, configs_paging, [])
13192
13561
  .then(async (result) => {
13193
- this.configs = result.data;
13562
+ this.configs = result.data ? result.data : [];
13563
+ const configs_totalCount = result.meta && result.meta.pagination ? result.meta.pagination.totalCount : 0;
13194
13564
  if (!this.configs || this.configs.length === 0) {
13195
13565
  this.configs = [];
13196
13566
  }
13197
- else {
13567
+ else if (configs_totalCount < this.maxObjectsPerNode) {
13198
13568
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
13199
13569
  const r_promises = [];
13200
13570
  for (let page = 2; page <= pages; page++) {
@@ -13208,7 +13578,9 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13208
13578
  });
13209
13579
  r_promises.push(tmp_promise);
13210
13580
  }
13211
- Promise.all(r_promises).then(() => { });
13581
+ Promise.all(r_promises).then(() => {
13582
+ const configs_totalCount = this.configs.length;
13583
+ });
13212
13584
  }
13213
13585
  }).catch(error => {
13214
13586
  this.logger.error('Error in fetching configs', error);
@@ -13232,56 +13604,59 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13232
13604
  }
13233
13605
  processFirstNetworkGraph() {
13234
13606
  try {
13235
- const treeObj = this.topologyHelper.getResourceTreeObj('this.currentNetwork.name', 'this.currentNetwork.status', this.services, this.identities, this.service_policies, this.edgerouters, this.router_policies, this.service_router_policies, this.uniqId, this.logger);
13607
+ 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
13608
  this.uniqId = treeObj.lastId;
13237
13609
  this.networkGraph = d3.hierarchy(treeObj, function (d) {
13238
13610
  return d.children;
13239
13611
  });
13240
- this.baseNetworkGraph = this.networkGraph;
13612
+ // this.baseNetworkGraph = _.cloneDeep(this.networkGraph);
13241
13613
  this.servicePoliciesTreeNodes = [];
13242
13614
  this.servicesTreeNodes = [];
13243
13615
  this.identitiesTreeNodes = [];
13244
13616
  this.edgeroutersTreeNodes = [];
13245
13617
  this.erPoliciesTreeNodes = [];
13246
13618
  this.serviceEdgeRouterPolicyTreeNodes = [];
13247
- this.servicePoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.networkGraph.children[0], this.servicePoliciesTreeNodes, 'ServicePolicy');
13248
- this.servicesTreeNodes = this.fillAutoCompleteTreeNodes(this.networkGraph.children[1], this.servicesTreeNodes, 'Service');
13249
- this.identitiesTreeNodes = this.fillAutoCompleteTreeNodes(this.networkGraph.children[2], this.identitiesTreeNodes, 'Identity');
13250
- this.edgeroutersTreeNodes = this.fillAutoCompleteTreeNodes(this.networkGraph.children[3], this.edgeroutersTreeNodes, 'Edge Router');
13251
- this.erPoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.networkGraph.children[4], this.erPoliciesTreeNodes, 'Router Policy');
13252
- this.serviceEdgeRouterPolicyTreeNodes = this.fillAutoCompleteTreeNodes(this.networkGraph.children[5], this.serviceEdgeRouterPolicyTreeNodes, 'Service Router Policy');
13619
+ this.servicePoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.service_policies, this.servicePoliciesTreeNodes, 'ServicePolicy');
13620
+ this.servicesTreeNodes = this.fillAutoCompleteTreeNodes(this.services, this.servicesTreeNodes, 'Service');
13621
+ this.identitiesTreeNodes = this.fillAutoCompleteTreeNodes(this.identities, this.identitiesTreeNodes, 'Identity');
13622
+ this.edgeroutersTreeNodes = this.fillAutoCompleteTreeNodes(this.edgerouters, this.edgeroutersTreeNodes, 'Router');
13623
+ this.erPoliciesTreeNodes = this.fillAutoCompleteTreeNodes(this.edge_router_policies, this.erPoliciesTreeNodes, 'Router Policy');
13624
+ this.serviceEdgeRouterPolicyTreeNodes = this.fillAutoCompleteTreeNodes(this.service_router_policies, this.serviceEdgeRouterPolicyTreeNodes, 'Service Router Policy');
13253
13625
  this.initTopoView();
13626
+ this.baseNetworkGraph = _.cloneDeep(this.networkGraph);
13254
13627
  }
13255
13628
  catch (err) {
13256
13629
  this.logger.error(err.message);
13257
13630
  }
13258
13631
  this.isLoading = false;
13259
13632
  }
13260
- fillAutoCompleteTreeNodes(nodeObj, arr, typeName) {
13261
- const name = nodeObj.data.name;
13262
- // const id = nodeObj.data.id;
13263
- if (!name) {
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
- }
13633
+ fillAutoCompleteTreeNodes(resourcesArray, arr, typeName) {
13634
+ resourcesArray && resourcesArray.forEach((ob) => {
13635
+ arr.push(ob.name);
13636
+ });
13278
13637
  return arr;
13279
13638
  }
13639
+ debounce(func, timeout = 150) {
13640
+ let timer;
13641
+ return (...args) => {
13642
+ this.autocompleteOptions = [];
13643
+ clearTimeout(timer);
13644
+ timer = setTimeout(() => { func.apply(this, args); }, timeout);
13645
+ };
13646
+ }
13647
+ nwSearchChange(event) {
13648
+ if (this.filterText.length > 1 && event.key !== 'Escape' && event.key !== 'ArrowRight' && event.key !== 'ArrowLeft' && event.key !== 'Enter') {
13649
+ this.filerResponseMessage = 'search filter..';
13650
+ this.debounce(this.filterSearchArray());
13651
+ }
13652
+ }
13280
13653
  autocompleteSearch(event) {
13281
13654
  const str = event ? event.option.value : '';
13282
13655
  this.searchResourceConditionCheck(str);
13283
13656
  }
13284
13657
  resourceTypeChanged() {
13658
+ this.filerResponseMessage = 'search filter..';
13659
+ this.searchCache = [];
13285
13660
  this.resetSearchNode();
13286
13661
  this.clearSearchLinkColors();
13287
13662
  if (_.isEmpty(this.resourceType)) {
@@ -13292,22 +13667,23 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13292
13667
  }
13293
13668
  this.filterText = '';
13294
13669
  this.resourceTypeError = false;
13295
- if (this.resourceType === 'service-policies') {
13670
+ this.autocompleteOptions = [];
13671
+ if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
13296
13672
  this.autocompleteOptions = this.servicePoliciesTreeNodes;
13297
13673
  }
13298
- else if (this.resourceType === 'services') {
13674
+ else if (this.resourceType === 'services' && this.all_services_fetched) {
13299
13675
  this.autocompleteOptions = this.servicesTreeNodes;
13300
13676
  }
13301
- else if (this.resourceType === 'identities') {
13677
+ else if (this.resourceType === 'identities' && this.all_identities_fetched) {
13302
13678
  this.autocompleteOptions = this.identitiesTreeNodes;
13303
13679
  }
13304
- else if (this.resourceType === 'edge-routers') {
13680
+ else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
13305
13681
  this.autocompleteOptions = this.edgeroutersTreeNodes;
13306
13682
  }
13307
- else if (this.resourceType === 'edge-router-policies') {
13683
+ else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
13308
13684
  this.autocompleteOptions = this.erPoliciesTreeNodes;
13309
13685
  }
13310
- else if (this.resourceType === 'service-edge-router-policies') {
13686
+ else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
13311
13687
  this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes;
13312
13688
  }
13313
13689
  if (!_.isEmpty(this.filterText)) {
@@ -13316,7 +13692,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13316
13692
  }
13317
13693
  searchResourceConditionCheck(searchTxt) {
13318
13694
  if (this.resourceType === '' && searchTxt !== '') {
13319
- // if (searchTxt !== '') {
13320
13695
  this.resourceTypeError = true;
13321
13696
  return;
13322
13697
  }
@@ -13325,7 +13700,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13325
13700
  }
13326
13701
  }
13327
13702
  searchResourceInTree(searchTxt) {
13328
- // this.closeTable();
13329
13703
  this.noSearchResults = false;
13330
13704
  this.resourceTypeError = false;
13331
13705
  this.resetTree(null);
@@ -13338,32 +13712,152 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13338
13712
  let paths = [];
13339
13713
  let targetNodes = [];
13340
13714
  const nodeIds = [];
13341
- if (this.resourceType === 'service-policies') {
13342
- targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, paths, targetNodes);
13715
+ if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {
13716
+ const rawOb = this.searchCache.find((item) => item.name === searchTxt);
13717
+ const id = this.topologyHelper.createServicePolicyNode(rawOb);
13718
+ // id.clickProcess = "Not Yet";
13719
+ if (!this.isNodeExists(this.nodes[1], id)) {
13720
+ this.nodes[1].data.children.push(id);
13721
+ }
13722
+ this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
13723
+ return nd.children;
13724
+ });
13725
+ this.networkGraph.children.forEach((nd, i) => {
13726
+ if (i !== 0) {
13727
+ this.graphCollapse(nd);
13728
+ }
13729
+ });
13730
+ this.service_policies = [];
13731
+ this.service_policies[0] = rawOb;
13732
+ this.updateTree(this.nodes[1]);
13733
+ targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, targetNodes);
13734
+ }
13735
+ else if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
13736
+ targetNodes = this.processSearchInPreorder(this.nodes[1], searchTxt, targetNodes);
13737
+ }
13738
+ else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {
13739
+ const rawOb = this.searchCache.find((item) => item.name === searchTxt);
13740
+ const id = this.topologyHelper.createEdgeRouterNode(rawOb);
13741
+ // id.clickProcess = "Not Yet";
13742
+ if (!this.isNodeExists(this.nodes[4], id)) {
13743
+ this.nodes[4].data.children.push(id);
13744
+ }
13745
+ this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
13746
+ return nd.children;
13747
+ });
13748
+ this.networkGraph.children.forEach((nd, i) => {
13749
+ if (i !== 3) {
13750
+ this.graphCollapse(nd);
13751
+ }
13752
+ });
13753
+ this.edgerouters = [];
13754
+ this.edgerouters[0] = rawOb;
13755
+ this.updateTree(this.nodes[4]);
13756
+ targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, targetNodes);
13757
+ }
13758
+ else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
13759
+ targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, targetNodes);
13760
+ }
13761
+ else if (this.resourceType === 'services' && !this.all_services_fetched) {
13762
+ const rawOb = this.searchCache.find((item) => item.name === searchTxt);
13763
+ const id = this.topologyHelper.createServiceNode(rawOb);
13764
+ id.clickProcess = "Not Yet";
13765
+ if (!this.isNodeExists(this.nodes[2], id)) {
13766
+ this.nodes[2].data.children.push(id);
13767
+ }
13768
+ this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
13769
+ return nd.children;
13770
+ });
13771
+ this.services = [];
13772
+ this.services[0] = rawOb;
13773
+ this.updateTree(this.nodes[2]);
13774
+ targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, targetNodes);
13775
+ this.networkGraph.children.forEach((nd, i) => {
13776
+ if (i !== 1) {
13777
+ this.graphCollapse(nd);
13778
+ }
13779
+ });
13343
13780
  }
13344
- else if (this.resourceType === 'edge-routers') {
13345
- targetNodes = this.processSearchInPreorder(this.nodes[4], searchTxt, paths, targetNodes);
13781
+ else if (this.resourceType === 'services' && this.all_services_fetched) {
13782
+ targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, targetNodes);
13346
13783
  }
13347
- else if (this.resourceType === 'services') {
13348
- targetNodes = this.processSearchInPreorder(this.nodes[2], searchTxt, paths, targetNodes);
13784
+ else if (this.resourceType === 'identities' && !this.all_identities_fetched) {
13785
+ const rawOb = this.searchCache.find((item) => item.name === searchTxt);
13786
+ const id = this.topologyHelper.createIdentityNode(rawOb);
13787
+ id.clickProcess = "Not Yet";
13788
+ if (!this.isNodeExists(this.nodes[3], id)) {
13789
+ this.nodes[3].data.children.push(id);
13790
+ }
13791
+ this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
13792
+ return nd.children;
13793
+ });
13794
+ this.identities[0] = [];
13795
+ this.identities[0] = rawOb;
13796
+ this.updateTree(this.nodes[3]);
13797
+ targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, targetNodes);
13798
+ this.networkGraph.children.forEach((nd, i) => {
13799
+ if (i !== 2) {
13800
+ this.graphCollapse(nd);
13801
+ }
13802
+ });
13349
13803
  }
13350
- else if (this.resourceType === 'identities') {
13351
- targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, paths, targetNodes);
13804
+ else if (this.resourceType === 'identities' && this.all_identities_fetched) {
13805
+ targetNodes = this.processSearchInPreorder(this.nodes[3], searchTxt, targetNodes);
13352
13806
  }
13353
- else if (this.resourceType === 'edge-router-policies') {
13354
- targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, paths, targetNodes);
13807
+ else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {
13808
+ const rawOb = this.searchCache.find((item) => item.name === searchTxt);
13809
+ const id = this.topologyHelper.createEdgeRouterPolicyNode(rawOb);
13810
+ id.clickProcess = "Not Yet";
13811
+ if (!this.isNodeExists(this.nodes[5], id)) {
13812
+ this.nodes[5].data.children.push(id);
13813
+ }
13814
+ this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
13815
+ return nd.children;
13816
+ });
13817
+ this.networkGraph.children.forEach((nd, i) => {
13818
+ if (i !== 4) {
13819
+ this.graphCollapse(nd);
13820
+ }
13821
+ });
13822
+ this.networkGraph.children.forEach(nd => this.graphCollapse(nd));
13823
+ this.edge_router_policies = [];
13824
+ this.edge_router_policies[0] = rawOb;
13825
+ this.updateTree(this.nodes[5]);
13826
+ targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, targetNodes);
13827
+ }
13828
+ else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
13829
+ targetNodes = this.processSearchInPreorder(this.nodes[5], searchTxt, targetNodes);
13830
+ }
13831
+ else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {
13832
+ const rawOb = this.searchCache.find((item) => item.name === searchTxt);
13833
+ const id = this.topologyHelper.createServiceEdgeRouterPolicyNode(rawOb);
13834
+ id.clickProcess = "Not Yet";
13835
+ if (!this.isNodeExists(this.nodes[6], id)) {
13836
+ this.nodes[6].data.children.push(id);
13837
+ }
13838
+ this.networkGraph = d3.hierarchy(this.networkGraph.data, function (nd) {
13839
+ return nd.children;
13840
+ });
13841
+ this.networkGraph.children.forEach((nd, i) => {
13842
+ if (i !== 5) {
13843
+ this.graphCollapse(nd);
13844
+ }
13845
+ });
13846
+ this.service_router_policies = [];
13847
+ this.service_router_policies[0] = rawOb;
13848
+ this.updateTree(this.nodes[6]);
13849
+ targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, targetNodes);
13355
13850
  }
13356
- else if (this.resourceType === 'service-edge-router-policies') {
13357
- targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, paths, targetNodes);
13851
+ else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
13852
+ targetNodes = this.processSearchInPreorder(this.nodes[6], searchTxt, targetNodes);
13358
13853
  }
13854
+ // this.networkGraph.children.forEach(nd => this.graphCollapse(nd));
13359
13855
  paths = this.explorePathsForSearchedNodes(targetNodes, paths, nodeIds);
13360
13856
  if (targetNodes && targetNodes.length <= 0) {
13361
13857
  this.noSearchResults = true;
13362
13858
  this.clearSearchLinkColors();
13363
- // return false;
13364
13859
  }
13365
13860
  else {
13366
- //if (targetNodes) {
13367
13861
  this.openPaths(paths, true);
13368
13862
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
13369
13863
  // @ts-ignore
@@ -13372,16 +13866,15 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13372
13866
  // const dataId = _.get(d, 'data.id', '');
13373
13867
  const nodeName = _.get(targetNodes[0], 'data.name', '');
13374
13868
  if (dataName.toLowerCase() === searchTxt.toLowerCase() && nodeName === dataName) {
13375
- d3.select(this).style('fill', 'red');
13869
+ d3.select(this).style('fill', '#a60303'); //#004447, 470000
13376
13870
  }
13377
13871
  });
13378
13872
  }
13379
- // else {
13380
- // this.noSearchResults = true;
13381
- // this.clearSearchLinkColors();
13382
- // }
13383
13873
  }
13384
13874
  }
13875
+ isNodeExists(rootNode, id) {
13876
+ return rootNode.data.children.find((nd) => nd.uuid === id.uuid);
13877
+ }
13385
13878
  explorePathsForSearchedNodes(targetNodes, paths, nodeIds) {
13386
13879
  for (let i = 0; targetNodes && i < targetNodes.length; i++) {
13387
13880
  let nd = targetNodes[i];
@@ -13397,7 +13890,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13397
13890
  }
13398
13891
  return paths;
13399
13892
  }
13400
- processSearchInPreorder(nodeObj, searchTxt, paths, targetNodes) {
13893
+ processSearchInPreorder(nodeObj, searchTxt, targetNodes) {
13401
13894
  const name = _.get(nodeObj, 'data.name');
13402
13895
  // const nodeId = _.get(nodeObj, 'data.id');
13403
13896
  const isRootNode = _.get(nodeObj, 'data.rootNode');
@@ -13409,7 +13902,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13409
13902
  }
13410
13903
  const childNodes = nodeObj.children ? nodeObj.children : nodeObj._children;
13411
13904
  for (let i = 0; childNodes && i < childNodes.length; i++) {
13412
- this.processSearchInPreorder(childNodes[i], searchTxt, paths, targetNodes);
13905
+ this.processSearchInPreorder(childNodes[i], searchTxt, targetNodes);
13413
13906
  }
13414
13907
  return targetNodes;
13415
13908
  }
@@ -13547,7 +14040,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13547
14040
  resetSearchNode() {
13548
14041
  if (this.searchRootNode) {
13549
14042
  this.networkGraph = _.cloneDeep(this.baseNetworkGraph);
13550
- this.updateTree(this.networkGraph);
14043
+ this.updateTree(this.networkGraph, true);
13551
14044
  }
13552
14045
  }
13553
14046
  resetTree(clearSearch) {
@@ -13593,6 +14086,35 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13593
14086
  }
13594
14087
  }
13595
14088
  }
14089
+ findModelName() {
14090
+ return this.resourceType;
14091
+ }
14092
+ async searchObjectsUsingApi() {
14093
+ this.isLoading = true;
14094
+ const model_name = this.findModelName();
14095
+ this.searchWord = _.clone(this.filterText);
14096
+ const str = `${this.resourceType}?filter=%20name%20contains%20%22${this.searchWord}%22&limit=5&offset=0&sort=name%20%20asc`;
14097
+ return await this.zitiService
14098
+ .call(str)
14099
+ .then((result) => {
14100
+ this.isLoading = false;
14101
+ this.autocompleteOptions = [];
14102
+ this.searchCache = result.data;
14103
+ result.data.forEach((res) => {
14104
+ /* const obj: { [key: string]: string } = {
14105
+ id: res.id,
14106
+ name: res.name,
14107
+ }; */
14108
+ this.autocompleteOptions.push(res.name);
14109
+ });
14110
+ this.noSearchResults = true;
14111
+ const countA = result.data?.length > 0 ? result.data.length : 0;
14112
+ this.filerResponseMessage = "search word:'" + this.searchWord + "', result: top " + countA + " of " + result.meta.pagination.totalCount + " records";
14113
+ }).catch((error) => {
14114
+ this.isLoading = false;
14115
+ this.logger.error(error.message);
14116
+ });
14117
+ }
13596
14118
  filterSearchArray() {
13597
14119
  if (_.isEmpty(this.resourceType)) {
13598
14120
  this.autocompleteOptions = [];
@@ -13600,37 +14122,96 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13600
14122
  return;
13601
14123
  }
13602
14124
  this.autocompleteOptions = [];
13603
- if (this.resourceType === 'service-policies') {
14125
+ if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
13604
14126
  this.autocompleteOptions = this.servicePoliciesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
13605
14127
  }
13606
- else if (this.resourceType === 'services') {
14128
+ else if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {
14129
+ this.searchObjectsUsingApi();
14130
+ }
14131
+ else if (this.resourceType === 'services' && this.all_services_fetched) {
13607
14132
  this.autocompleteOptions = this.servicesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
13608
14133
  }
13609
- else if (this.resourceType === 'identities') {
14134
+ else if (this.resourceType === 'services' && !this.all_services_fetched) {
14135
+ this.searchObjectsUsingApi();
14136
+ }
14137
+ else if (this.resourceType === 'identities' && this.all_identities_fetched) {
13610
14138
  this.autocompleteOptions = this.identitiesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
13611
14139
  }
13612
- else if (this.resourceType === 'edge-routers') {
14140
+ else if (this.resourceType === 'identities' && !this.all_identities_fetched) {
14141
+ this.searchObjectsUsingApi();
14142
+ }
14143
+ else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
13613
14144
  this.autocompleteOptions = this.edgeroutersTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
13614
14145
  }
13615
- else if (this.resourceType === 'edge-router-policies') {
14146
+ else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {
14147
+ this.searchObjectsUsingApi();
14148
+ }
14149
+ else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
13616
14150
  this.autocompleteOptions = this.erPoliciesTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
13617
14151
  }
13618
- else if (this.resourceType === 'service-edge-router-policies') {
14152
+ else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {
14153
+ this.searchObjectsUsingApi();
14154
+ }
14155
+ else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
13619
14156
  this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes.filter((option) => option.toLowerCase().includes(this.filterText.toLowerCase()));
13620
14157
  }
14158
+ else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {
14159
+ this.searchObjectsUsingApi();
14160
+ }
13621
14161
  }
13622
14162
  zoomIn() {
13623
14163
  }
13624
14164
  zoomOut() {
13625
14165
  }
13626
14166
  clearSearchFilter() {
13627
- this.resourceTypeError = false;
13628
14167
  this.filterText = '';
13629
- this.filterSearchArray();
14168
+ this.resetAutoCompleteOptions();
14169
+ this.resourceTypeError = false;
14170
+ // this.filterSearchArray();
13630
14171
  this.resetSearchNode();
13631
14172
  this.collapse();
13632
14173
  this.clearSearchLinkColors();
13633
14174
  }
14175
+ resetAutoCompleteOptions() {
14176
+ this.searchCache = [];
14177
+ this.filerResponseMessage = 'search filter..';
14178
+ if (this.resourceType === 'service-policies' && this.all_service_policies_fetched) {
14179
+ this.autocompleteOptions = this.servicePoliciesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
14180
+ }
14181
+ else if (this.resourceType === 'service-policies' && !this.all_service_policies_fetched) {
14182
+ this.autocompleteOptions = [];
14183
+ }
14184
+ else if (this.resourceType === 'services' && this.all_services_fetched) {
14185
+ this.autocompleteOptions = this.servicesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
14186
+ }
14187
+ else if (this.resourceType === 'services' && !this.all_services_fetched) {
14188
+ this.autocompleteOptions = [];
14189
+ }
14190
+ else if (this.resourceType === 'identities' && this.all_identities_fetched) {
14191
+ this.autocompleteOptions = this.identitiesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
14192
+ }
14193
+ else if (this.resourceType === 'identities' && !this.all_identities_fetched) {
14194
+ this.autocompleteOptions = [];
14195
+ }
14196
+ else if (this.resourceType === 'edge-routers' && this.all_edgerouters_fetched) {
14197
+ this.autocompleteOptions = this.edgeroutersTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
14198
+ }
14199
+ else if (this.resourceType === 'edge-routers' && !this.all_edgerouters_fetched) {
14200
+ this.autocompleteOptions = [];
14201
+ }
14202
+ else if (this.resourceType === 'edge-router-policies' && this.all_edge_router_policies_fetched) {
14203
+ this.autocompleteOptions = this.erPoliciesTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
14204
+ }
14205
+ else if (this.resourceType === 'edge-router-policies' && !this.all_edge_router_policies_fetched) {
14206
+ this.autocompleteOptions = [];
14207
+ }
14208
+ else if (this.resourceType === 'service-edge-router-policies' && this.all_service_router_policies_fetched) {
14209
+ this.autocompleteOptions = this.serviceEdgeRouterPolicyTreeNodes.filter((option) => this.filterText === '' || option.toLowerCase().includes(this.filterText.toLowerCase()));
14210
+ }
14211
+ else if (this.resourceType === 'service-edge-router-policies' && !this.all_service_router_policies_fetched) {
14212
+ this.autocompleteOptions = [];
14213
+ }
14214
+ }
13634
14215
  clearSearchType() {
13635
14216
  this.resourceType = '';
13636
14217
  this.autocompleteOptions = [];
@@ -13641,12 +14222,21 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13641
14222
  transform.k = 1;
13642
14223
  this.svg.attr('transform', transform);
13643
14224
  }
14225
+ graphCollapse(d) {
14226
+ if (d.data.rootNode === 'Yes') {
14227
+ d.data.clickProcess = 'Not Yet';
14228
+ d._children = null;
14229
+ }
14230
+ if (d.children) {
14231
+ d._children = d.children;
14232
+ d._children && d._children?.find(nd => this.graphCollapse);
14233
+ d.children = null;
14234
+ }
14235
+ }
13644
14236
  initTopoView() {
13645
14237
  this.autocompleteOptions = [];
13646
14238
  const margin = { top: 20, right: 190, bottom: 30, left: 0 };
13647
- // const width = 1600 - margin.left - margin.right;
13648
14239
  const width = window.innerWidth - margin.right;
13649
- // const height = 1600 - margin.top - margin.bottom;
13650
14240
  const height = window.innerHeight - margin.bottom;
13651
14241
  this.treetooltip = d3.select('#tooltip');
13652
14242
  this.resourceTypeError = false;
@@ -13668,10 +14258,11 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13668
14258
  d3.select('#topocontextmenu').style('display', 'none');
13669
14259
  });
13670
14260
  d3.selectAll('g > *').remove();
13671
- this.treemap = d3.tree().nodeSize([100, 20]);
14261
+ this.treemap = d3.tree().nodeSize([85, 5]);
13672
14262
  this.networkGraph.x = 100; // height / 4;
13673
14263
  this.networkGraph.y = 100;
13674
14264
  this.networkGraph.children.forEach(collapse);
14265
+ // this.networkGraph.children.forEach( (nd:any) => this.graphCollapse(nd) );
13675
14266
  this.updateTree(this.networkGraph);
13676
14267
  _.delay(() => {
13677
14268
  this.transform = d3.zoomIdentity;
@@ -13728,7 +14319,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13728
14319
  if (_.startsWith(d.data.name, 'Edge Routers') || _.includes(d.data.type, 'Edge Router')) {
13729
14320
  className = 'edge-router';
13730
14321
  }
13731
- if (_.includes(d.data.name, 'Identities') || _.includes(d.data.type, 'Identity')) {
14322
+ if (_.includes(d.data.name, 'Identities') || _.includes(d.data.name, 'Associated Identities') || _.includes(d.data.type, 'Identity') || _.includes(d.data.type, 'BrowZer Identity')) {
13732
14323
  className = 'endpoint';
13733
14324
  }
13734
14325
  if (_.startsWith(d.data.name, 'Services') || _.startsWith(d.data.type, 'Service')) {
@@ -13737,10 +14328,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13737
14328
  if (_.startsWith(d.data.name, 'Bind-Services') || _.startsWith(d.data.name, 'Dial-Services')) {
13738
14329
  className = 'service';
13739
14330
  }
13740
- if (_.startsWith(d.data.name, 'BindPolicies') || _.startsWith(d.data.name, 'DialPolicies') || _.startsWith(d.data.name, 'BindPolicy')) {
14331
+ if (_.startsWith(d.data.name, 'Bind-Policies') || _.startsWith(d.data.name, 'Dial-Policies') || _.startsWith(d.data.name, 'Bind Policy')) {
13741
14332
  className = 'service-policy';
13742
14333
  }
13743
- if (_.includes(d.data.name, 'Service Policies') || _.includes(d.data.type, 'ServicePolicy')) {
14334
+ if (_.includes(d.data.name, 'Service Policies') || _.includes(d.data.type, 'Service Policy')) {
13744
14335
  className = 'service-policy';
13745
14336
  }
13746
14337
  if (_.startsWith(d.data.name, 'Edge Router Policies') || _.startsWith(d.data.type, 'Router Policy')) {
@@ -13768,7 +14359,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13768
14359
  const rawEdgerouters = this.edgerouters;
13769
14360
  const rawEndpoints = this.identities;
13770
14361
  const rawAppwans = this.service_policies;
13771
- const edgeRouterPolicies = this.router_policies;
14362
+ const edgeRouterPolicies = this.edge_router_policies;
13772
14363
  if (d && d.data && d.data.contextMenu === 'Yes') {
13773
14364
  d3.select('#topocontextmenu')
13774
14365
  .style('position', 'absolute')
@@ -13780,7 +14371,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13780
14371
  return;
13781
14372
  }
13782
14373
  let obj = null;
13783
- if (d && d.data && d.data.type === 'Identity') {
14374
+ if (d && d.data && (d.data.type === 'Identity' || d.data.type === 'BrowZer Identity')) {
13784
14375
  if (d.data.status === "Registered") {
13785
14376
  enableLi('#liSingleUT');
13786
14377
  enableLi('#liFLSingleRouter');
@@ -13802,14 +14393,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13802
14393
  disableLi('#liSingleLT');
13803
14394
  disableLi('#liCL');
13804
14395
  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
14396
  this.contextmenuNodeType = 'identity';
13814
14397
  }
13815
14398
  else if (d && d.data && d.data.type === 'Edge Router') {
@@ -13833,14 +14416,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13833
14416
  disableLi('#liCL');
13834
14417
  disableLi('#liLT');
13835
14418
  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
14419
  }
13845
14420
  else if (d && d.data && d.data.type === 'Service') {
13846
14421
  enableLi('#liMet');
@@ -13856,16 +14431,8 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13856
14431
  disableLi('#liLT');
13857
14432
  enableLi('#liSingleUT');
13858
14433
  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
14434
  }
13868
- else if (d && d.data && d.data.type === 'AppWAN') {
14435
+ else if (d && d.data && d.data.type === 'Service Policy') {
13869
14436
  disableLi('#liMet');
13870
14437
  enableLi('#liVC');
13871
14438
  disableLi('#liIns');
@@ -13878,15 +14445,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13878
14445
  disableLi('#liCL');
13879
14446
  disableLi('#liLT');
13880
14447
  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';
14448
+ this.contextmenuNodeType = 'service-policy';
13890
14449
  }
13891
14450
  else if (d && d.data && d.data.type === 'Router Policy') {
13892
14451
  disableLi('#liMet');
@@ -13902,14 +14461,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13902
14461
  disableLi('#liLT');
13903
14462
  disableLi('#liSingleUT');
13904
14463
  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
14464
  }
13914
14465
  else if (d && d.data && d.data.type === 'Network') {
13915
14466
  enableLi('#liMet');
@@ -13941,14 +14492,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13941
14492
  disableLi('#liLT');
13942
14493
  disableLi('#liSingleUT');
13943
14494
  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
14495
  }
13953
14496
  this.contextmenuNode = obj;
13954
14497
  d3.select('#tooltip').style('display', 'none');
@@ -13960,14 +14503,31 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13960
14503
  .style('fill', function (d) {
13961
14504
  return d._children ? 'var(--tableText)' : '#fff';
13962
14505
  })
13963
- .on('mousemove', (event, source) => {
13964
- this.drawTreeTooltip(event, source);
14506
+ .on('mousemove', (event, d) => {
14507
+ this.drawTreeTooltip(event, d);
13965
14508
  })
13966
14509
  .on('mouseout', this.removeTreeTooltip)
13967
14510
  .on('contextmenu', (event) => {
13968
14511
  event.preventDefault();
13969
14512
  })
13970
14513
  .on('click', async (event, d) => {
14514
+ if (d.data.rootNode && d.data.rootNode === 'Yes' && d.data.clickProcess === 'Not Yet') {
14515
+ d3.select(event.currentTarget).transition()
14516
+ .duration(600)
14517
+ .style("stroke-width", "10")
14518
+ .transition()
14519
+ .duration(600)
14520
+ .style("stroke-width", "6")
14521
+ .transition()
14522
+ .duration(600)
14523
+ .style("stroke-width", "3")
14524
+ .transition()
14525
+ .duration(600)
14526
+ .style("stroke-width", "9")
14527
+ .transition()
14528
+ .duration(600)
14529
+ .style("stroke-width", "12");
14530
+ }
13971
14531
  if (d && d.data && d.data.contextMenu === 'Yes') {
13972
14532
  d3.select('#topocontextmenu').style('display', 'none');
13973
14533
  }
@@ -13989,13 +14549,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
13989
14549
  if (d.data &&
13990
14550
  d.data.rootNode &&
13991
14551
  d.data.rootNode === 'Yes' &&
13992
- d.data.type === 'Identity' &&
14552
+ (d.data.type === 'Identity' ||
14553
+ d.data.type === 'BrowZer Identity') &&
13993
14554
  !d.children &&
13994
14555
  !d._children) {
14556
+ d.data.clickProcess = 'Completed';
13995
14557
  const arr = await this.treeNodeProcessor.processIdentitiesForNodeClick(d, this.networkGraph, this.identities, this.uniqId, this.zitiService, this.configs);
13996
14558
  this.uniqId = arr[1];
13997
14559
  this.networkGraph = arr[0];
13998
- d.data.clickProcess = 'Completed';
13999
14560
  this.networkGraph.children.find((nd) => {
14000
14561
  collapseFew(nd, this.openNodes);
14001
14562
  });
@@ -14007,10 +14568,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14007
14568
  d.data.type === 'Service' &&
14008
14569
  !d.children &&
14009
14570
  !d._children) {
14571
+ d.data.clickProcess = 'Completed';
14010
14572
  const arr = await this.treeNodeProcessor.processServicesForNodeClick(d, this.networkGraph, this.services, this.uniqId, this.zitiService);
14011
14573
  this.uniqId = arr[1];
14012
14574
  this.networkGraph = arr[0];
14013
- d.data.clickProcess = 'Completed';
14014
14575
  this.networkGraph.children.find((nd) => {
14015
14576
  collapseFew(nd, this.openNodes);
14016
14577
  });
@@ -14019,13 +14580,13 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14019
14580
  else if (d.data &&
14020
14581
  d.data.rootNode &&
14021
14582
  d.data.rootNode === 'Yes' &&
14022
- d.data.type === 'ServicePolicy' &&
14583
+ d.data.type === 'Service Policy' &&
14023
14584
  !d.children &&
14024
14585
  !d._children) {
14586
+ d.data.clickProcess = 'Completed';
14025
14587
  const arr = await this.treeNodeProcessor.processServicePoliciesForNodeClick(d, this.networkGraph, this.service_policies, this.uniqId, this.zitiService);
14026
14588
  this.uniqId = arr[1];
14027
14589
  this.networkGraph = arr[0];
14028
- d.data.clickProcess = 'Completed';
14029
14590
  this.networkGraph.children.find((nd) => {
14030
14591
  collapseFew(nd, this.openNodes);
14031
14592
  });
@@ -14037,10 +14598,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14037
14598
  d.data.type === 'Edge Router' &&
14038
14599
  !d.children &&
14039
14600
  !d._children) {
14601
+ d.data.clickProcess = 'Completed';
14040
14602
  const arr = await this.treeNodeProcessor.processEdgeroutersForNodeClick(d, this.networkGraph, this.edgerouters, this.uniqId, this.zitiService);
14041
14603
  this.uniqId = arr[1];
14042
14604
  this.networkGraph = arr[0];
14043
- d.data.clickProcess = 'Completed';
14044
14605
  this.networkGraph.children.find((nd) => {
14045
14606
  collapseFew(nd, this.openNodes);
14046
14607
  });
@@ -14052,10 +14613,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14052
14613
  d.data.type === 'Router Policy' &&
14053
14614
  !d.children &&
14054
14615
  !d._children) {
14055
- const arr = await this.treeNodeProcessor.processEdgeRouterPoliciesForNodeClick(d, this.networkGraph, this.router_policies, this.uniqId, this.zitiService);
14616
+ d.data.clickProcess = 'Completed';
14617
+ const arr = await this.treeNodeProcessor.processEdgeRouterPoliciesForNodeClick(d, this.networkGraph, this.edge_router_policies, this.uniqId, this.zitiService);
14056
14618
  this.uniqId = arr[1];
14057
14619
  this.networkGraph = arr[0];
14058
- d.data.clickProcess = 'Completed';
14059
14620
  this.networkGraph.children.find((nd) => {
14060
14621
  collapseFew(nd, this.openNodes);
14061
14622
  });
@@ -14067,10 +14628,10 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14067
14628
  d.data.type === 'Service Router Policy' &&
14068
14629
  !d.children &&
14069
14630
  !d._children) {
14631
+ d.data.clickProcess = 'Completed';
14070
14632
  const arr = await this.treeNodeProcessor.processServiceEdgeRouterPoliciesForNodeClick(d, this.networkGraph, this.service_router_policies, this.uniqId, this.zitiService);
14071
14633
  this.uniqId = arr[1];
14072
14634
  this.networkGraph = arr[0];
14073
- d.data.clickProcess = 'Completed';
14074
14635
  this.networkGraph.children.find((nd) => {
14075
14636
  collapseFew(nd, this.openNodes);
14076
14637
  });
@@ -14099,13 +14660,17 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14099
14660
  this.nodeEnter
14100
14661
  .append('foreignObject')
14101
14662
  .attr('height', '50')
14102
- .attr('width', '330')
14103
- .attr('x', '10')
14104
- .attr('y', '-25')
14663
+ .attr('width', function (d) {
14664
+ return d && d.data && d.data.name.length >= 20 ? '550' : '330';
14665
+ })
14666
+ .attr('x', '20')
14667
+ .attr('y', function (d) {
14668
+ return d && d.data && d.data.rootNode === 'Yes' ? '-5' : '-40';
14669
+ })
14105
14670
  .append('xhtml:body')
14106
14671
  .style('background', 'transparent')
14107
14672
  .html(function (d) {
14108
- return `<div class="text-container"<span>${d.data.name}</span>`;
14673
+ return `<div class="node-text-container"><span>${d.data.name}</span></div>`;
14109
14674
  });
14110
14675
  this.nodeUpdate = this.nodeEnter.merge(this.node);
14111
14676
  this.nodeUpdate
@@ -14199,19 +14764,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14199
14764
  }
14200
14765
  });
14201
14766
  }
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
14767
  function collapseFew(_nd, openNodes) {
14216
14768
  if (_nd.data.id === '#all') {
14217
14769
  return;
@@ -14250,54 +14802,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14250
14802
  this.svg.transition().duration(750).attr('transform', trans);
14251
14803
  }
14252
14804
  }
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
14805
  setColor(d) {
14302
14806
  if (d.status === 'Error' && d.group === 3) {
14303
14807
  return 'red';
@@ -14352,22 +14856,6 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14352
14856
  return 'blue';
14353
14857
  }
14354
14858
  }
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
14859
  dragstarted(event, d) {
14372
14860
  if (!event.active) {
14373
14861
  this.simulation.alphaTarget(0.3).restart();
@@ -14402,10 +14890,14 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14402
14890
  document.getElementById('tooltip').innerHTML = this.readTreeKeyValues(event, s);
14403
14891
  }
14404
14892
  readTreeKeyValues(event, d) {
14405
- let info = '<span>';
14893
+ const startIndex = d.data.name.indexOf('(');
14894
+ const finIndex = d.data.name.indexOf(')');
14895
+ const countStr = startIndex > 0 ? d.data.name.substring(startIndex + 1, finIndex) : 0;
14896
+ let info = `<div class='tool-tip-container'>`;
14406
14897
  const keys = Object.keys(d.data); // mp.keys();
14407
14898
  keys.forEach(function (k) {
14408
- if (k === 'protocol' ||
14899
+ if (k === 'firstChild' ||
14900
+ k === 'protocol' ||
14409
14901
  k === 'contextMenu' ||
14410
14902
  k === 'uuid' ||
14411
14903
  k === 'lastId' ||
@@ -14422,21 +14914,34 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
14422
14914
  k === 'y0') {
14423
14915
  // continue;
14424
14916
  }
14917
+ else if (d[k] instanceof Array) {
14918
+ info =
14919
+ info +
14920
+ '<div class="prop-row"><div class="prop-name">' +
14921
+ k +
14922
+ ':</div><div class="prop-val">' +
14923
+ d[k].join('<br> &nbsp;&nbsp; &nbsp;&nbsp;') +
14924
+ '</div></div>';
14925
+ }
14425
14926
  else {
14426
- info = info + ' ' + k + ' : ' + d.data[k] + '<br>';
14927
+ const propVal = d.data[k] || '';
14928
+ info = info + '<div class="prop-row"><div class="prop-name">' + k + ':</div><div class="prop-val">' + propVal + '</div></div>';
14427
14929
  }
14428
14930
  });
14429
- return info + '</span>';
14931
+ if (d.data.firstChild && d.data.firstChild === 'Yes' && countStr > this.maxObjectsPerNode - 1) {
14932
+ info = info + '<span class="tooltip-help-text">Note: expand node disabled. Use search filter.</span>';
14933
+ }
14934
+ else if (d.data.firstChild && d.data.firstChild === 'Yes' && countStr < this.maxObjectsPerNode) {
14935
+ info = info + '<span class="tooltip-help-text">Note: click to expand child nodes </span>';
14936
+ }
14937
+ return info + '</div>';
14430
14938
  }
14431
- hide() { }
14432
- toggleModalSize() { }
14433
- ;
14434
14939
  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 }); }
14940
+ 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
14941
  }
14437
14942
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerComponent, decorators: [{
14438
14943
  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"] }]
14944
+ 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
14945
  }], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
14441
14946
  type: Inject,
14442
14947
  args: [SETTINGS_SERVICE]
@@ -18933,10 +19438,6 @@ class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
18933
19438
  this.isLoading = true;
18934
19439
  this.applySelectedAttributes();
18935
19440
  this.svc.save(this.formData).then((result) => {
18936
- if (result?.close) {
18937
- this.closeModal(true, true);
18938
- this.returnToListPage();
18939
- }
18940
19441
  const data = result?.data?.id ? result.data : result;
18941
19442
  if (!isEmpty(data.id)) {
18942
19443
  this.formData = data || this.formData;
@@ -18945,6 +19446,10 @@ class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm {
18945
19446
  else {
18946
19447
  this.initData = this.formData;
18947
19448
  }
19449
+ if (result?.close) {
19450
+ this.closeModal(true, true);
19451
+ this.returnToListPage();
19452
+ }
18948
19453
  }).finally(() => {
18949
19454
  this.isLoading = false;
18950
19455
  });
@@ -19019,7 +19524,7 @@ ${this.formData.id ? '--request PATCH \\' : ''}
19019
19524
  provide: MatDialogRef,
19020
19525
  useValue: {}
19021
19526
  }
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 Service 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: ["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"] }] }); }
19527
+ ], 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: ["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"] }] }); }
19023
19528
  }
19024
19529
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPolicyFormComponent, decorators: [{
19025
19530
  type: Component,
@@ -19028,7 +19533,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19028
19533
  provide: MatDialogRef,
19029
19534
  useValue: {}
19030
19535
  }
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 Service 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>" }]
19536
+ ], 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
19537
  }], ctorParameters: function () { return [{ type: SettingsService, decorators: [{
19033
19538
  type: Inject,
19034
19539
  args: [SETTINGS_SERVICE]
@@ -20829,7 +21334,7 @@ class ZitiControllerDataService extends ZitiDataService {
20829
21334
  break;
20830
21335
  case 'SELECT':
20831
21336
  case 'COMBO':
20832
- const val = isNumber(filter.value) ? `${filter.value}` : `"${filter.value}"`;
21337
+ const val = (isNumber(filter.value) || isBoolean(filter.value)) ? `${filter.value}` : `"${filter.value}"`;
20833
21338
  filterVal = `${filter.columnId} = ${val}`;
20834
21339
  break;
20835
21340
  case 'DATETIME':
@@ -20838,6 +21343,9 @@ class ZitiControllerDataService extends ZitiDataService {
20838
21343
  case 'ATTRIBUTE':
20839
21344
  filterVal = this.getAttributeFilter(filter.value, filter.columnId);
20840
21345
  break;
21346
+ case 'BOOLEAN':
21347
+ filterVal = `${filter.columnId}=${filter.value}`;
21348
+ break;
20841
21349
  default:
20842
21350
  filterVal = `${filter.columnId} contains "${filter.value}"`;
20843
21351
  break;
@@ -20917,5 +21425,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20917
21425
  * Generated bundle index. Do not edit.
20918
21426
  */
20919
21427
 
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 };
21428
+ 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
21429
  //# sourceMappingURL=openziti-ziti-console-lib.mjs.map