From dd19109034ddaa14380e1b0d156eb6e0318e25fe Mon Sep 17 00:00:00 2001 From: rusikv Date: Mon, 7 Aug 2023 16:11:14 +0300 Subject: [PATCH] Add delete button to selection in alarm table --- ui-ngx/src/app/core/http/alarm.service.ts | 12 ++-- .../components/alarm/alarm-table-config.ts | 65 +++++++++++++++---- .../lib/alarms-table-widget.component.ts | 4 +- .../assets/locale/locale.constant-en_US.json | 3 + 4 files changed, 63 insertions(+), 21 deletions(-) diff --git a/ui-ngx/src/app/core/http/alarm.service.ts b/ui-ngx/src/app/core/http/alarm.service.ts index e03e9ab783..f0ce187341 100644 --- a/ui-ngx/src/app/core/http/alarm.service.ts +++ b/ui-ngx/src/app/core/http/alarm.service.ts @@ -52,12 +52,12 @@ export class AlarmService { return this.http.post('/api/alarm', alarm, defaultHttpOptionsFromConfig(config)); } - public ackAlarm(alarmId: string, config?: RequestConfig): Observable { - return this.http.post(`/api/alarm/${alarmId}/ack`, null, defaultHttpOptionsFromConfig(config)); + public ackAlarm(alarmId: string, config?: RequestConfig): Observable { + return this.http.post(`/api/alarm/${alarmId}/ack`, null, defaultHttpOptionsFromConfig(config)); } - public clearAlarm(alarmId: string, config?: RequestConfig): Observable { - return this.http.post(`/api/alarm/${alarmId}/clear`, null, defaultHttpOptionsFromConfig(config)); + public clearAlarm(alarmId: string, config?: RequestConfig): Observable { + return this.http.post(`/api/alarm/${alarmId}/clear`, null, defaultHttpOptionsFromConfig(config)); } public assignAlarm(alarmId: string, assigneeId: string, config?: RequestConfig): Observable { @@ -68,8 +68,8 @@ export class AlarmService { return this.http.delete(`/api/alarm/${alarmId}/assign`, defaultHttpOptionsFromConfig(config)); } - public deleteAlarm(alarmId: string, config?: RequestConfig): Observable { - return this.http.delete(`/api/alarm/${alarmId}`, defaultHttpOptionsFromConfig(config)); + public deleteAlarm(alarmId: string, config?: RequestConfig): Observable { + return this.http.delete(`/api/alarm/${alarmId}`, defaultHttpOptionsFromConfig(config)); } public getAlarms(query: AlarmQuery, diff --git a/ui-ngx/src/app/modules/home/components/alarm/alarm-table-config.ts b/ui-ngx/src/app/modules/home/components/alarm/alarm-table-config.ts index 646e05511f..15e3fb1952 100644 --- a/ui-ngx/src/app/modules/home/components/alarm/alarm-table-config.ts +++ b/ui-ngx/src/app/modules/home/components/alarm/alarm-table-config.ts @@ -162,14 +162,18 @@ export class AlarmTableConfig extends EntityTableConfig icon: 'done', isEnabled: true, onAction: ($event, entities) => this.ackAlarms($event, entities) - } - ) - this.groupActionDescriptors.push( + }, { name: this.translate.instant('alarm.clear'), icon: 'clear', isEnabled: true, onAction: ($event, entities) => this.clearAlarms($event, entities) + }, + { + name: this.translate.instant('alarm.delete'), + icon: 'delete', + isEnabled: true, + onAction: ($event, entities) => this.deleteAlarms($event, entities) } ) } @@ -318,12 +322,17 @@ export class AlarmTableConfig extends EntityTableConfig const unacknowledgedAlarms = alarms.filter(alarm => { return alarm.status === AlarmStatus.CLEARED_UNACK || alarm.status === AlarmStatus.ACTIVE_UNACK; }) + let title = ''; + let content = ''; if (!unacknowledgedAlarms.length) { - this.dialogService.alert(this.translate.instant('alarm.selected-alarms', {count: alarms.length}), - this.translate.instant('alarm.selected-alarms-are-acknowledged')).subscribe(); + title = this.translate.instant('alarm.selected-alarms', {count: alarms.length}); + content = this.translate.instant('alarm.selected-alarms-are-acknowledged'); + this.dialogService.alert( + title, + content).subscribe(); } else { - const title = this.translate.instant('alarm.aknowledge-alarms-title', {count: unacknowledgedAlarms.length}); - const content = this.translate.instant('alarm.aknowledge-alarms-text', {count: unacknowledgedAlarms.length}); + title = this.translate.instant('alarm.aknowledge-alarms-title', {count: unacknowledgedAlarms.length}); + content = this.translate.instant('alarm.aknowledge-alarms-text', {count: unacknowledgedAlarms.length}); this.dialogService.confirm( title, content, @@ -331,7 +340,7 @@ export class AlarmTableConfig extends EntityTableConfig this.translate.instant('action.yes') ).subscribe((res) => { if (res) { - const tasks: Observable[] = []; + const tasks: Observable[] = []; for (const alarm of unacknowledgedAlarms) { tasks.push(this.alarmService.ackAlarm(alarm.id.id)); } @@ -350,12 +359,18 @@ export class AlarmTableConfig extends EntityTableConfig const activeAlarms = alarms.filter(alarm => { return alarm.status === AlarmStatus.ACTIVE_ACK || alarm.status === AlarmStatus.ACTIVE_UNACK; }) + let title = ''; + let content = ''; if (!activeAlarms.length) { - this.dialogService.alert(this.translate.instant('alarm.selected-alarms', {count: alarms.length}), - this.translate.instant('alarm.selected-alarms-are-cleared')).subscribe(); + title = this.translate.instant('alarm.selected-alarms', {count: alarms.length}); + content = this.translate.instant('alarm.selected-alarms-are-cleared'); + this.dialogService.alert( + title, + content + ).subscribe(); } else { - const title = this.translate.instant('alarm.clear-alarms-title', {count: activeAlarms.length}); - const content = this.translate.instant('alarm.clear-alarms-text', {count: activeAlarms.length}); + title = this.translate.instant('alarm.clear-alarms-title', {count: activeAlarms.length}); + content = this.translate.instant('alarm.clear-alarms-text', {count: activeAlarms.length}); this.dialogService.confirm( title, content, @@ -363,7 +378,7 @@ export class AlarmTableConfig extends EntityTableConfig this.translate.instant('action.yes') ).subscribe((res) => { if (res) { - const tasks: Observable[] = []; + const tasks: Observable[] = []; for (const alarm of activeAlarms) { tasks.push(this.alarmService.clearAlarm(alarm.id.id)); } @@ -375,4 +390,28 @@ export class AlarmTableConfig extends EntityTableConfig } } + deleteAlarms($event: Event, alarms: Array) { + if ($event) { + $event.stopPropagation(); + } + const title = this.translate.instant('alarm.delete-alarms-title', {count: alarms.length}); + const content = this.translate.instant('alarm.delete-alarms-text', {count: alarms.length}); + this.dialogService.confirm( + title, + content, + this.translate.instant('action.no'), + this.translate.instant('action.yes') + ).subscribe((res) => { + if (res) { + const tasks: Observable[] = []; + for (const alarm of alarms) { + tasks.push(this.alarmService.deleteAlarm(alarm.id.id)); + } + forkJoin(tasks).subscribe(() => { + this.updateData(); + }); + } + }); + } + } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts index f799ed43ff..57e8db694c 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts @@ -927,7 +927,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit, ).subscribe((res) => { if (res) { if (res) { - const tasks: Observable[] = []; + const tasks: Observable[] = []; for (const alarmId of alarmIds) { tasks.push(this.alarmService.ackAlarm(alarmId)); } @@ -983,7 +983,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit, ).subscribe((res) => { if (res) { if (res) { - const tasks: Observable[] = []; + const tasks: Observable[] = []; for (const alarmId of alarmIds) { tasks.push(this.alarmService.clearAlarm(alarmId)); } diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 756cbb3ab6..ce134c1fd4 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -512,6 +512,7 @@ "severity-indeterminate": "Indeterminate", "acknowledge": "Acknowledge", "clear": "Clear", + "delete": "Delete", "search": "Search alarms", "selected-alarms": "{ count, plural, =1 {1 alarm} other {# alarms} } selected", "no-data": "No data to display", @@ -527,6 +528,8 @@ "clear-alarms-text": "Are you sure you want to clear { count, plural, =1 {1 alarm} other {# alarms} }?", "clear-alarm-title": "Clear Alarm", "clear-alarm-text": "Are you sure you want to clear Alarm?", + "delete-alarms-title": "Delete { count, plural, =1 {1 alarm} other {# alarms} }", + "delete-alarms-text": "Are you sure you want to delete { count, plural, =1 {1 alarm} other {# alarms} }?", "selected-alarms-are-cleared": "Selected alarms are already cleared", "alarm-status-filter": "Alarm Status Filter", "alarm-filter-title": "Alarm Filter",