You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ze...@apache.org on 2022/05/20 04:22:54 UTC

[incubator-streampipes] branch STREAMPIPES-537 updated: [WIP] new routing data explorer

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

zehnder pushed a commit to branch STREAMPIPES-537
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git


The following commit(s) were added to refs/heads/STREAMPIPES-537 by this push:
     new 532f5a4ab [WIP] new routing data explorer
532f5a4ab is described below

commit 532f5a4ab02eb5b8bb9de5f72beaa4235d6d2d69
Author: Philipp Zehnder <ze...@fzi.de>
AuthorDate: Fri May 20 06:22:44 2022 +0200

    [WIP] new routing data explorer
---
 .idea/runConfigurations/all_extensions_jvm.xml     |   1 +
 .idea/runConfigurations/backend.xml                |   1 +
 ui/deployment/prebuild.js                          |   2 +-
 ...data-explorer-dashboard-overview.component.html | 135 +++++++++++----------
 .../data-explorer-dashboard-overview.component.ts  |  38 ++++--
 .../data-explorer-dashboard-panel.component.html   | 114 +++++++----------
 .../data-explorer-dashboard-panel.component.ts     |  18 ++-
 .../app/data-explorer/data-explorer.component.html |   6 +-
 .../app/data-explorer/data-explorer.component.ts   |  15 ++-
 ui/src/app/data-explorer/data-explorer.module.ts   |  29 ++++-
 10 files changed, 202 insertions(+), 157 deletions(-)

diff --git a/.idea/runConfigurations/all_extensions_jvm.xml b/.idea/runConfigurations/all_extensions_jvm.xml
index 20063d047..0a4ca6093 100644
--- a/.idea/runConfigurations/all_extensions_jvm.xml
+++ b/.idea/runConfigurations/all_extensions_jvm.xml
@@ -9,6 +9,7 @@
       <env name="SP_DATA_LAKE_HOST" value="localhost" />
       <env name="SP_DATA_LAKE_PORT" value="8086" />
       <env name="SP_IMAGE_STORAGE_LOCATION" value=".streampipes/spImages/" />
+      <env name="SP_HOST" value="141.21.12.79" />
     </envs>
     <option name="MAIN_CLASS_NAME" value="org.apache.streampipes.extensions.all.jvm.AllExtensionsInit" />
     <module name="streampipes-extensions-all-jvm" />
diff --git a/.idea/runConfigurations/backend.xml b/.idea/runConfigurations/backend.xml
index ff3c77297..36d749c21 100644
--- a/.idea/runConfigurations/backend.xml
+++ b/.idea/runConfigurations/backend.xml
@@ -14,6 +14,7 @@
       <env name="SP_JMS_HOST" value="localhost" />
       <env name="SP_DEBUG" value="true " />
       <env name="SP_PRIORITIZED_PROTOCOL" value="kafka" />
+      <env name="SP_HOST" value="141.21.12.79" />
     </envs>
     <method v="2">
       <option name="Make" enabled="true" />
diff --git a/ui/deployment/prebuild.js b/ui/deployment/prebuild.js
index f104a2e1d..6947f123d 100644
--- a/ui/deployment/prebuild.js
+++ b/ui/deployment/prebuild.js
@@ -83,7 +83,7 @@ for (let module of config.modules) {
 // Create necessary JavaScript-Files from Template and move to respective Directory
 fs.writeFileSync('src/app/appng5.module.ts', mustache.render(fs.readFileSync('deployment/appng5.module.mst', 'utf8').toString(), modulesActive));
 fs.writeFileSync('src/app/home/home.service.ts', mustache.render(fs.readFileSync('deployment/home.service.mst', 'utf8').toString(), modulesActive));
-fs.writeFileSync('src/app/app-routing.module.ts', mustache.render(fs.readFileSync('deployment/app-routing.module.mst', 'utf8').toString(), modulesActive));
+// fs.writeFileSync('src/app/app-routing.module.ts', mustache.render(fs.readFileSync('deployment/app-routing.module.mst', 'utf8').toString(), modulesActive));
 fs.writeFileSync('src/app/core/components/base-navigation.component.ts', mustache.render(fs.readFileSync('deployment/base-navigation.component.mst', 'utf8').toString(), modulesActive));
 fs.writeFileSync('src/scss/sp/sp-theme.scss', fs.readFileSync('deployment/sp-theme.scss'));
 fs.writeFileSync('src/app/services/app.constants.ts', fs.readFileSync('deployment/app-constants.ts', 'utf8'));
diff --git a/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.html b/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.html
index 67d255d85..4b4c60f19 100644
--- a/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.html
+++ b/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.html
@@ -17,79 +17,84 @@
   -->
 
 
-<div fxFlex="100" fxLayout="column">
+<sp-data-explorer [activeLink]="'overview'" [dashboardsLoaded]="dashboardsLoaded" [dataViewDashboards]="dataViewDashboards">
     <div fxFlex="100" fxLayout="column">
-        <div fxLayout="row" class="fixed-height options-bar page-container-nav sp-tab-bg">
-            <div fxLayoutAlign="start center" fxLayout="row" class="pl-10">
-                <button mat-button mat-raised-button color="accent"
-                        data-cy="open-new-data-view-dialog"
+        <div fxFlex="100" fxLayout="column">
+            <div fxLayout="row" class="fixed-height options-bar page-container-nav sp-tab-bg">
+                <div fxLayoutAlign="start center" fxLayout="row" class="pl-10">
+                    <button mat-button mat-raised-button color="accent" data-cy="open-new-data-view-dialog"
                         (click)="openNewDataViewDialog()" class="mr-10" *ngIf="hasDataExplorerWritePrivileges">
-                    <i class="material-icons">add</i>
-                    <span>New Data View</span>
-                </button>
+                        <i class="material-icons">add</i>
+                        <span>New Data View</span>
+                    </button>
+                </div>
             </div>
         </div>
-    </div>
-    <div *ngIf="!editLabels" fxFlex="100" fxLayout="row wrap" fxLayoutAlign="start stretch" class="m-20">
-        <div fxFlex="100" class="assemblyOptions sp-blue-bg p-5">
-            <div fxLayout="row" fxLayoutAlign="start center" fxFlex="100">
-                <h4>My Data Views</h4>
-                <span fxFlex></span>
+        <div fxFlex="100" fxLayout="row wrap" fxLayoutAlign="start stretch" class="m-20">
+            <div fxFlex="100" class="assemblyOptions sp-blue-bg p-5">
+                <div fxLayout="row" fxLayoutAlign="start center" fxFlex="100">
+                    <h4>My Data Views</h4>
+                    <span fxFlex></span>
+                </div>
             </div>
-        </div>
-        <div fxFlex="100" fxLayout="column" fxLayoutAlign="start start" class="sp-blue-border">
-            <div fxFlex="100" fxLayout="column" class="w-100 p-2">
-                <table mat-table [dataSource]="dataSource" multiTemplateDataRows>
+            <div fxFlex="100" fxLayout="column" fxLayoutAlign="start start" class="sp-blue-border">
+                <div fxFlex="100" fxLayout="column" class="w-100 p-2">
+                    <table mat-table [dataSource]="dataSource" multiTemplateDataRows>
 
-                    <ng-container matColumnDef="name">
-                        <th fxFlex="60" fxLayoutAlign="start center" mat-header-cell *matHeaderCellDef> Data View</th>
-                        <td fxFlex="60" fxLayoutAlign="start center" mat-cell *matCellDef="let element">
-                            {{element.name}}<br/>
-                            {{element.description}}
-                        </td>
-                    </ng-container>
+                        <ng-container matColumnDef="name">
+                            <th fxFlex="60" fxLayoutAlign="start center" mat-header-cell *matHeaderCellDef> Data View
+                            </th>
+                            <td fxFlex="60" fxLayoutAlign="start center" mat-cell *matCellDef="let element">
+                                {{element.name}}<br />
+                                {{element.description}}
+                            </td>
+                        </ng-container>
 
-                    <ng-container matColumnDef="actions">
-                        <th fxFlex="40" fxLayoutAlign="center center" mat-header-cell *matHeaderCellDef> Actions</th>
-                        <td fxFlex="40" fxLayoutAlign="start center" mat-cell *matCellDef="let element">
-                            <div fxLayout="row" fxFlex="100">
-                                <span fxFlex fxFlexOrder="1" fxLayout="row" fxLayoutAlign="center center">
-                                <button mat-button mat-icon-button color="accent"
-                                        (click)="showDashboard(element, false)">
-                                    <i class="material-icons">visibility</i>
-                                </button>
-                                </span>
-                                <span fxFlex fxFlexOrder="2" fxLayout="row" fxLayoutAlign="center center" *ngIf="hasDataExplorerWritePrivileges">
-                                <button mat-button mat-icon-button color="accent"
-                                        [attr.data-cy]="'edit-dashboard-' + element.name"
-                                        (click)="showDashboard(element, true)">
-                                    <i class="material-icons">edit</i>
-                                </button>
-                                </span>
-                                <span fxFlex fxFlexOrder="3" fxLayout="row" fxLayoutAlign="center center" *ngIf="isAdmin">
-                                <button mat-button mat-icon-button color="accent"
-                                        (click)="showPermissionsDialog(element)">
-                                    <i class="material-icons">share</i>
-                                </button>
-                                </span>
-                                <span fxFlex fxFlexOrder="4" fxLayout="row" fxLayoutAlign="center center" *ngIf="hasDataExplorerDeletePrivileges">
-                                <button mat-button mat-icon-button color="accent"
-                                        [attr.data-cy]="'delete-dashboard-' + element.name"
-                                        (click)="openDeleteDashboardDialog(element)">
-                                    <i class="material-icons">delete</i>
-                                </button>
-                                </span>
-                            </div>
-                        </td>
-                    </ng-container>
+                        <ng-container matColumnDef="actions">
+                            <th fxFlex="40" fxLayoutAlign="center center" mat-header-cell *matHeaderCellDef> Actions
+                            </th>
+                            <td fxFlex="40" fxLayoutAlign="start center" mat-cell *matCellDef="let element">
+                                <div fxLayout="row" fxFlex="100">
+                                    <span fxFlex fxFlexOrder="1" fxLayout="row" fxLayoutAlign="center center">
+                                        <button mat-button mat-icon-button color="accent"
+                                            (click)="showDashboard(element, false)">
+                                            <i class="material-icons">visibility</i>
+                                        </button>
+                                    </span>
+                                    <span fxFlex fxFlexOrder="2" fxLayout="row" fxLayoutAlign="center center"
+                                        *ngIf="hasDataExplorerWritePrivileges">
+                                        <button mat-button mat-icon-button color="accent"
+                                            [attr.data-cy]="'edit-dashboard-' + element.name"
+                                            (click)="showDashboard(element, true)">
+                                            <i class="material-icons">edit</i>
+                                        </button>
+                                    </span>
+                                    <span fxFlex fxFlexOrder="3" fxLayout="row" fxLayoutAlign="center center"
+                                        *ngIf="isAdmin">
+                                        <button mat-button mat-icon-button color="accent"
+                                            (click)="showPermissionsDialog(element)">
+                                            <i class="material-icons">share</i>
+                                        </button>
+                                    </span>
+                                    <span fxFlex fxFlexOrder="4" fxLayout="row" fxLayoutAlign="center center"
+                                        *ngIf="hasDataExplorerDeletePrivileges">
+                                        <button mat-button mat-icon-button color="accent"
+                                            [attr.data-cy]="'delete-dashboard-' + element.name"
+                                            (click)="openDeleteDashboardDialog(element)">
+                                            <i class="material-icons">delete</i>
+                                        </button>
+                                    </span>
+                                </div>
+                            </td>
+                        </ng-container>
 
-                    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
-                    <tr mat-row *matRowDef="let element; columns: displayedColumns;">
-                    </tr>
-                </table>
+                        <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
+                        <tr mat-row *matRowDef="let element; columns: displayedColumns;">
+                        </tr>
+                    </table>
+                </div>
             </div>
         </div>
-    </div>
 
-    <sp-configure-labels *ngIf="editLabels"></sp-configure-labels>
-</div>
+    </div>
+</sp-data-explorer>
\ No newline at end of file
diff --git a/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts b/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts
index d35d4ad59..fe521b035 100644
--- a/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts
+++ b/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts
@@ -26,6 +26,7 @@ import { ObjectPermissionDialogComponent } from '../../../core-ui/object-permiss
 import { UserRole } from '../../../_enums/user-role.enum';
 import { AuthService } from '../../../services/auth.service';
 import { UserPrivilege } from '../../../_enums/user-privilege.enum';
+import { Router } from '@angular/router';
 
 @Component({
   selector: 'sp-data-explorer-dashboard-overview',
@@ -34,22 +35,25 @@ import { UserPrivilege } from '../../../_enums/user-privilege.enum';
 })
 export class DataExplorerDashboardOverviewComponent implements OnInit {
 
-  @Input() dataViewDashboards: Dashboard[];
+  dataViewDashboards: Dashboard[] = [];
+  dashboardsLoaded = false;
+
   @Output() reloadDashboardsEmitter = new EventEmitter<void>();
   @Output() selectDashboardEmitter = new EventEmitter<Tuple2<Dashboard, boolean>>();
 
   dataSource = new MatTableDataSource<Dashboard>();
   displayedColumns: string[] = [];
 
-  editLabels: boolean;
   isAdmin = false;
 
   hasDataExplorerWritePrivileges = false;
   hasDataExplorerDeletePrivileges = false;
 
-  constructor(private dashboardService: DataViewDataExplorerService,
+  constructor(private dataViewService: DataViewDataExplorerService,
+              private dashboardService: DataViewDataExplorerService,
               public dialogService: DialogService,
-              private authService: AuthService) {
+              private authService: AuthService,
+              private router: Router) {
 
   }
 
@@ -61,8 +65,7 @@ export class DataExplorerDashboardOverviewComponent implements OnInit {
       this.displayedColumns = ['name', 'actions'];
 
     });
-    this.dataSource.data = this.dataViewDashboards;
-    this.editLabels = false;
+    this.getDashboards();
   }
 
   openNewDataViewDialog() {
@@ -71,11 +74,7 @@ export class DataExplorerDashboardOverviewComponent implements OnInit {
 
     this.openDataViewModificationDialog(true, dataViewDashboard);
   }
-
-  openEditLabelView() {
-    this.editLabels = true;
-  }
-
+  
   openDataViewModificationDialog(createMode: boolean, dashboard: Dashboard) {
     const dialogRef = this.dialogService.open(DataExplorerEditDataViewDialogComponent, {
       panelType: PanelType.STANDARD_PANEL,
@@ -123,7 +122,20 @@ export class DataExplorerDashboardOverviewComponent implements OnInit {
   }
 
   showDashboard(dashboard: Dashboard, editMode: boolean) {
-    const dashboardSettings: Tuple2<Dashboard, boolean> = { a: dashboard, b: editMode };
-    this.selectDashboardEmitter.emit(dashboardSettings);
+    // const dashboardSettings: Tuple2<Dashboard, boolean> = { a: dashboard, b: editMode };
+    // this.selectDashboardEmitter.emit(dashboardSettings);
+    this.router.navigate(['dataexplorer/', dashboard._id]);
+    
   }
+  
+  getDashboards() {
+    this.dashboardsLoaded = false;
+    this.dataViewService.getDataViews().subscribe(data => {
+      this.dataViewDashboards = data.sort((a, b) => a.name.localeCompare(b.name));
+      this.dashboardsLoaded = true;
+      this.dataSource.data = this.dataViewDashboards;
+    });
+  }
+
+
 }
diff --git a/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.html b/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.html
index b2c976f08..419cea087 100644
--- a/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.html
+++ b/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.html
@@ -16,74 +16,52 @@
   ~
   -->
 
-<div class="fixed-height data-explorer-options sp-tab-bg page-container-nav" fxLayout="row" *ngIf="(editMode || timeRangeVisible)">
-    <div class="data-explorer-options-item pl-10" fxLayoutAlign="start center" fxLayout="row" *ngIf="editMode">
-        <button mat-button
-                mat-raised-button
-                color="accent"
-                matTooltip="Save"
-                class="edit-menu-btn"
-                [matTooltipPosition]="'above'"
-                (click)="persistDashboardChanges()"
+<sp-data-explorer [activeLink]="'dashboardview'">
+    <div class="fixed-height data-explorer-options sp-tab-bg page-container-nav" fxLayout="row"
+        *ngIf="(editMode || timeRangeVisible)">
+        <div class="data-explorer-options-item pl-10" fxLayoutAlign="start center" fxLayout="row" *ngIf="editMode">
+            <button mat-button mat-raised-button color="accent" matTooltip="Save" class="edit-menu-btn"
+                [matTooltipPosition]="'above'" (click)="persistDashboardChanges()"
                 data-cy="save-data-explorer-widget-btn">
-            <mat-icon>save</mat-icon>&nbsp;<span>Save</span>
-        </button>
-        <button mat-button
-                mat-raised-button
-                class="mat-basic mr-10 edit-menu-btn"
-                (click)="discardChanges()">
-            <i class="material-icons">clear</i>
-            <span> Discard</span>
-        </button>
-        <button mat-button
-                mat-raised-button
-                color="accent"
-                class="edit-menu-btn"
-                (click)="createWidget()"
-                [disabled]="!editMode"
-                data-cy="add-new-widget">
-            <i class="material-icons">add</i>
-            <span> Add Widget</span>
-        </button>
+                <mat-icon>save</mat-icon>&nbsp;<span>Save</span>
+            </button>
+            <button mat-button mat-raised-button class="mat-basic mr-10 edit-menu-btn" (click)="discardChanges()">
+                <i class="material-icons">clear</i>
+                <span> Discard</span>
+            </button>
+            <button mat-button mat-raised-button color="accent" class="edit-menu-btn" (click)="createWidget()"
+                [disabled]="!editMode" data-cy="add-new-widget">
+                <i class="material-icons">add</i>
+                <span> Add Widget</span>
+            </button>
+        </div>
+        <div class="data-explorer-options-item" fxLayoutAlign="end center" fxFlex fxLayout="row">
+            <sp-time-range-selector (dateRangeEmitter)="updateDateRange($event)" [dateRange]="timeSettings">
+            </sp-time-range-selector>
+        </div>
     </div>
-    <div class="data-explorer-options-item" fxLayoutAlign="end center" fxFlex fxLayout="row">
-        <sp-time-range-selector (dateRangeEmitter)="updateDateRange($event)" [dateRange]="timeSettings">
-        </sp-time-range-selector>
-    </div>
-</div>
 
-<div fxFlex="100" fxLayout="column">
-    <mat-drawer-container class="designer-panel-container h-100 dashboard-grid">
-        <mat-drawer #designerDrawer
-                    [opened]="showDesignerPanel"
-                    (opened)="triggerResize()"
-                    (closed)="triggerResize()"
-                    mode="side"
-                    position="end"
-                    class="designer-panel">
-            <div fxLayout="column" fxFlex="100">
-                <sp-data-explorer-designer-panel #designerPanel
-                                                 [currentlyConfiguredWidget]="currentlyConfiguredWidget"
-                                                 [dataLakeMeasure]="dataLakeMeasure"
-                                                 [newWidgetMode]="newWidgetMode"
-                                                 (addWidgetEmitter)="addWidget($event)"
-                                                 (closeDesignerPanelEmitter)="closeDesignerPanel()"
-                                                 fxFlex="100">
-                </sp-data-explorer-designer-panel>
-            </div>
-        </mat-drawer>
-        <mat-drawer-content class="h-100 dashboard-grid">
-            <sp-data-explorer-dashboard-grid
-                #dashboardGrid
-                [editMode]="editMode"
-                [dashboard]="dashboard"
-                [timeSettings]="timeSettings"
-                [currentlyConfiguredWidgetId]="currentlyConfiguredWidgetId"
-                (configureWidgetCallback)="updateCurrentlyConfiguredWidget($event)"
-                (updateCallback)="updateAndQueueItemForDeletion($event)"
-                (deleteCallback)="removeAndQueueItemForDeletion($event)"
-                (startEditModeEmitter)="startEditMode($event)"
-                class="h-100 dashboard-grid"></sp-data-explorer-dashboard-grid>
-        </mat-drawer-content>
-    </mat-drawer-container>
-</div>
+    <div fxFlex="100" fxLayout="column" *ngIf="dashboard">
+        <mat-drawer-container class="designer-panel-container h-100 dashboard-grid">
+            <mat-drawer #designerDrawer [opened]="showDesignerPanel" (opened)="triggerResize()"
+                (closed)="triggerResize()" mode="side" position="end" class="designer-panel">
+                <div fxLayout="column" fxFlex="100">
+                    <sp-data-explorer-designer-panel #designerPanel
+                        [currentlyConfiguredWidget]="currentlyConfiguredWidget" [dataLakeMeasure]="dataLakeMeasure"
+                        [newWidgetMode]="newWidgetMode" (addWidgetEmitter)="addWidget($event)"
+                        (closeDesignerPanelEmitter)="closeDesignerPanel()" fxFlex="100">
+                    </sp-data-explorer-designer-panel>
+                </div>
+            </mat-drawer>
+            <mat-drawer-content class="h-100 dashboard-grid">
+                <sp-data-explorer-dashboard-grid #dashboardGrid [editMode]="editMode" [dashboard]="dashboard"
+                    [timeSettings]="timeSettings" [currentlyConfiguredWidgetId]="currentlyConfiguredWidgetId"
+                    (configureWidgetCallback)="updateCurrentlyConfiguredWidget($event)"
+                    (updateCallback)="updateAndQueueItemForDeletion($event)"
+                    (deleteCallback)="removeAndQueueItemForDeletion($event)"
+                    (startEditModeEmitter)="startEditMode($event)" class="h-100 dashboard-grid">
+                </sp-data-explorer-dashboard-grid>
+            </mat-drawer-content>
+        </mat-drawer-container>
+    </div>
+</sp-data-explorer>
\ No newline at end of file
diff --git a/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts b/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts
index 3e214d963..b3ab4231b 100644
--- a/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts
+++ b/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts
@@ -33,6 +33,7 @@ import {
 } from '@streampipes/platform-services';
 import { DataExplorerDesignerPanelComponent } from '../designer-panel/data-explorer-designer-panel.component';
 import { TimeSelectionService } from '../../services/time-selection.service';
+import { ActivatedRoute } from '@angular/router';
 
 @Component({
   selector: 'sp-data-explorer-dashboard-panel',
@@ -41,7 +42,7 @@ import { TimeSelectionService } from '../../services/time-selection.service';
 })
 export class DataExplorerDashboardPanelComponent implements OnInit {
 
-  @Input() dashboard: Dashboard;
+  dashboard: Dashboard;
 
   /**
    * This is the date range (start, end) to view the data and is set in data-explorer.ts
@@ -72,8 +73,13 @@ export class DataExplorerDashboardPanelComponent implements OnInit {
 
   constructor(private dataViewDataExplorerService: DataViewDataExplorerService,
               public dialog: MatDialog,
-              private refreshDashboardService: RefreshDashboardService,
-              private timeSelectionService: TimeSelectionService) {
+              private timeSelectionService: TimeSelectionService,
+              private route: ActivatedRoute,
+              private dataViewService: DataViewDataExplorerService) {
+
+              this.route.params.subscribe( (params) => {
+                this.getDashboard(params.id);
+              });
   }
 
   public ngOnInit() {
@@ -208,4 +214,10 @@ export class DataExplorerDashboardPanelComponent implements OnInit {
     this.dataLakeMeasure = undefined;
     this.currentlyConfiguredWidgetId = undefined;
   }
+
+  getDashboard(dashboardId: string) {
+    this.dataViewService.getDataViews().subscribe(data => {
+      this.dashboard = data.filter(dashboard => dashboard._id === dashboardId)[0];
+    });
+  }
 }
diff --git a/ui/src/app/data-explorer/data-explorer.component.html b/ui/src/app/data-explorer/data-explorer.component.html
index b4f8b0f11..d9c88ef08 100644
--- a/ui/src/app/data-explorer/data-explorer.component.html
+++ b/ui/src/app/data-explorer/data-explorer.component.html
@@ -66,7 +66,9 @@
 
 
     <div fxLayout="column" fxFlex="100" *ngIf="dashboardsLoaded">
-        <sp-data-explorer-dashboard-overview (selectDashboardEmitter)="openDashboard($event)"
+
+        <ng-content fxFlex="100"></ng-content>
+        <!-- <sp-data-explorer-dashboard-overview (selectDashboardEmitter)="openDashboard($event)"
                                              (reloadDashboardsEmitter)="getDashboards()"
                                              [dataViewDashboards]="dataViewDashboards"
                                              *ngIf="!dashboardTabSelected">
@@ -81,6 +83,6 @@
                                           [timeRangeVisible]="timeRangeVisible"
                                           class="dashboard-panel"
                                           *ngIf="dashboardTabSelected">
-        </sp-data-explorer-dashboard-panel>
+        </sp-data-explorer-dashboard-panel> -->
     </div>
 </div>
diff --git a/ui/src/app/data-explorer/data-explorer.component.ts b/ui/src/app/data-explorer/data-explorer.component.ts
index 214e3dbd1..e32414f14 100644
--- a/ui/src/app/data-explorer/data-explorer.component.ts
+++ b/ui/src/app/data-explorer/data-explorer.component.ts
@@ -16,7 +16,7 @@
  *
  */
 
-import { Component, OnInit, ViewChild } from '@angular/core';
+import { Component, Input, OnInit, ViewChild } from '@angular/core';
 import { DataViewDataExplorerService, Dashboard } from '@streampipes/platform-services';
 import { RefreshDashboardService } from './services/refresh-dashboard.service';
 import { DataExplorerDashboardPanelComponent } from './components/panel/data-explorer-dashboard-panel.component';
@@ -32,17 +32,24 @@ import { UserPrivilege } from '../_enums/user-privilege.enum';
 })
 export class DataExplorerComponent implements OnInit {
 
+  @Input()
+  activeLink: string;
+
+  @Input()
+  dataViewDashboards: Dashboard[];
+
+  @Input()
+  dashboardsLoaded: boolean;
+
   selectedDataViewDashboard: Dashboard;
   selectedIndex = 0;
-  dashboardsLoaded = false;
   dashboardTabSelected = false;
 
   timeRangeVisible = true;
 
   editMode = true;
-  dataViewDashboards: Dashboard[];
 
-  routeParams: any;
+ routeParams: any;
 
   hasDataExplorerWritePrivileges = false;
   hasDataExplorerDeletePrivileges = false;
diff --git a/ui/src/app/data-explorer/data-explorer.module.ts b/ui/src/app/data-explorer/data-explorer.module.ts
index 79819b3e0..63e44fc71 100644
--- a/ui/src/app/data-explorer/data-explorer.module.ts
+++ b/ui/src/app/data-explorer/data-explorer.module.ts
@@ -100,6 +100,7 @@ import { TimeSelectionService } from './services/time-selection.service';
 import { NgxEchartsModule } from 'ngx-echarts';
 import { TooMuchDataComponent } from './components/widgets/utils/too-much-data/too-much-data.component';
 import { SpValueHeatmapComponent } from './components/widgets/distribution-chart/value-heatmap/value-heatmap.component';
+import { RouterModule } from "@angular/router";
 
 export const MY_NATIVE_FORMATS = {
   fullPickerInput: {
@@ -117,7 +118,7 @@ export const MY_NATIVE_FORMATS = {
   monthYearA11yLabel: {year: 'numeric', month: 'long', hour12: false}
 };
 
-
+  // 
 @NgModule({
   imports: [
     CommonModule,
@@ -153,6 +154,32 @@ export const MY_NATIVE_FORMATS = {
        */
       echarts: () => import('echarts'),
     }),
+    RouterModule.forChild([
+      {
+        path: 'dataexplorer',
+        children: [
+          {
+            path: '',
+            redirectTo: 'all',
+            pathMatch: 'full'
+          },
+          {
+            path: 'all',
+            component: DataExplorerDashboardOverviewComponent
+          },
+          {
+            path: ':id',
+            component: DataExplorerDashboardPanelComponent
+          },
+          {
+            path: ':id/edit',
+            component: DataExplorerDashboardPanelComponent
+          }
+
+                ]
+      }
+    ]),
+
   ],
   declarations: [
     AggregateConfigurationComponent,