You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by dg...@apache.org on 2021/02/19 12:59:47 UTC

[incubator-datalab] 03/04: [DATALAB-2299]: Fixed conflicts for detail dialogs

This is an automated email from the ASF dual-hosted git repository.

dgnatyshyn pushed a commit to branch DATALAB-2299
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit f1581600026ebad7aa75155bf8b877c62b235e51
Author: Dmytro_Gnatyshyn <di...@ukr.net>
AuthorDate: Fri Feb 19 14:56:18 2021 +0200

    [DATALAB-2299]: Fixed conflicts for detail dialogs
---
 .../management-grid/management-grid.component.html |   2 +-
 .../management-grid/management-grid.component.ts   |   2 +-
 .../create-odahu-cluster.component.ts              |  15 +-
 .../odahu/odahu-grid/odahu-grid.component.ts       |   3 +-
 .../resources/webapp/src/app/app.routing.module.ts |  10 +-
 .../webapp/src/app/core/services/index.ts          |   2 +-
 .../app/core/services/odahu-deployment.service.ts  |   9 +-
 .../bucket-browser/bucket-browser.component.ts     |   1 -
 .../folder-tree/folder-tree.component.ts           |   5 -
 .../detail-dialog/detail-dialog.component.html     |   2 +-
 .../detail-dialog/detail-dialog.component.ts       |   4 +-
 .../resources-grid/resources-grid.component.html   |  36 ++--
 .../resources-grid/resources-grid.component.ts     |  14 +-
 .../resources-grid/resources-grid.model.ts         | 212 ++++++++-------------
 .../src/app/resources/resources.component.ts       |   4 +-
 .../main/resources/webapp/src/app/shared/index.ts  |   1 -
 .../modal-dialog/edge-action-dialog/index.ts       |   2 +-
 .../webapp/src/app/shared/navbar/index.ts          |   4 +-
 18 files changed, 140 insertions(+), 188 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html
index d8d83a5..2168c02 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html
@@ -38,7 +38,7 @@
         </th>
         <td mat-cell *matCellDef="let element">
           <div
-            *ngIf="element.type !== 'edge node' && (element.status==='running' || element.status==='stopped') && !clustersInProgress(element.resources)"
+            *ngIf="element.type !== 'odahu' && element.type !== 'edge node' && (element.status==='running' || element.status==='stopped') && !clustersInProgress(element.resources || [])"
              class="empty-checkbox"
              [ngClass]="{'checked': element.isSelected}"
              (click)="toggleActionForAll(element);$event.stopPropagation()"
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.ts
index 53d00cb..4a3a692 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.ts
@@ -213,7 +213,7 @@ export class ManagementGridComponent implements OnInit, AfterViewInit, AfterView
     this.allActiveNotebooks = this.allFilteredEnvironmentData
       .filter(v => v.name &&
       (v.status === 'running' || v.status === 'stopped') &&
-      !this.clustersInProgress(v.resources));
+      !this.clustersInProgress(v.resources || []));
     this.checkFilters();
   }
 
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/odahu/create-odahu-claster/create-odahu-cluster.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/odahu/create-odahu-claster/create-odahu-cluster.component.ts
index 4010e78..a4f8360 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/odahu/create-odahu-claster/create-odahu-cluster.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/odahu/create-odahu-claster/create-odahu-cluster.component.ts
@@ -66,16 +66,13 @@ export class CreateOdahuClusterComponent implements OnInit {
   }
 
   public setEndpoints(project): void {
-    console.log(project);
-    console.log(this.data);
     this.endpoints = project.endpoints
-      // .filter(e => e.status === 'RUNNING' && !this.data.some(odahu => odahu.status !== 'FAILED'
-      //   && odahu.status !== 'TERMINATED'
-      //   && odahu.endpoint === e.name
-      //   && odahu.project === project.name)
-      // )
+      .filter(e => e.status === 'RUNNING' && !this.data.some(odahu => odahu.status !== 'FAILED'
+        && odahu.status !== 'TERMINATED'
+        && odahu.endpoint === e.name
+        && odahu.project === project.name)
+      )
       .map(e => e.name);
-    console.log(project.endpoints);
   }
 
   private initFormModel(): void {
@@ -87,7 +84,7 @@ export class CreateOdahuClusterComponent implements OnInit {
     });
   }
 
-  private createOdahuCluster(value): void {
+  public createOdahuCluster(value): void {
     this.dialogRef.close();
     this.odahuDeploymentService.createOdahuNewCluster(value).subscribe(() => {
       this.toastr.success('Odahu cluster creation is processing!', 'Success!');
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/odahu/odahu-grid/odahu-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/odahu/odahu-grid/odahu-grid.component.ts
index 817d12b..cf05944 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/odahu/odahu-grid/odahu-grid.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/odahu/odahu-grid/odahu-grid.component.ts
@@ -2,9 +2,10 @@ import { Component, OnInit } from '@angular/core';
 import {Subscription} from 'rxjs';
 import {OdahuDataService} from '../odahu-data.service';
 import { MatTableDataSource } from '@angular/material/table';
-import {OdahuDeploymentService} from '../../../core/services';
+
 import {ToastrService} from 'ngx-toastr';
 import {MatDialog} from '@angular/material/dialog';
+import {OdahuDeploymentService} from '../../../core/services';
 import {OdahuActionDialogComponent} from '../../../shared/modal-dialog/odahu-action-dialog';
 
 @Component({
diff --git a/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts b/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts
index 0387a34..fc001d4 100644
--- a/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts
@@ -26,17 +26,17 @@ import { ResourcesComponent } from './resources/resources.component';
 import { AccessNotebookGuideComponent, PublicKeyGuideComponent } from './help';
 import { NotFoundComponent } from './service-pages/not-found/not-found.component';
 import { AccessDeniedComponent } from './service-pages/access-denied/access-denied.component';
-import { ReportingComponent } from './reports/reporting/reporting.component';
 import { WebterminalComponent } from './webterminal/webterminal.component';
-import { ManagementComponent } from './administration/management/management.component';
+import { ManagementComponent } from './administration/management';
 import { ProjectComponent } from './administration/project/project.component';
 import { RolesComponent } from './administration/roles/roles.component';
-import { SwaggerComponent } from './swagger/swagger.component';
+import { SwaggerComponent } from './swagger';
 import { AuthorizationGuard, CheckParamsGuard, CloudProviderGuard, AdminGuard, AuditGuard } from './core/services';
-import {AuditComponent} from './reports/audit/audit.component';
 import {ConfigurationComponent} from './administration/configuration/configuration.component';
-import {OdahuComponent} from './administration/odahu/odahu.component';
 import {ProjectAdminGuard} from './core/services/projectAdmin.guard';
+import {ReportingComponent} from './reports/reporting/reporting.component';
+import {OdahuComponent} from './administration/odahu/odahu.component';
+import {AuditComponent} from './reports/audit/audit.component';
 
 const routes: Routes = [{
   path: 'login',
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/index.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/index.ts
index 4e9a898..d847415 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/services/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/services/index.ts
@@ -38,5 +38,5 @@ export * from './rolesManagement.service';
 export * from './dataengineConfiguration.service';
 export * from './storage.service';
 export * from './project.service';
-export * from './endpoint.service';
 export * from './odahu-deployment.service';
+export * from './endpoint.service';
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/odahu-deployment.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/odahu-deployment.service.ts
index f6fe528..6a324f7 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/services/odahu-deployment.service.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/services/odahu-deployment.service.ts
@@ -1,12 +1,11 @@
 import { Injectable } from '@angular/core';
-import {Observable} from 'rxjs';
-import { map, catchError } from 'rxjs/operators';
+import { Observable } from 'rxjs';
+import { catchError, map } from 'rxjs/operators';
+
 import { ApplicationServiceFacade } from './applicationServiceFacade.service';
 import { ErrorUtils } from '../util';
 
-@Injectable({
-  providedIn: 'root'
-})
+@Injectable()
 
 export class OdahuDeploymentService {
   constructor(private applicationServiceFacade: ApplicationServiceFacade) { }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts
index 4c82dc7..7e8ceaf 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/bucket-browser.component.ts
@@ -268,7 +268,6 @@ export class BucketBrowserComponent implements OnInit, OnDestroy {
   }
 
   public deleteAddedFile(file) {
-    console.log('deleteAddedFile');
     if ( file.subscr && file.request) {
       this.dialog.open(BucketConfirmationDialogComponent, {data: {items: file, type: 'cancel-uploading'} , width: '550px'})
         .afterClosed().subscribe((res) => {
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts
index 1721bbc..900723d 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/bucket-browser/folder-tree/folder-tree.component.ts
@@ -76,8 +76,6 @@ export class FolderTreeComponent implements OnDestroy {
         this.dataSource.data = data;
         const subject = this.dataSource._flattenedData;
         const subjectData = subject.getValue();
-        console.log('selected', this.selectedFolder);
-        console.log('data', subjectData);
           if (this.selectedFolder) {
             if (this.cloud !== 'azure') {
               this.selectedFolder = subjectData.find(v => v.item === this.selectedFolder.item &&
@@ -86,8 +84,6 @@ export class FolderTreeComponent implements OnDestroy {
               const selectedFolderPath = this.selectedFolder.obj.slice(0, this.selectedFolder.obj.lastIndexOf('/') + 1);
               this.selectedFolder = subjectData.find(v => {
                 const objectPath = v.obj.slice(0, v.obj.lastIndexOf('/') + 1);
-                console.log('objectPath', selectedFolderPath);
-                console.log('selectedFolderPath', selectedFolderPath);
                 return v.item === this.selectedFolder.item &&
                   v.level === this.selectedFolder.level && objectPath === selectedFolderPath;
               });
@@ -164,7 +160,6 @@ export class FolderTreeComponent implements OnDestroy {
     if (el) {
       this.treeControl.expand(el);
       this.selectedFolder = el;
-      console.log(this.selectedFolder);
       const path = this.getPath(el);
       this.path = [];
       const data = {
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
index 3d2dfda..51d6883 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
@@ -23,7 +23,7 @@
     <button type="button" class="close" (click)="dialogRef.close()">&times;</button>
   </header>
   <div class="dialog-content">
-    <div *ngIf="data.legion">
+    <div *ngIf="data.odahu">
       <table class="detail-header">
         <tr>
           <td>{{odahu.name}}</td>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts
index 5902275..58b8fbf 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts
@@ -26,9 +26,9 @@ import {DateUtils, CheckUtils, HelpUtils} from '../../../core/util';
 import { DICTIONARY } from '../../../../dictionary/global.dictionary';
 import { DataengineConfigurationService } from '../../../core/services';
 import { CLUSTER_CONFIGURATION } from '../../computational/computational-resource-create-dialog/cluster-configuration-templates';
-import {BucketBrowserComponent} from '../../bucket-browser/bucket-browser.component';
 import {CopyPathUtils} from '../../../core/util/copyPathUtils';
 import {AuditService} from '../../../core/services/audit.service';
+import {BucketBrowserComponent} from '../../bucket-browser/bucket-browser.component';
 
 @Component({
   selector: 'detail-dialog',
@@ -38,7 +38,7 @@ import {AuditService} from '../../../core/services/audit.service';
 
 export class DetailDialogComponent implements OnInit {
   readonly DICTIONARY = DICTIONARY;
-  readonly PROVIDER = this.data.notebook.cloud_provider.toLowerCase();
+  readonly PROVIDER = this.data.pro?.cloud_provider?.toLowerCase() || this.data.odahu?.cloud_provider?.toLowerCase();
   public isCopied: boolean = true;
   notebook: any;
   upTimeInHours: number;
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
index 0b08163..e0c6321 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
@@ -134,7 +134,7 @@
                           matTooltipPosition="above" class="ellipsis">
                   {{ element.tags.custom_tag }}
                 </mat-chip>
-                <mat-chip matTooltip="User tag: {{ element.tags.user_tag }}" matTooltipPosition="above" class="ellipsis">
+                <mat-chip *ngIf="element.tags.user_tag" matTooltip="User tag: {{ element.tags.user_tag }}" matTooltipPosition="above" class="ellipsis">
                   {{ element.tags.user_tag }}
                 </mat-chip>
                 <mat-chip matTooltip="Project tag: {{ element.tags.project_tag }}" matTooltipPosition="above" class="ellipsis">
@@ -149,9 +149,9 @@
               </computational-resources-list>
             </td>
             <td *ngIf="healthStatus?.billingEnabled" class="cost-col">
-              <span class="total_cost">{{ element.billing.report_lines.length ? (element.cost | localcurrency) : 'N/A' }}</span>
+              <span class="total_cost">{{ element.billing?.report_lines?.length ? (element.cost | localcurrency) : 'N/A' }}</span>
               <span (click)="element.billing && printCostDetails(element)" class="currency_details"
-                    [ngClass]="{ 'not-allowed' : !element.billing.report_lines.length }">
+                    [ngClass]="{ 'not-allowed' : !element.billing?.report_lines?.length }">
               <i class="material-icons">help_outline</i>
             </span>
             </td>
@@ -252,25 +252,31 @@
                 </ul>
                 <ul class="list-unstyled" *ngIf="element.shape === 'odahu cluster'">
                   <li class="project-seting-item" *ngIf="element.status === 'stopped'" (click)="odahuAction(element, 'start')">
-                    <i class="material-icons">play_circle_outline</i>
-                    <a class="action">
-                      Start
-                    </a>
+                    <div>
+                      <i class="material-icons">play_circle_outline</i>
+                      <a class="action">
+                        Start
+                      </a>
+                    </div>
                   </li>
                   <li class="project-seting-item" *ngIf="element.status === 'running'" (click)="odahuAction(element, 'stop')">
-                    <i class="material-icons">pause_circle_outline</i>
-                    <a class="action" >
-                      Stop
-                    </a>
+                    <div>
+                      <i class="material-icons">pause_circle_outline</i>
+                      <a class="action" >
+                        Stop
+                      </a>
+                    </div>
                   </li>
                   <li class="project-seting-item"
                       [ngClass]="{'disabled': element.status === 'stopped' || element.status.toLowerCase() === 'stopping' || element.status.toLowerCase() === 'starting'}"
                       *ngIf="element.status === element.status !== 'terminated' && element.status !== 'terminating'" (click)="odahuAction(element, 'terminate')"
                   >
-                    <i class="material-icons">phonelink_off</i>
-                    <a class="action">
-                      Terminate
-                    </a>
+                    <div>
+                      <i class="material-icons">phonelink_off</i>
+                      <a class="action">
+                        Terminate
+                      </a>
+                    </div>
                   </li>
                 </ul>
               </bubble-up>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
index cdb4407..a41a314 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
@@ -23,7 +23,7 @@ import { animate, state, style, transition, trigger } from '@angular/animations'
 import { ToastrService } from 'ngx-toastr';
 import { MatDialog } from '@angular/material/dialog';
 import {ProjectService, UserResourceService, OdahuDeploymentService} from '../../core/services';
-import { ExploratoryModel, Exploratory } from './resources-grid.model';
+import { ExploratoryModel } from './resources-grid.model';
 import { FilterConfigurationModel } from './filter-configuration.model';
 import { GeneralEnvironmentStatus } from '../../administration/management/management.model';
 import { ConfirmationDialogType } from '../../shared';
@@ -37,12 +37,12 @@ import { ConfirmationDialogComponent } from '../../shared/modal-dialog/confirmat
 import { SchedulerComponent } from '../scheduler';
 import { DICTIONARY } from '../../../dictionary/global.dictionary';
 import {ProgressBarService} from '../../core/services/progress-bar.service';
-import {OdahuActionDialogComponent} from '../../shared/modal-dialog/odahu-action-dialog';
 import {ComputationModel} from '../computational/computational-resource.model';
 import {NotebookModel} from '../exploratory/notebook.model';
 import {AuditService} from '../../core/services/audit.service';
-import {JAN} from '@angular/material/core';
-import {ReconfirmationDialogComponent} from '../../administration/management/management-grid/management-grid.component';
+import {NotificationDialogComponent} from '../../shared/modal-dialog/notification-dialog';
+import {OdahuActionDialogComponent} from '../../shared/modal-dialog/odahu-action-dialog';
+
 
 export interface SharedEndpoint {
   edge_node_ip: string;
@@ -96,7 +96,7 @@ export class ResourcesGridComponent implements OnInit {
   @Input() projects: Array<any>;
   @Output() getEnvironments: EventEmitter<any> = new EventEmitter();
 
-  environments: Exploratory[];
+  environments;
 
   collapseFilterRow: boolean = false;
   filtering: boolean = false;
@@ -104,7 +104,7 @@ export class ResourcesGridComponent implements OnInit {
   activeProject: any;
   healthStatus: GeneralEnvironmentStatus;
 
-  filteredEnvironments: Exploratory[] = [];
+  filteredEnvironments = [];
   filterConfiguration: FilterConfigurationModel = new FilterConfigurationModel('', [], [], [], '', '');
   filterForm: FilterConfigurationModel = new FilterConfigurationModel('', [], [], [], '', '');
 
@@ -322,7 +322,7 @@ export class ResourcesGridComponent implements OnInit {
   }
 
   private getDefaultFilterConfiguration(): void {
-    const data: Exploratory[] = this.environments;
+    const data = this.environments;
     const shapes = [], statuses = [], resources = [];
 
     data.filter(elem => elem.exploratory.map((item: any) => {
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts
index 1465199..8f9ecce 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts
@@ -57,141 +57,95 @@ export class ExploratoryModel {
   public static loadEnvironments(data: Array<any>) {
     if (data) {
 
-
-  //     return data.map((value) => {
-  //       const exploratory = value.exploratory.map(el => {
-  //         let provider;
-  //         if (el.cloud_provider) {
-  //           provider = el.cloud_provider.toLowerCase();
-  //         }
-  //         return new ExploratoryModel(
-  //           provider,
-  //           el.exploratory_name,
-  //           el.template_name,
-  //           el.image,
-  //           el.status,
-  //           el.shape,
-  //           el.computational_resources,
-  //           el.up_time,
-  //           el.exploratory_url,
-  //           value.shared[el.endpoint].edge_node_ip,
-  //           el.private_ip,
-  //           el.exploratory_user,
-  //           el.exploratory_pass,
-  //           value.shared[el.endpoint][DICTIONARY[provider].bucket_name],
-  //           value.shared[el.endpoint][DICTIONARY[provider].shared_bucket_name],
-  //           el.error_message,
-  //           el[DICTIONARY[provider].billing.cost],
-  //           el[DICTIONARY[provider].billing.currencyCode],
-  //           el.billing,
-  //           el.libs,
-  //           value.shared[el.endpoint][DICTIONARY[provider].user_storage_account_name],
-  //           value.shared[el.endpoint][DICTIONARY[provider].shared_storage_account_name],
-  //           value.shared[el.endpoint][DICTIONARY[provider].datalake_name],
-  //           value.shared[el.endpoint][DICTIONARY[provider].datalake_user_directory_name],
-  //           value.shared[el.endpoint][DICTIONARY[provider].datalake_shared_directory_name],
-  //           el.project,
-  //           el.endpoint,
-  //           el.tags
-  //         );
-  //       });
-  //
-  //       const odahu = value.odahu.map(el => {
-  //         let provider;
-  //         if (el.cloud_provider) {
-  //           provider = el.cloud_provider.toLowerCase();
-  //         } else {
-  //           provider = 'azure';
-  //         }
-  //         return new ExploratoryModel(
-  //           provider,
-  //           el.name,
-  //           el.template_name,
-  //           el.image,
-  //           el.status.toLowerCase(),
-  //           'odahu cluster',
-  //           [],
-  //           el.up_time,
-  //           el.urls,
-  //           value.shared[el.endpoint].edge_node_ip,
-  //           el.private_ip,
-  //           el.exploratory_user,
-  //           el.exploratory_pass,
-  //           el.grafana_admin,
-  //           el.grafana_pass,
-  //           el.error_message,
-  //           el[DICTIONARY[provider].billing.cost],
-  //           el[DICTIONARY[provider].billing.currencyCode],
-  //           [],
-  //           [],
-  //           '',
-  //           '',
-  //           '',
-  //           '',
-  //           '',
-  //           el.project,
-  //           el.endpoint,
-  //           el.tags
-  //         )});
-  //       return {
-  //         project: value.project,
-  //         exploratory: [...exploratory, ...odahu]
-  //       };
-  //     });
-  //   }
-  // }
-
-
       return data.map((value) => {
+        const exploratory = value.exploratory.map(el => {
+          const provider = el.cloud_provider.toLowerCase();
+          const billing = value.exploratoryBilling.filter(res => res.name === el.exploratory_name)[0];
+          return new ExploratoryModel(
+            provider,
+            el.exploratory_name,
+            el.template_name,
+            el.image,
+            el.status,
+            el.shape,
+            el.computational_resources,
+            el.up_time,
+            el.exploratory_url,
+            value.shared[el.endpoint].edge_node_ip,
+            el.private_ip,
+            el.exploratory_user,
+            el.exploratory_pass,
+            value.shared[el.endpoint][DICTIONARY[provider].bucket_name],
+            value.shared[el.endpoint][DICTIONARY[provider].shared_bucket_name],
+            el.error_message,
+            billing ? billing.total_cost : '',
+            billing ? billing.currency : '',
+            billing,
+            el.libs,
+            value.shared[el.endpoint][DICTIONARY[provider].user_storage_account_name],
+            value.shared[el.endpoint][DICTIONARY[provider].shared_storage_account_name],
+            value.shared[el.endpoint][DICTIONARY[provider].datalake_name],
+            value.shared[el.endpoint][DICTIONARY[provider].datalake_user_directory_name],
+            value.shared[el.endpoint][DICTIONARY[provider].datalake_shared_directory_name],
+            el.project,
+            el.endpoint,
+            el.tags,
+            value.shared[el.endpoint].status,
+            !!el.computational_resources.filter(resource => resource.status !== 'terminated' && resource.status !== 'failed').length
+          );
+        });
+
+        const odahu = value.odahu.map(el => {
+          let provider;
+          if (el.cloud_provider) {
+            provider = el.cloud_provider.toLowerCase();
+          } else {
+            provider = 'azure';
+          }
+          return new ExploratoryModel(
+            provider,
+            el.name,
+            el.template_name,
+            el.image,
+            el.status.toLowerCase(),
+            'odahu cluster',
+            [],
+            el.up_time,
+            el.urls,
+            value.shared[el.endpoint].edge_node_ip,
+            el.private_ip,
+            el.exploratory_user,
+            el.exploratory_pass,
+            el.grafana_admin,
+            el.grafana_pass,
+            el.error_message,
+            el[DICTIONARY[provider].billing.cost],
+            el[DICTIONARY[provider].billing.currencyCode],
+            [],
+            [],
+            '',
+            '',
+            '',
+            '',
+            '',
+            el.project,
+            el.endpoint,
+            el.tags,
+            '',
+            false,
+          ); });
         return {
           project: value.project,
-          projectEndpoints: value.shared,
-          endpoints: value.endpoints,
-          exploratory: value.exploratory.map(el => {
-            const provider = el.cloud_provider.toLowerCase();
-            const billing = value.exploratoryBilling.filter(res => res.name === el.exploratory_name)[0];
-            return new ExploratoryModel(
-              provider,
-              el.exploratory_name,
-              el.template_name,
-              el.image,
-              el.status,
-              el.shape,
-              el.computational_resources,
-              el.up_time,
-              el.exploratory_url,
-              value.shared[el.endpoint].edge_node_ip,
-              el.private_ip,
-              el.exploratory_user,
-              el.exploratory_pass,
-              value.shared[el.endpoint][DICTIONARY[provider].bucket_name],
-              value.shared[el.endpoint][DICTIONARY[provider].shared_bucket_name],
-              el.error_message,
-              billing ? billing.total_cost : '',
-              billing ? billing.currency : '',
-              billing,
-              el.libs,
-              value.shared[el.endpoint][DICTIONARY[provider].user_storage_account_name],
-              value.shared[el.endpoint][DICTIONARY[provider].shared_storage_account_name],
-              value.shared[el.endpoint][DICTIONARY[provider].datalake_name],
-              value.shared[el.endpoint][DICTIONARY[provider].datalake_user_directory_name],
-              value.shared[el.endpoint][DICTIONARY[provider].datalake_shared_directory_name],
-              el.project,
-              el.endpoint,
-              el.tags,
-              value.shared[el.endpoint].status,
-              !!el.computational_resources.filter(resource => resource.status !== 'terminated' && resource.status !== 'failed').length
-            );
-          })
+          exploratory: [...exploratory, ...odahu]
         };
       });
     }
   }
 }
 
-export interface Exploratory {
-  project: string;
-  endpoints: [];
-  projectEndpoints: [];
-  exploratory: ExploratoryModel[];
-}
+// export interface Exploratory {
+//   project: string;
+//   endpoints: [];
+//   projectEndpoints: [];
+//   exploratory: ExploratoryModel[];
+// }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts
index f944230..a5185b0 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources.component.ts
@@ -23,11 +23,11 @@ import { MatDialog } from '@angular/material/dialog';
 
 import { ResourcesGridComponent } from './resources-grid/resources-grid.component';
 import { ExploratoryEnvironmentCreateComponent } from './exploratory/create-environment';
-import { Exploratory } from './resources-grid/resources-grid.model';
 import {ApplicationSecurityService, HealthStatusService} from '../core/services';
 import { ManageUngitComponent } from './manage-ungit/manage-ungit.component';
 import {BucketBrowserComponent} from './bucket-browser/bucket-browser.component';
 
+
 @Component({
   selector: 'datalab-resources',
   templateUrl: 'resources.component.html',
@@ -35,7 +35,7 @@ import {BucketBrowserComponent} from './bucket-browser/bucket-browser.component'
 })
 
 export class ResourcesComponent implements OnInit, AfterViewInit {
-  public exploratoryEnvironments: Exploratory[] = [];
+  public exploratoryEnvironments = [];
   public healthStatus: any;
   projects = [];
 
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/index.ts b/services/self-service/src/main/resources/webapp/src/app/shared/index.ts
index 620cb7d..0c56c01 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/index.ts
@@ -21,4 +21,3 @@ export * from './modal-dialog/confirmation-dialog';
 export * from './modal-dialog/progress-dialog';
 
 export * from './bubble';
-export * from './inform-message';
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/edge-action-dialog/index.ts b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/edge-action-dialog/index.ts
index fd6e98a..c91d503 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/edge-action-dialog/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/edge-action-dialog/index.ts
@@ -21,7 +21,7 @@ import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { EdgeActionDialogComponent } from './edge-action-dialog.component';
 import { MaterialModule } from '../../material.module';
-import {FormsModule} from "@angular/forms";
+import {FormsModule} from '@angular/forms';
 
 export * from './edge-action-dialog.component';
 
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/index.ts b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/index.ts
index 65cf645..0041163 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/index.ts
@@ -22,10 +22,11 @@ import { CommonModule } from '@angular/common';
 import { RouterModule } from '@angular/router';
 import { MaterialModule } from '../material.module';
 import { ProgressDialogModule, BubbleModule } from '../index';
-
 import { NavbarComponent } from './navbar.component';
 import { NotificationDialogModule } from '../modal-dialog/notification-dialog';
 import {EdgeActionDialogModule} from '../modal-dialog/edge-action-dialog';
+import {OdahuActionDialogModule} from '../modal-dialog/odahu-action-dialog';
+
 
 export * from './navbar.component';
 
@@ -38,6 +39,7 @@ export * from './navbar.component';
     EdgeActionDialogModule,
     ProgressDialogModule,
     BubbleModule,
+    OdahuActionDialogModule
   ],
   declarations: [NavbarComponent],
   exports: [NavbarComponent, RouterModule]


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org