This is an automated email from the ASF dual-hosted git repository. dominikriemer pushed a commit to branch load-summary-charts-in-dashboard in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 4ff4e9ffd0966fd904ebc158cfaeb36ec942ee71 Author: Dominik Riemer <[email protected]> AuthorDate: Sat Jun 13 09:30:33 2026 +0200 feat: Ease chart selection in dashboard --- .../model/datalake/ChartSummaryDto.java | 1 + .../DataExplorerWidgetResourceManager.java | 22 +++++++++++++++++++ .../lib/model/resource/resource-summary.model.ts | 1 + .../chart-preview/chart-preview.component.html | 25 +++++++++++----------- .../chart-preview/chart-preview.component.ts | 6 +++--- .../chart-selection/chart-selection.component.ts | 17 ++++++--------- 6 files changed, 45 insertions(+), 27 deletions(-) diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/ChartSummaryDto.java b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/ChartSummaryDto.java index eb6f6035a5..a4c0e98537 100644 --- a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/ChartSummaryDto.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/ChartSummaryDto.java @@ -20,6 +20,7 @@ package org.apache.streampipes.model.datalake; public record ChartSummaryDto(String elementId, String name, + String datasetName, Long createdAtEpochMs, Long lastModifiedEpochMs, String widgetType, diff --git a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerWidgetResourceManager.java b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerWidgetResourceManager.java index 7d6b841d1e..09fe152f01 100644 --- a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerWidgetResourceManager.java +++ b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerWidgetResourceManager.java @@ -26,6 +26,8 @@ import org.apache.streampipes.storage.api.explorer.IDataExplorerWidgetStorage; import org.springframework.security.core.Authentication; import java.util.Collection; +import java.util.List; +import java.util.Map; public class DataExplorerWidgetResourceManager extends CrudResourceManager<DataExplorerWidgetModel> { @@ -44,6 +46,7 @@ public class DataExplorerWidgetResourceManager extends CrudResourceManager<DataE .map(chart -> new ChartSummaryDto( chart.getElementId(), getChartName(chart), + getDatasetName(chart), getCreatedAt(chart), getLastModified(chart), chart.getWidgetType(), @@ -81,6 +84,25 @@ public class DataExplorerWidgetResourceManager extends CrudResourceManager<DataE return false; } + private String getDatasetName(DataExplorerWidgetModel chart) { + if (chart == null || chart.getDataConfig() == null) { + return null; + } + + Object sourceConfigs = chart.getDataConfig().get("sourceConfigs"); + if (!(sourceConfigs instanceof List<?> configs) || configs.isEmpty()) { + return null; + } + + Object firstConfig = configs.get(0); + if (!(firstConfig instanceof Map<?, ?> config)) { + return null; + } + + Object measureName = config.get("measureName"); + return measureName instanceof String ? (String) measureName : null; + } + private String getChartName(DataExplorerWidgetModel chart) { if (chart == null || chart.getBaseAppearanceConfig() == null) { return chart != null ? chart.getElementId() : null; diff --git a/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts b/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts index b4348b7d19..b3ca4026a8 100644 --- a/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts +++ b/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts @@ -74,6 +74,7 @@ export interface PipelineSummaryDto { export interface ChartSummaryDto { elementId: string; name: string; + datasetName: string | null; createdAtEpochMs: number | null; lastModifiedEpochMs: number | null; multiSourceChart: boolean; diff --git a/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.html b/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.html index dd3be00b33..52d80b569e 100644 --- a/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.html +++ b/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.html @@ -19,14 +19,11 @@ <div fxLayout="row" class="data-view-preview-outer" - [attr.data-cy]=" - 'add-data-view-btn-' + - chart.baseAppearanceConfig.widgetTitle.replaceAll(' ', '') - " + [attr.data-cy]="'add-data-view-btn-' + chart.name.replaceAll(' ', '')" (click)="addChartEmitter.emit(chart.elementId)" > <div fxFlex fxLayout="column"> - <h5>{{ chart.baseAppearanceConfig.widgetTitle }}</h5> + <h5>{{ chart.name }}</h5> <div fxLayout="row" fxLayoutGap="15px" class="text-sm"> <span fxLayoutAlign="start center" ><mat-icon color="primary">insert_chart</mat-icon></span @@ -35,14 +32,16 @@ widgetTypeLabel }}</span> </div> - <div fxLayout="row" fxLayoutGap="15px" class="text-sm"> - <span fxLayoutAlign="start center" - ><mat-icon color="primary">folder</mat-icon></span - > - <span fxFlex fxLayoutAlign="start center">{{ - chart.dataConfig.sourceConfigs[0].measureName - }}</span> - </div> + @if (chart.datasetName) { + <div fxLayout="row" fxLayoutGap="15px" class="text-sm"> + <span fxLayoutAlign="start center" + ><mat-icon color="primary">folder</mat-icon></span + > + <span fxFlex fxLayoutAlign="start center">{{ + chart.datasetName + }}</span> + </div> + } </div> <div fxLayoutAlign="end center"> <i class="material-icons">add</i> diff --git a/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.ts b/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.ts index f1e5d677ec..15fefe9e9d 100644 --- a/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.ts +++ b/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-preview/chart-preview.component.ts @@ -24,7 +24,7 @@ import { Output, inject, } from '@angular/core'; -import { DataExplorerWidgetModel } from '@streampipes/platform-services'; +import { ChartSummaryDto } from '@streampipes/platform-services'; import { ChartRegistry } from '../../../../../../chart-shared/registry/chart-registry.service'; import { FlexDirective, @@ -50,14 +50,14 @@ export class ChartPreviewComponent implements OnInit { private widgetRegistryService = inject(ChartRegistry); @Input() - chart: DataExplorerWidgetModel; + chart: ChartSummaryDto; widgetTypeLabel: string; @Output() addChartEmitter: EventEmitter<string> = new EventEmitter<string>(); - ngOnInit() { + ngOnInit(): void { this.widgetTypeLabel = this.widgetRegistryService.getChartTemplate( this.chart.widgetType, ).label; diff --git a/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-selection.component.ts b/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-selection.component.ts index 07b3f7eec3..8d362f4c31 100644 --- a/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-selection.component.ts +++ b/ui/src/app/dashboard/components/panel/chart-selection-panel/chart-selection/chart-selection.component.ts @@ -17,10 +17,7 @@ */ import { Component, EventEmitter, inject, OnInit, Output } from '@angular/core'; -import { - ChartService, - DataExplorerWidgetModel, -} from '@streampipes/platform-services'; +import { ChartSummaryDto, ChartService } from '@streampipes/platform-services'; import { Router } from '@angular/router'; import { AuthService } from '../../../../../services/auth.service'; import { UserPrivilege } from '../../../../../core/auth/user-privilege.enum'; @@ -59,16 +56,14 @@ export class ChartSelectionComponent implements OnInit { @Output() addChartEmitter: EventEmitter<string> = new EventEmitter(); - charts: DataExplorerWidgetModel[] = []; + charts: ChartSummaryDto[] = []; hasChartWritePrivileges: boolean = false; - ngOnInit() { - this.dataViewService.getAllCharts().subscribe(charts => { - this.charts = charts.sort((a, b) => - a.baseAppearanceConfig.widgetTitle.localeCompare( - b.baseAppearanceConfig.widgetTitle, - ), + ngOnInit(): void { + this.dataViewService.getChartSummary().subscribe(chartSummary => { + this.charts = chartSummary.resources.sort((a, b) => + a.name.localeCompare(b.name), ); });
