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

Reply via email to