From 61ce61bf5c4504755593784a606ef2a8cc2b1092 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 23 Jun 2026 11:37:26 +0300 Subject: [PATCH 1/2] refactor(iot-hub): move installed-item delete API call into the delete dialog Push the deleteInstalledItem call from IotHubActionsService into the dialog's confirm() handler so the dialog itself manages its lifetime. Pass installedItemId in the dialog data and have confirm() fire the API call, then close with true on success. Drop the now-unused isLoading flips in the installed-items table since loading state is no longer optimistically toggled around the dialog. --- .../components/iot-hub/iot-hub-actions.service.ts | 10 ++-------- .../iot-hub/iot-hub-delete-dialog.component.ts | 12 ++++++++++-- .../iot-hub-installed-items-table.component.ts | 6 ------ 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts index 702eb6b1d9..d26565ee95 100644 --- a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts +++ b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts @@ -17,7 +17,6 @@ import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { Observable, of, EMPTY } from 'rxjs'; -import { map, mergeMap } from 'rxjs/operators'; import { TranslateService } from '@ngx-translate/core'; import { DialogService } from '@core/services/dialog.service'; import { MpItemVersionView } from '@shared/models/iot-hub/iot-hub-version.models'; @@ -120,13 +119,8 @@ export class IotHubActionsService { panelClass: ['tb-dialog'], disableClose: true, autoFocus: false, - data: { itemName: installedItem.itemName, itemType: installedItem.itemType } - }).afterClosed().pipe( - mergeMap((confirmed) => - confirmed - ? this.iotHubApiService.deleteInstalledItem(installedItem.id.id).pipe(map(() => true)) - : of(false) ) - ); + data: { installedItemId: installedItem.id.id, itemName: installedItem.itemName, itemType: installedItem.itemType } + }).afterClosed(); } installDevice(item: MpItemVersionView): Observable { diff --git a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-delete-dialog.component.ts b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-delete-dialog.component.ts index 4353f1a9f6..be91644741 100644 --- a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-delete-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-delete-dialog.component.ts @@ -20,8 +20,11 @@ import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { DialogComponent } from '@shared/components/dialog.component'; +import { IotHubInstalledItem } from 'src/app/shared/models/iot-hub/iot-hub-installed-item.models'; +import { IotHubApiService } from '@core/http/iot-hub-api.service'; export interface IotHubDeleteDialogData { + installedItemId: string; itemName: string; itemType?: string; } @@ -38,13 +41,18 @@ export class TbIotHubDeleteDialogComponent extends DialogComponent, protected router: Router, protected dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: IotHubDeleteDialogData + @Inject(MAT_DIALOG_DATA) public data: IotHubDeleteDialogData, + private iotHubApiService: IotHubApiService ) { super(store, router, dialogRef); } confirm(): void { - this.dialogRef.close(true); + this.iotHubApiService.deleteInstalledItem(this.data.installedItemId).subscribe( + () => { + this.dialogRef.close(true); + } + ); } cancel(): void { diff --git a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-installed-items-table.component.ts b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-installed-items-table.component.ts index 281d1d1e0e..4435c82736 100644 --- a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-installed-items-table.component.ts +++ b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-installed-items-table.component.ts @@ -156,12 +156,9 @@ export class TbIotHubInstalledItemsTableComponent implements OnInit, OnChanges, } deleteItem(item: IotHubInstalledItem): void { - this.isLoading = true; this.iotHubActions.deleteItem(item).subscribe(deleted => { if (deleted) { this.loadData(); - } else { - this.isLoading = false; } }); } @@ -247,12 +244,9 @@ export class TbIotHubInstalledItemsTableComponent implements OnInit, OnChanges, } updateItem(item: IotHubInstalledItem, publishedInfo: ItemPublishedVersionInfo): void { - this.isLoading = true; this.iotHubActions.updateItem(item, publishedInfo.publishedVersion, publishedInfo.publishedVersionId).subscribe(result => { if (result === 'updated') { this.loadData(); - } else { - this.isLoading = false; } }); } From 48e70f9b0ddd83b7e34dca930ba6609cee65f061 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 23 Jun 2026 11:41:24 +0300 Subject: [PATCH 2/2] chore(iot-hub): drop unused IotHubApiService dependency from IotHubActionsService --- .../modules/home/components/iot-hub/iot-hub-actions.service.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts index d26565ee95..73e627fbe6 100644 --- a/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts +++ b/ui-ngx/src/app/modules/home/components/iot-hub/iot-hub-actions.service.ts @@ -22,7 +22,6 @@ import { DialogService } from '@core/services/dialog.service'; import { MpItemVersionView } from '@shared/models/iot-hub/iot-hub-version.models'; import { ItemType } from '@shared/models/iot-hub/iot-hub-item.models'; import { DeviceInstalledItemDescriptor, IotHubInstalledItem } from '@shared/models/iot-hub/iot-hub-installed-item.models'; -import { IotHubApiService } from '@core/http/iot-hub-api.service'; import { EntityId } from '@shared/models/id/entity-id'; import { TbIotHubAddItemDialogComponent, IotHubAddItemDialogData, IotHubAddItemDialogResult } from './iot-hub-add-item-dialog.component'; import { TbIotHubItemDetailDialogComponent, IotHubItemDetailDialogData, IotHubItemDetailDialogMode } from './iot-hub-item-detail-dialog.component'; @@ -37,7 +36,6 @@ export class IotHubActionsService { constructor( private dialog: MatDialog, - private iotHubApiService: IotHubApiService, private dialogService: DialogService, private translate: TranslateService ) {}