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/streampipes.git
The following commit(s) were added to refs/heads/dev by this push:
new ad88321fae fix: Improve usability for assets and add translations to
iconbar (#4126)
ad88321fae is described below
commit ad88321fae5ad11cdc0f76dba26bb9c16cbeb191
Author: Dominik Riemer <[email protected]>
AuthorDate: Fri Jan 23 09:51:43 2026 +0100
fix: Improve usability for assets and add translations to iconbar (#4126)
---
ui/deployment/modules.yml | 4 +--
.../asset-details/base-asset-details.directive.ts | 29 ++++++++++++++++------
.../asset-details-basics.component.html | 1 +
.../asset-details-basics.component.ts | 5 ++++
.../asset-details-labels.component.html | 9 +++++--
.../asset-details-labels.component.ts | 4 +++
.../asset-details-site.component.html | 9 +++++--
.../asset-details-site.component.ts | 12 ++++++++-
.../edit-asset/asset-details.component.html | 1 +
.../manage-site/manage-site-dialog.component.ts | 1 +
.../core/components/iconbar/iconbar.component.html | 2 +-
.../datalake-configuration.component.ts | 1 -
.../asset-table/home-asset-table.component.ts | 16 +++++++++++-
ui/src/app/home/components/status.component.html | 2 +-
14 files changed, 77 insertions(+), 19 deletions(-)
diff --git a/ui/deployment/modules.yml b/ui/deployment/modules.yml
index 5eb66406be..58a6e9fdfb 100644
--- a/ui/deployment/modules.yml
+++ b/ui/deployment/modules.yml
@@ -63,7 +63,7 @@ spConnect:
path: './connect/connect.module'
link: 'connect'
url: '/connect'
- title: 'Connectors'
+ title: 'Adapters'
description: 'StreamPipes Connect lets you easily connect new data sources
for a variety of data formats and protocols.'
icon: 'power'
privileges: '[UserPrivilege.PRIVILEGE_READ_ADAPTER,
UserPrivilege.PRIVILEGE_WRITE_ADAPTER]'
@@ -72,7 +72,7 @@ spConnect:
statusBox:
link: "['connect']"
assetLinkTypeId: 'adapter'
- createLinks: "['connect', 'create']"
+ createLinks: "['connect', 'catalog']"
title: 'Adapters'
createTitle: 'New adapter'
dataFns: '[this.adapterService.getAdapters()]'
diff --git
a/ui/src/app/assets/components/asset-details/base-asset-details.directive.ts
b/ui/src/app/assets/components/asset-details/base-asset-details.directive.ts
index 98794e4720..251c38d321 100644
--- a/ui/src/app/assets/components/asset-details/base-asset-details.directive.ts
+++ b/ui/src/app/assets/components/asset-details/base-asset-details.directive.ts
@@ -50,6 +50,15 @@ export abstract class BaseAssetDetailsDirective implements
OnInit {
this.loadResources();
}
+ reloadSites(): void {
+ this.genericStorageService
+ .getAllDocuments(AssetConstants.ASSET_SITES_APP_DOC_NAME)
+ .subscribe(res => {
+ this.sites = res;
+ this.applySites();
+ });
+ }
+
loadResources(): void {
const assetReq = this.assetService.getAsset(this.assetModelId);
const locationsReq = this.genericStorageService.getAllDocuments(
@@ -66,19 +75,23 @@ export abstract class BaseAssetDetailsDirective implements
OnInit {
{ label: this.asset.assetName },
]);
- if (!this.asset.assetSite.hasExactLocation) {
- const matchingSite = this.sites.find(
- site => site._id === this.asset.assetSite.siteId,
- );
- if (matchingSite) {
- this.asset.assetSite.location = matchingSite.location;
- }
- }
+ this.applySites();
this.onAssetAvailable();
});
}
+ applySites(): void {
+ if (!this.asset.assetSite.hasExactLocation) {
+ const matchingSite = this.sites.find(
+ site => site._id === this.asset.assetSite.siteId,
+ );
+ if (matchingSite) {
+ this.asset.assetSite.location = matchingSite.location;
+ }
+ }
+ }
+
applySelectedAsset(event: { asset: SpAsset; rootNode: boolean }): void {
this.selectedAsset = event.asset;
this.rootNode = event.rootNode;
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
index e1e14935e5..638f45fb4b 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
@@ -99,6 +99,7 @@
@if (rootNode) {
<sp-split-section [level]="2" [title]="'Sites' | translate">
<sp-asset-details-site
+ (reloadSites)="reloadSites.emit()"
[asset]="asset"
[sites]="sites"
[editMode]="editMode"
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.ts
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.ts
index 094a4f6ead..c950836bf2 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.ts
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.ts
@@ -18,9 +18,11 @@
import {
Component,
+ EventEmitter,
Input,
OnChanges,
OnInit,
+ Output,
SimpleChanges,
} from '@angular/core';
import {
@@ -52,6 +54,9 @@ export class AssetDetailsBasicsComponent implements OnInit,
OnChanges {
@Input()
sites: AssetSiteDesc[];
+ @Output()
+ reloadSites: EventEmitter<void> = new EventEmitter();
+
isa95Types: Isa95TypeDesc[] = [];
constructor(private isa95TypeService: Isa95TypeService) {}
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
index 39afd33b8c..3d1d5d727b 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
@@ -30,13 +30,18 @@
| translate
"
>
- <div form-field-actions>
- <button
+ <div form-field-actions fxLayoutAlign="start center">
+ <a
mat-flat-button
class="mat-basic"
[routerLink]="['/configuration/labels']"
+ target="_blank"
+ rel="noopener noreferrer"
>
{{ 'Manage Labels' | translate }}
+ </a>
+ <button mat-icon-button (click)="loadLabels()">
+ <mat-icon>refresh</mat-icon>
</button>
</div>
<mat-form-field [disabled]="allLabels.length === 0">
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.ts
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.ts
index 2fada3c2f8..80907971d7 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.ts
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.ts
@@ -67,6 +67,10 @@ export class AssetDetailsLabelsComponent implements OnInit,
OnChanges {
) {}
ngOnInit(): void {
+ this.loadLabels();
+ }
+
+ loadLabels(): void {
this.labelsService.getAllLabels().subscribe(labels => {
this.allLabels = labels.sort((a, b) =>
a.label.localeCompare(b.label),
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
index e87733e6fd..8143204926 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
@@ -28,13 +28,18 @@
| translate
"
>
- <div form-field-actions>
- <button
+ <div form-field-actions fxLayoutAlign="start center">
+ <a
mat-flat-button
class="mat-basic"
[routerLink]="['/configuration/sites']"
+ target="_blank"
+ rel="noopener noreferrer"
>
{{ 'Manage Sites' | translate }}
+ </a>
+ <button mat-icon-button (click)="reloadSites.emit()">
+ <mat-icon>refresh</mat-icon>
</button>
</div>
<mat-form-field>
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.ts
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.ts
index e3b1a40651..175f6816df 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.ts
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.ts
@@ -16,7 +16,14 @@
*
*/
-import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
+import {
+ Component,
+ EventEmitter,
+ Input,
+ OnChanges,
+ Output,
+ SimpleChanges,
+} from '@angular/core';
import { AssetSiteDesc, SpAsset } from '@streampipes/platform-services';
import { MatSelectChange } from '@angular/material/select';
@@ -35,6 +42,9 @@ export class AssetDetailsSiteComponent implements OnChanges {
@Input()
sites: AssetSiteDesc[];
+ @Output()
+ reloadSites: EventEmitter<void> = new EventEmitter();
+
currentSite: AssetSiteDesc;
constructor() {}
diff --git
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
index 679bfb6b87..a31ba0520f 100644
---
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
+++
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
@@ -54,6 +54,7 @@
@if (asset) {
<div fxFlex="100" fxLayout="column" class="p-10">
<sp-asset-details-basics
+ (reloadSites)="reloadSites()"
[asset]="selectedAsset"
[assetModel]="asset"
[sites]="sites"
diff --git
a/ui/src/app/configuration/dialog/manage-site/manage-site-dialog.component.ts
b/ui/src/app/configuration/dialog/manage-site/manage-site-dialog.component.ts
index cf89f35901..dd268be141 100644
---
a/ui/src/app/configuration/dialog/manage-site/manage-site-dialog.component.ts
+++
b/ui/src/app/configuration/dialog/manage-site/manage-site-dialog.component.ts
@@ -79,6 +79,7 @@ export class ManageSiteDialogComponent implements OnInit {
const { label, location } = formData.value;
this.clonedSite.label = label;
this.clonedSite.location = location;
+ this.clonedSite.areas.sort((a, b) => a.localeCompare(b));
const observable = this.createMode
? this.genericStorageService.createDocument(
diff --git a/ui/src/app/core/components/iconbar/iconbar.component.html
b/ui/src/app/core/components/iconbar/iconbar.component.html
index c3a52d9aed..1b2dbb1cf3 100644
--- a/ui/src/app/core/components/iconbar/iconbar.component.html
+++ b/ui/src/app/core/components/iconbar/iconbar.component.html
@@ -128,7 +128,7 @@
<span
class="item-title text-md
text-ellipsis"
[class.hidden]="collapsed()"
- >{{ item.title }}</span
+ >{{ item.title | translate }}</span
>
</button>
}
diff --git
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
index 886bbe4a4a..023275ff21 100644
---
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
+++
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
@@ -31,7 +31,6 @@ import {
ExportProviderSettings,
ExportProviderService,
RetentionLog,
- UserService,
DataLakeMeasure,
} from '@streampipes/platform-services';
import { MatPaginator } from '@angular/material/paginator';
diff --git
a/ui/src/app/home/components/asset-table/home-asset-table.component.ts
b/ui/src/app/home/components/asset-table/home-asset-table.component.ts
index fa8b5406cf..20ea772a0b 100644
--- a/ui/src/app/home/components/asset-table/home-asset-table.component.ts
+++ b/ui/src/app/home/components/asset-table/home-asset-table.component.ts
@@ -21,6 +21,7 @@ import {
inject,
Input,
OnChanges,
+ OnInit,
SimpleChanges,
ViewChild,
} from '@angular/core';
@@ -41,7 +42,7 @@ import { Router } from '@angular/router';
styleUrls: ['./home-asset-table.component.scss'],
standalone: false,
})
-export class HomeAssetTableComponent implements OnChanges {
+export class HomeAssetTableComponent implements OnInit, OnChanges {
@Input()
locationConfig: LocationConfig;
@@ -71,6 +72,19 @@ export class HomeAssetTableComponent implements OnChanges {
private isa95TypeService = inject(Isa95TypeService);
private router = inject(Router);
+ ngOnInit() {
+ this.dataSource.sortingDataAccessor = (assetModel, column) => {
+ if (column === 'assetType') {
+ return assetModel.assetType?.isa95AssetType;
+ } else if (column === 'location') {
+ return this.getSite(assetModel);
+ } else if (column === 'area') {
+ return assetModel.assetSite?.area || '-';
+ }
+ return assetModel[column];
+ };
+ }
+
ngOnChanges(changes: SimpleChanges) {
this.dataSource.data = this.assets;
setTimeout(() => {
diff --git a/ui/src/app/home/components/status.component.html
b/ui/src/app/home/components/status.component.html
index e37497d5c4..9187e90df9 100644
--- a/ui/src/app/home/components/status.component.html
+++ b/ui/src/app/home/components/status.component.html
@@ -20,7 +20,7 @@
<div class="status-content p-sm">
<div class="status-main">
<div class="status-number">{{ resourceCount }}</div>
- <div class="status-title">{{ statusBox.title }}</div>
+ <div class="status-title">{{ statusBox.title | translate }}</div>
@if (showCreateLink) {
<a