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

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

commit 31cefac0f45b8e57423c924ae8517bf67f54a184
Author: Dominik Riemer <[email protected]>
AuthorDate: Fri May 21 23:10:25 2021 +0200

    [STREAMPIPES-370] Improve modification of existing dashboard widgets
---
 .../streampipes/model/dashboard/DashboardItem.java |  16 +--
 .../model/dashboard/DashboardWidgetModel.java      |   8 ++
 ui/src/app/core-model/gen/streampipes-model.ts     |  10 +-
 .../components/grid/dashboard-grid.component.ts    |   2 -
 .../widget/dashboard-widget.component.html         |  30 ++--
 .../widget/dashboard-widget.component.ts           | 156 +++++++++++----------
 ui/src/app/dashboard/dashboard.component.ts        |   9 +-
 ui/src/app/dashboard/dashboard.module.ts           |   2 +
 .../add-visualization-dialog.component.ts          |  20 ++-
 ui/src/app/dashboard/services/edit-mode.service.ts |  31 ++++
 10 files changed, 173 insertions(+), 111 deletions(-)

diff --git 
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
 
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
index f33485e..aab3ce2 100644
--- 
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
+++ 
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
@@ -24,7 +24,7 @@ public class DashboardItem {
   private String id;
   private String name;
   private String component;
-  private String widgetType;
+  //private String widgetType;
 
   private List<String> settings;
 
@@ -61,13 +61,13 @@ public class DashboardItem {
     this.component = component;
   }
 
-  public String getWidgetType() {
-    return widgetType;
-  }
-
-  public void setWidgetType(String widgetType) {
-    this.widgetType = widgetType;
-  }
+//  public String getWidgetType() {
+//    return widgetType;
+//  }
+//
+//  public void setWidgetType(String widgetType) {
+//    this.widgetType = widgetType;
+//  }
 
   public List<String> getSettings() {
     return settings;
diff --git 
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
 
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
index c529cff..7f7e732 100644
--- 
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
+++ 
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
@@ -67,4 +67,12 @@ public class DashboardWidgetModel extends DashboardEntity {
   public void setVisualizationName(String visualizationName) {
     this.visualizationName = visualizationName;
   }
+
+  public String getWidgetType() {
+    return widgetType;
+  }
+
+  public void setWidgetType(String widgetType) {
+    this.widgetType = widgetType;
+  }
 }
diff --git a/ui/src/app/core-model/gen/streampipes-model.ts 
b/ui/src/app/core-model/gen/streampipes-model.ts
index 4a7a270..b20443d 100644
--- a/ui/src/app/core-model/gen/streampipes-model.ts
+++ b/ui/src/app/core-model/gen/streampipes-model.ts
@@ -19,7 +19,7 @@
 /* tslint:disable */
 /* eslint-disable */
 // @ts-nocheck
-// Generated using typescript-generator version 2.27.744 on 2021-05-21 
11:31:40.
+// Generated using typescript-generator version 2.27.744 on 2021-05-21 
21:59:41.
 
 export class AbstractStreamPipesEntity {
     "@class": "org.apache.streampipes.model.base.AbstractStreamPipesEntity" | 
"org.apache.streampipes.model.base.NamedStreamPipesEntity" | 
"org.apache.streampipes.model.connect.adapter.AdapterDescription" | 
"org.apache.streampipes.model.connect.adapter.AdapterSetDescription" | 
"org.apache.streampipes.model.connect.adapter.GenericAdapterSetDescription" | 
"org.apache.streampipes.model.connect.adapter.SpecificAdapterSetDescription" | 
"org.apache.streampipes.model.connect.adapter.AdapterStre [...]
@@ -189,8 +189,8 @@ export class AdapterDescription extends 
NamedStreamPipesEntity {
         instance.rules = 
__getCopyArrayFn(TransformationRuleDescription.fromDataUnion)(data.rules);
         instance.category = 
__getCopyArrayFn(__identity<string>())(data.category);
         instance.createdAt = data.createdAt;
-        instance.streamRules = 
__getCopyArrayFn(__identity<any>())(data.streamRules);
         instance.valueRules = 
__getCopyArrayFn(__identity<any>())(data.valueRules);
+        instance.streamRules = 
__getCopyArrayFn(__identity<any>())(data.streamRules);
         instance.schemaRules = 
__getCopyArrayFn(__identity<any>())(data.schemaRules);
         instance.couchDBId = data.couchDBId;
         instance._rev = data._rev;
@@ -826,7 +826,6 @@ export class DashboardItem {
     name: string;
     rows: number;
     settings: string[];
-    widgetType: string;
     x: number;
     y: number;
 
@@ -838,7 +837,6 @@ export class DashboardItem {
         instance.id = data.id;
         instance.name = data.name;
         instance.component = data.component;
-        instance.widgetType = data.widgetType;
         instance.settings = 
__getCopyArrayFn(__identity<string>())(data.settings);
         instance.cols = data.cols;
         instance.rows = data.rows;
@@ -879,6 +877,7 @@ export class DashboardWidgetModel extends DashboardEntity {
     pipelineId: string;
     visualizationName: string;
     widgetId: string;
+    widgetType: string;
 
     static fromData(data: DashboardWidgetModel, target?: 
DashboardWidgetModel): DashboardWidgetModel {
         if (!data) {
@@ -887,6 +886,7 @@ export class DashboardWidgetModel extends DashboardEntity {
         const instance = target || new DashboardWidgetModel();
         super.fromData(data, instance);
         instance.widgetId = data.widgetId;
+        instance.widgetType = data.widgetType;
         instance.dashboardWidgetSettings = 
DashboardWidgetSettings.fromData(data.dashboardWidgetSettings);
         instance.pipelineId = data.pipelineId;
         instance.visualizationName = data.visualizationName;
@@ -2672,8 +2672,8 @@ export class SpDataSet extends SpDataStream {
         instance.supportedGrounding = 
EventGrounding.fromData(data.supportedGrounding);
         instance.datasetInvocationId = data.datasetInvocationId;
         instance.correspondingPipeline = data.correspondingPipeline;
-        instance.brokerHostname = data.brokerHostname;
         instance.actualTopicName = data.actualTopicName;
+        instance.brokerHostname = data.brokerHostname;
         return instance;
     }
 }
diff --git a/ui/src/app/dashboard/components/grid/dashboard-grid.component.ts 
b/ui/src/app/dashboard/components/grid/dashboard-grid.component.ts
index 5ea24da..9c0a34a 100644
--- a/ui/src/app/dashboard/components/grid/dashboard-grid.component.ts
+++ b/ui/src/app/dashboard/components/grid/dashboard-grid.component.ts
@@ -88,8 +88,6 @@ export class DashboardGridComponent implements OnInit, 
OnChanges {
             this.options.resizable.enabled = this.editMode;
             this.options.displayGrid = this.editMode ? 'always' : 'none';
             this.options.api.optionsChanged();
-            console.log(this.options);
-            console.log(this.editMode);
         }
     }
 
diff --git 
a/ui/src/app/dashboard/components/widget/dashboard-widget.component.html 
b/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
index 1aabc78..7dc7184 100644
--- a/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
+++ b/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
@@ -48,88 +48,88 @@
                 </button>
             </div>
             <div *ngIf="widgetLoaded && pipelineRunning" class="h-100">
-                <div *ngIf="widget.widgetType === 'number'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'number'" 
class="h-100 p-0">
                     <number-widget 
[gridsterItemComponent]="gridsterItemComponent" [gridsterItem]="item"
                                    [widget]="widget" [editMode]="editMode"
                                    [widgetConfig]="configuredWidget" 
[widgetDataConfig]="widgetDataConfig" class="h-100"></number-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'line'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'line'" 
class="h-100 p-0">
                     <line-widget 
[gridsterItemComponent]="gridsterItemComponent" [editMode]="editMode"
                                  [gridsterItem]="item" [widget]="widget" 
[widgetConfig]="configuredWidget"
                                  [widgetDataConfig]="widgetDataConfig" 
class="h-100"></line-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'area'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'area'" 
class="h-100 p-0">
                     <area-widget 
[gridsterItemComponent]="gridsterItemComponent" [editMode]="editMode"
                                  [gridsterItem]="item" [widget]="widget" 
[widgetConfig]="configuredWidget"
                                  [widgetDataConfig]="widgetDataConfig" 
class="h-100"></area-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'table'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'table'" 
class="h-100 p-0">
                     <table-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                   [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                   [widgetConfig]="configuredWidget"
                                   [widgetDataConfig]="widgetDataConfig" 
class="h-100"></table-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'gauge'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'gauge'" 
class="h-100 p-0">
                     <gauge-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                   [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                   [widgetConfig]="configuredWidget"
                                   [widgetDataConfig]="widgetDataConfig" 
class="h-100"></gauge-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'image'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'image'" 
class="h-100 p-0">
                     <image-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                   [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                   [widgetConfig]="configuredWidget"
                                   [widgetDataConfig]="widgetDataConfig" 
class="h-100"></image-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'map'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'map'" 
class="h-100 p-0">
                     <map-widget [gridsterItemComponent]="gridsterItemComponent"
                                   [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                   [widgetConfig]="configuredWidget"
                                   [widgetDataConfig]="widgetDataConfig" 
class="h-100"></map-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'raw'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'raw'" 
class="h-100 p-0">
                     <raw-widget [gridsterItemComponent]="gridsterItemComponent"
                                 [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                 [widgetConfig]="configuredWidget"
                                 [widgetDataConfig]="widgetDataConfig" 
class="h-100"></raw-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'html'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'html'" 
class="h-100 p-0">
                     <html-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                 [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                 [widgetConfig]="configuredWidget"
                                 [widgetDataConfig]="widgetDataConfig" 
class="h-100"></html-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'trafficlight'" class="h-100 
p-0">
+                <div *ngIf="configuredWidget.widgetType === 'trafficlight'" 
class="h-100 p-0">
                     <traffic-light-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                  [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                  [widgetConfig]="configuredWidget"
                                  [widgetDataConfig]="widgetDataConfig" 
class="h-100"></traffic-light-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'pallet'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'pallet'" 
class="h-100 p-0">
                     <sp-pallet [gridsterItemComponent]="gridsterItemComponent"
                                  [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                  [widgetConfig]="configuredWidget"
                                  [widgetDataConfig]="widgetDataConfig" 
class="h-100"></sp-pallet>
                 </div>
-                <div *ngIf="widget.widgetType === 'wordcloud'" class="h-100 
p-0">
+                <div *ngIf="configuredWidget.widgetType === 'wordcloud'" 
class="h-100 p-0">
                     <wordcloud-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                 [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                 [widgetConfig]="configuredWidget"
                                 [widgetDataConfig]="widgetDataConfig" 
class="h-100"></wordcloud-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'status'" class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 'status'" 
class="h-100 p-0">
                     <status-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                       [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                       [widgetConfig]="configuredWidget"
                                       [widgetDataConfig]="widgetDataConfig" 
class="h-100"></status-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'bar-race'" class="h-100 
p-0">
+                <div *ngIf="configuredWidget.widgetType === 'bar-race'" 
class="h-100 p-0">
                     <bar-race-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                    [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                    [widgetConfig]="configuredWidget"
                                    [widgetDataConfig]="widgetDataConfig" 
class="h-100"></bar-race-widget>
                 </div>
-                <div *ngIf="widget.widgetType === 'stacked-line-chart'" 
class="h-100 p-0">
+                <div *ngIf="configuredWidget.widgetType === 
'stacked-line-chart'" class="h-100 p-0">
                     <stacked-line-chart-widget 
[gridsterItemComponent]="gridsterItemComponent"
                                      [gridsterItem]="item" [widget]="widget" 
[editMode]="editMode"
                                      [widgetConfig]="configuredWidget"
diff --git 
a/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts 
b/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
index 8149020..e005f22 100644
--- a/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
+++ b/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
@@ -22,99 +22,107 @@ import {DashboardService} from 
"../../services/dashboard.service";
 import {GridsterItem, GridsterItemComponent} from "angular-gridster2";
 import {AddVisualizationDialogComponent} from 
"../../dialogs/add-widget/add-visualization-dialog.component";
 import {
-    DashboardWidgetModel, Pipeline,
-    VisualizablePipeline
+  DashboardWidgetModel, Pipeline,
+  VisualizablePipeline
 } from "../../../core-model/gen/streampipes-model";
 import {PanelType} from 
"../../../core-ui/dialog/base-dialog/base-dialog.model";
 import {DialogService} from 
"../../../core-ui/dialog/base-dialog/base-dialog.service";
 import {PipelineService} from 
"../../../platform-services/apis/pipeline.service";
+import {EditModeService} from "../../services/edit-mode.service";
 
 @Component({
-    selector: 'dashboard-widget',
-    templateUrl: './dashboard-widget.component.html',
-    styleUrls: ['./dashboard-widget.component.css']
+  selector: 'dashboard-widget',
+  templateUrl: './dashboard-widget.component.html',
+  styleUrls: ['./dashboard-widget.component.css']
 })
 export class DashboardWidgetComponent implements OnInit {
 
-    @Input() widget: DashboardItem;
-    @Input() editMode: boolean;
-    @Input() headerVisible: boolean = false;
-    @Input() item: GridsterItem;
-    @Input() gridsterItemComponent: GridsterItemComponent;
+  @Input() widget: DashboardItem;
+  @Input() editMode: boolean;
+  @Input() headerVisible: boolean = false;
+  @Input() item: GridsterItem;
+  @Input() gridsterItemComponent: GridsterItemComponent;
 
-    @Output() deleteCallback: EventEmitter<DashboardItem> = new 
EventEmitter<DashboardItem>();
-    @Output() updateCallback: EventEmitter<DashboardWidgetModel> = new 
EventEmitter<DashboardWidgetModel>();
+  @Output() deleteCallback: EventEmitter<DashboardItem> = new 
EventEmitter<DashboardItem>();
+  @Output() updateCallback: EventEmitter<DashboardWidgetModel> = new 
EventEmitter<DashboardWidgetModel>();
 
-    widgetLoaded: boolean = false;
-    configuredWidget: DashboardWidgetModel;
-    widgetDataConfig: VisualizablePipeline;
-    pipeline: Pipeline;
+  widgetLoaded: boolean = false;
+  configuredWidget: DashboardWidgetModel;
+  widgetDataConfig: VisualizablePipeline;
+  pipeline: Pipeline;
 
-    pipelineRunning: boolean = false;
-    widgetNotAvailable: boolean = false;
+  pipelineRunning: boolean = false;
+  widgetNotAvailable: boolean = false;
 
-    constructor(private dashboardService: DashboardService,
-                private dialogService: DialogService,
-                private pipelineService: PipelineService) {
-    }
+  constructor(private dashboardService: DashboardService,
+              private dialogService: DialogService,
+              private pipelineService: PipelineService,
+              private editModeService: EditModeService) {
+  }
 
-    ngOnInit(): void {
-        this.loadWidget();
-    }
+  ngOnInit(): void {
+    this.loadWidget();
+  }
 
-    loadWidget() {
-        this.dashboardService.getWidget(this.widget.id).subscribe(response => {
-            this.configuredWidget = response;
-            
this.dashboardService.getVisualizablePipelineByPipelineIdAndVisualizationName(this.configuredWidget.pipelineId,
-                this.configuredWidget.visualizationName).subscribe(vizPipeline 
=> {
-                this.widgetDataConfig = vizPipeline;
-                
this.dashboardService.getPipelineById(vizPipeline.pipelineId).subscribe(pipeline
 => {
-                    this.pipeline = pipeline;
-                    this.pipelineRunning = pipeline.running;
-                    this.widgetNotAvailable = false;
-                    this.widgetLoaded = true;
-                });
-            }, err => {
-                this.widgetLoaded = true;
-                this.widgetNotAvailable = true;
-            });
-        });
-    }
+  loadWidget() {
+    this.dashboardService.getWidget(this.widget.id).subscribe(response => {
+      this.configuredWidget = response;
+      this.loadVisualizablePipeline();
+    });
+  }
 
-    removeWidget() {
-        this.deleteCallback.emit(this.widget);
-    }
+  loadVisualizablePipeline() {
+    
this.dashboardService.getVisualizablePipelineByPipelineIdAndVisualizationName(this.configuredWidget.pipelineId,
+        this.configuredWidget.visualizationName).subscribe(vizPipeline => {
+      this.widgetDataConfig = vizPipeline;
+      
this.dashboardService.getPipelineById(vizPipeline.pipelineId).subscribe(pipeline
 => {
+        this.pipeline = pipeline;
+        this.pipelineRunning = pipeline.running;
+        this.widgetNotAvailable = false;
+        this.widgetLoaded = true;
+      });
+    }, err => {
+      this.widgetLoaded = true;
+      this.widgetNotAvailable = true;
+    });
+  }
 
-    startPipeline() {
-        if (!this.pipelineRunning) {
-            this.pipelineService
-                .startPipeline(this.pipeline._id)
-                .subscribe(status => this.loadWidget());
-        }
-    }
+  removeWidget() {
+    this.deleteCallback.emit(this.widget);
+  }
 
-    modifyWidget() {
-        this.editMode = true;
-        this.editWidget();
+  startPipeline() {
+    if (!this.pipelineRunning) {
+      this.pipelineService
+          .startPipeline(this.pipeline._id)
+          .subscribe(status => this.loadWidget());
     }
+  }
 
-    editWidget(): void {
-        const dialogRef = 
this.dialogService.open(AddVisualizationDialogComponent,{
-            panelType: PanelType.SLIDE_IN_PANEL,
-            title: "Edit widget",
-            width: "50vw",
-            data: {
-                "widget": this.configuredWidget,
-                "pipeline": this.widgetDataConfig,
-                "editMode": true
-            }
-        });
+  modifyWidget() {
+    this.editModeService.notify(true);
+    this.editWidget();
+  }
 
-        dialogRef.afterClosed().subscribe(widget => {
-            if (widget) {
-                this.configuredWidget = widget;
-                this.updateCallback.emit(this.configuredWidget);
-            }
-        });
-    }
+  editWidget(): void {
+    const dialogRef = this.dialogService.open(AddVisualizationDialogComponent, 
{
+      panelType: PanelType.SLIDE_IN_PANEL,
+      title: "Edit widget",
+      width: "50vw",
+      data: {
+        "widget": this.configuredWidget,
+        "pipeline": this.widgetDataConfig,
+        "editMode": true,
+        "startPage": this.widgetNotAvailable ? "select-pipeline" : 
"configure-widget"
+      }
+    });
+
+    dialogRef.afterClosed().subscribe(widget => {
+      if (widget) {
+        this.configuredWidget = widget;
+        this.loadVisualizablePipeline();
+        this.updateCallback.emit(this.configuredWidget);
+      }
+    });
+  }
 }
diff --git a/ui/src/app/dashboard/dashboard.component.ts 
b/ui/src/app/dashboard/dashboard.component.ts
index 424d39a..041b6e6 100644
--- a/ui/src/app/dashboard/dashboard.component.ts
+++ b/ui/src/app/dashboard/dashboard.component.ts
@@ -21,6 +21,7 @@ import {Dashboard} from "./models/dashboard.model";
 import {DashboardService} from "./services/dashboard.service";
 import {RefreshDashboardService} from "./services/refresh-dashboard.service";
 import {Tuple2} from "../core-model/base/Tuple2";
+import {EditModeService} from "./services/edit-mode.service";
 
 @Component({
     selector: 'dashboard',
@@ -39,13 +40,17 @@ export class DashboardComponent implements OnInit {
     dashboards: Array<Dashboard>;
 
     constructor(private dashboardService: DashboardService,
-                private refreshDashboardService: RefreshDashboardService) {}
+                private refreshDashboardService: RefreshDashboardService,
+                private editModeService: EditModeService) {}
 
-    public ngOnInit() {
+    ngOnInit() {
         this.getDashboards();
         
this.refreshDashboardService.refreshSubject.subscribe(currentDashboardId => {
             this.getDashboards(currentDashboardId);
         });
+        this.editModeService.editModeSubject.subscribe(editMode => {
+            this.editMode = editMode;
+        })
 
     }
 
diff --git a/ui/src/app/dashboard/dashboard.module.ts 
b/ui/src/app/dashboard/dashboard.module.ts
index 9a31932..fcb638f 100644
--- a/ui/src/app/dashboard/dashboard.module.ts
+++ b/ui/src/app/dashboard/dashboard.module.ts
@@ -58,6 +58,7 @@ import {NgxEchartsModule} from "ngx-echarts";
 import {StatusWidgetComponent} from 
"./components/widgets/status/status-widget.component";
 import {BarRaceWidgetComponent} from 
"./components/widgets/bar-race/bar-race-widget.component";
 import {StackedLineChartWidgetComponent} from 
"./components/widgets/stacked-line-chart/stacked-line-chart-widget.component";
+import {EditModeService} from "./services/edit-mode.service";
 
 @NgModule({
     imports: [
@@ -108,6 +109,7 @@ import {StackedLineChartWidgetComponent} from 
"./components/widgets/stacked-line
     ],
     providers: [
         DashboardService,
+        EditModeService,
         ResizeService,
         RefreshDashboardService,
         SemanticTypeUtilsService,
diff --git 
a/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts 
b/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts
index 087625b..23b4241 100644
--- 
a/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts
+++ 
b/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts
@@ -83,6 +83,9 @@ export class AddVisualizationDialogComponent implements 
OnInit, AfterViewInit {
     @Input()
     editMode: boolean;
 
+    @Input()
+    startPage: string;
+
 
     constructor(
         private dialogRef: DialogRef<AddVisualizationDialogComponent>,
@@ -102,10 +105,11 @@ export class AddVisualizationDialogComponent implements 
OnInit, AfterViewInit {
             this.dialogTitle = 'Add widget';
             this.loadVisualizablePipelines();
         } else {
+            this.loadVisualizablePipelines();
             this.dialogTitle = 'Edit widget';
             this.selectedPipeline = this.pipeline;
             this.selectedWidget = this.widget.dashboardWidgetSettings;
-            this.page = 'configure-widget';
+            this.page = this.startPage;
         }
     }
 
@@ -181,12 +185,16 @@ export class AddVisualizationDialogComponent implements 
OnInit, AfterViewInit {
         return requiredSchema.eventProperties.find(ep => ep.runtimeName === 
internalName);
     }
 
+    loadAvailableWidgets() {
+        this.availableWidgets = 
WidgetRegistry.getCompatibleWidgetTemplates(this.selectedPipeline);
+        this.availableWidgets.sort((a, b) => {
+            return a.widgetLabel < b.widgetLabel ? -1 : 1;
+        });
+    }
+
     next() {
         if (this.page == 'select-pipeline') {
-            this.availableWidgets = 
WidgetRegistry.getCompatibleWidgetTemplates(this.selectedPipeline);
-            this.availableWidgets.sort((a, b) => {
-                return a.widgetLabel < b.widgetLabel ? -1 : 1;
-            });
+            this.loadAvailableWidgets();
             this.page = 'select-widget';
         } else if (this.page == 'select-widget') {
             this.page = 'configure-widget';
@@ -197,6 +205,7 @@ export class AddVisualizationDialogComponent implements 
OnInit, AfterViewInit {
             configuredWidget.dashboardWidgetSettings["@class"] = 
"org.apache.streampipes.model.dashboard.DashboardWidgetSettings";
             configuredWidget.visualizationName = 
this.selectedPipeline.visualizationName;
             configuredWidget.pipelineId = this.selectedPipeline.pipelineId;
+            configuredWidget.widgetType = 
configuredWidget.dashboardWidgetSettings.widgetName;
             if (!this.editMode) {
                 
this.dashboardService.saveWidget(configuredWidget).subscribe(response => {
                     this.dialogRef.close(response);
@@ -214,6 +223,7 @@ export class AddVisualizationDialogComponent implements 
OnInit, AfterViewInit {
         if (this.page == 'select-widget') {
             this.page = 'select-pipeline';
         } else if (this.page == 'configure-widget') {
+            this.loadAvailableWidgets();
             this.page = 'select-widget';
         }
     }
diff --git a/ui/src/app/dashboard/services/edit-mode.service.ts 
b/ui/src/app/dashboard/services/edit-mode.service.ts
new file mode 100644
index 0000000..b8de16e
--- /dev/null
+++ b/ui/src/app/dashboard/services/edit-mode.service.ts
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import {ReplaySubject} from "rxjs";
+import {Injectable} from "@angular/core";
+import {GridsterInfo} from "../models/gridster-info.model";
+
+@Injectable()
+export class EditModeService {
+
+  public editModeSubject: ReplaySubject<boolean> = new 
ReplaySubject<boolean>();
+
+  public notify(editMode: boolean): void {
+    this.editModeSubject.next(editMode);
+  }
+}

Reply via email to