From a39db0a1cf329dcc4dbfaa1f4aa83769bad467b6 Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Wed, 15 Mar 2023 13:28:31 +0200 Subject: [PATCH] UI: Fix notification after change API --- ...fication-request-error-dialog.component.ts | 2 +- ...request-notification-dialog.component.html | 26 +++++------ .../request-notification-dialog.componet.ts | 4 +- .../rule-table/escalation-form.component.html | 4 +- .../rule-notification-dialog.component.html | 4 +- .../rule-notification-dialog.component.ts | 14 ++++++ .../template-table/template-configuration.ts | 44 +++++++++---------- ...emplate-notification-dialog.component.html | 20 ++++----- .../components/time/timeinterval.component.ts | 12 ++--- .../app/shared/models/notification.models.ts | 14 +++--- .../assets/locale/locale.constant-en_US.json | 10 ++--- 11 files changed, 85 insertions(+), 69 deletions(-) diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/request-table/notification-request-error-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/notification-center/request-table/notification-request-error-dialog.component.ts index d30639e310..807fa5c4a9 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/request-table/notification-request-error-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/pages/notification-center/request-table/notification-request-error-dialog.component.ts @@ -36,7 +36,7 @@ export class NotificationRequestErrorDialogComponent extends DialogComponent([ - [NotificationDeliveryMethod.PUSH, 'notification.delivery-method-type.push-failed-sent'], + [NotificationDeliveryMethod.WEB, 'notification.delivery-method-type.web-failed-sent'], [NotificationDeliveryMethod.SMS, 'notification.delivery-method-type.sms-failed-sent'], [NotificationDeliveryMethod.EMAIL, 'notification.delivery-method-type.email-failed-sent'], [NotificationDeliveryMethod.SLACK, 'notification.delivery-method-type.slack-failed-sent'], diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.component.html b/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.component.html index b5f5b8057a..3d7f0b8ef3 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.component.html @@ -120,13 +120,13 @@ + notificationRequestForm.get('template.configuration.deliveryMethodsTemplates.WEB.enabled').value" + [stepControl]="webTemplateForm"> {{ 'notification.web-settings' | translate }}
{{ notificationTemplateTypeTranslateMap.get(notificationType.GENERAL).hint | translate }}
-
+ notification.subject @@ -146,7 +146,7 @@ {{ 'icon.icon' | translate }} -
@@ -158,12 +158,12 @@ {{ 'notification.action-button' | translate }} -
+
notification.button-text - + {{ 'notification.button-text-required' | translate }} @@ -178,10 +178,10 @@ + *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.LINK; else dashboardSelector"> notification.link - + {{ 'notification.link-required' | translate }} @@ -192,13 +192,13 @@ formControlName="dashboardId">
+ *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.DASHBOARD"> {{ 'notification.set-entity-from-notification' | translate }}
@@ -270,13 +270,13 @@ strokeWidth="5" *ngIf="(isLoading$ | async) && !preview">
-
+
-
notification.delivery-method-type.push-preview
+
notification.delivery-method-type.web-preview
- +
diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.componet.ts b/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.componet.ts index ceeb6d2e73..909d4acd6b 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.componet.ts +++ b/ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.componet.ts @@ -188,8 +188,8 @@ export class RequestNotificationDialogComponent extends this.preview = null; this.notificationService.getNotificationRequestPreview(this.notificationFormValue).pipe( map(data => { - if (data.processedTemplates.PUSH?.enabled) { - (data.processedTemplates.PUSH as any).text = data.processedTemplates.PUSH.body; + if (data.processedTemplates.WEB?.enabled) { + (data.processedTemplates.WEB as any).text = data.processedTemplates.WEB.body; } return data; }) diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/escalation-form.component.html b/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/escalation-form.component.html index 43409aa9cc..f37da71867 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/escalation-form.component.html +++ b/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/escalation-form.component.html @@ -24,8 +24,8 @@ notification.notify
diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.html b/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.html index a3db4399f9..ff45dba894 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.html @@ -76,7 +76,7 @@
- notification.hierarchy-of-receiving + notification.notification-chain
@@ -108,7 +108,7 @@ -
+
notification.clear-rule alarm.alarm-status-list diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.ts index b9c64b7235..396c296d07 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.ts @@ -146,6 +146,16 @@ export class RuleNotificationDialogComponent extends } }); + this.ruleNotificationForm.get('recipientsConfig.escalationTable').valueChanges.pipe( + takeUntil(this.destroy$) + ).subscribe(value => { + if (this.countRecipientsChainConfig() > 1) { + this.alarmTemplateForm.get('triggerConfig.clearRule').enable({emitEvent: false}); + } else { + this.alarmTemplateForm.get('triggerConfig.clearRule').disable({emitEvent: false}); + } + }) + this.alarmTemplateForm = this.fb.group({ triggerConfig: this.fb.group({ alarmTypes: [null], @@ -312,4 +322,8 @@ export class RuleNotificationDialogComponent extends } }); } + + countRecipientsChainConfig(): number { + return Object.keys(this.ruleNotificationForm.get('recipientsConfig.escalationTable').value ?? {}).length; + } } diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-configuration.ts b/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-configuration.ts index 9621b88bd7..260690e30a 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-configuration.ts +++ b/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-configuration.ts @@ -39,7 +39,7 @@ import { deepClone, deepTrim } from '@core/utils'; export abstract class TemplateConfiguration extends DialogComponent implements OnDestroy{ templateNotificationForm: FormGroup; - pushTemplateForm: FormGroup; + webTemplateForm: FormGroup; emailTemplateForm: FormGroup; smsTemplateForm: FormGroup; slackTemplateForm: FormGroup; @@ -87,10 +87,10 @@ export abstract class TemplateConfiguration extends DialogComponent< this.notificationDeliveryMethods.forEach(method => { (this.templateNotificationForm.get('configuration.deliveryMethodsTemplates') as FormGroup) - .addControl(method, this.fb.group({enabled: method === NotificationDeliveryMethod.PUSH}), {emitEvent: false}); + .addControl(method, this.fb.group({enabled: method === NotificationDeliveryMethod.WEB}), {emitEvent: false}); }); - this.pushTemplateForm = this.fb.group({ + this.webTemplateForm = this.fb.group({ subject: [''], body: [''], additionalConfig: this.fb.group({ @@ -111,43 +111,43 @@ export abstract class TemplateConfiguration extends DialogComponent< }) }); - this.pushTemplateForm.get('additionalConfig.icon.enabled').valueChanges.pipe( + this.webTemplateForm.get('additionalConfig.icon.enabled').valueChanges.pipe( takeUntil(this.destroy$) ).subscribe((value) => { if (value) { - this.pushTemplateForm.get('additionalConfig.icon.icon').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.icon.icon').enable({emitEvent: false}); } else { - this.pushTemplateForm.get('additionalConfig.icon.icon').disable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.icon.icon').disable({emitEvent: false}); } }); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.enabled').valueChanges.pipe( + this.webTemplateForm.get('additionalConfig.actionButtonConfig.enabled').valueChanges.pipe( takeUntil(this.destroy$) ).subscribe((value) => { if (value) { - this.pushTemplateForm.get('additionalConfig.actionButtonConfig').enable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.linkType').updateValueAndValidity({onlySelf: true}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').updateValueAndValidity({onlySelf: true}); } else { - this.pushTemplateForm.get('additionalConfig.actionButtonConfig').disable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.enabled').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig').disable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.enabled').enable({emitEvent: false}); } }); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.linkType').valueChanges.pipe( + this.webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').valueChanges.pipe( takeUntil(this.destroy$) ).subscribe((value) => { - const isEnabled = this.pushTemplateForm.get('additionalConfig.actionButtonConfig.enabled').value; + const isEnabled = this.webTemplateForm.get('additionalConfig.actionButtonConfig.enabled').value; if (isEnabled) { if (value === ActionButtonLinkType.LINK) { - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.link').enable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').disable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.dashboardState').disable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.setEntityIdInState').disable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.link').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').disable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.dashboardState').disable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.setEntityIdInState').disable({emitEvent: false}); } else { - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.link').disable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').enable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.dashboardState').enable({emitEvent: false}); - this.pushTemplateForm.get('additionalConfig.actionButtonConfig.setEntityIdInState').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.link').disable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.dashboardState').enable({emitEvent: false}); + this.webTemplateForm.get('additionalConfig.actionButtonConfig.setEntityIdInState').enable({emitEvent: false}); } } }); @@ -166,7 +166,7 @@ export abstract class TemplateConfiguration extends DialogComponent< }); this.deliveryMethodFormsMap = new Map([ - [NotificationDeliveryMethod.PUSH, this.pushTemplateForm], + [NotificationDeliveryMethod.WEB, this.webTemplateForm], [NotificationDeliveryMethod.EMAIL, this.emailTemplateForm], [NotificationDeliveryMethod.SMS, this.smsTemplateForm], [NotificationDeliveryMethod.SLACK, this.slackTemplateForm] diff --git a/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-notification-dialog.component.html b/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-notification-dialog.component.html index 573d5404b3..67ae8d0e49 100644 --- a/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-notification-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-notification-dialog.component.html @@ -84,13 +84,13 @@ - + {{ 'notification.web-settings' | translate }}
{{ notificationTemplateTypeTranslateMap.get(templateNotificationForm.get('notificationType').value).hint | translate }}
-
+ notification.subject @@ -110,7 +110,7 @@ {{ 'icon.icon' | translate }} -
@@ -122,12 +122,12 @@ {{ 'notification.action-button' | translate }} -
+
notification.button-text - + {{ 'notification.button-text-required' | translate }} @@ -142,10 +142,10 @@ + *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.LINK; else dashboardSelector"> notification.link - + {{ 'notification.link-required' | translate }} @@ -156,13 +156,13 @@ formControlName="dashboardId">
+ *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.DASHBOARD"> {{ 'notification.set-entity-from-notification' | translate }}
diff --git a/ui-ngx/src/app/shared/components/time/timeinterval.component.ts b/ui-ngx/src/app/shared/components/time/timeinterval.component.ts index be2c449eaa..49bfec6fe3 100644 --- a/ui-ngx/src/app/shared/components/time/timeinterval.component.ts +++ b/ui-ngx/src/app/shared/components/time/timeinterval.component.ts @@ -17,7 +17,7 @@ import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; import { TimeInterval, TimeService } from '@core/services/time.service'; -import { coerceBooleanProperty } from '@angular/cdk/coercion'; +import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion'; import { SubscriptSizing } from '@angular/material/form-field'; @Component({ @@ -39,8 +39,9 @@ export class TimeintervalComponent implements OnInit, ControlValueAccessor { @Input() set min(min: number) { - if (typeof min !== 'undefined' && min !== this.minValue) { - this.minValue = min; + const minValueData = coerceNumberProperty(min); + if (typeof minValueData !== 'undefined' && minValueData !== this.minValue) { + this.minValue = minValueData; this.maxValue = Math.max(this.maxValue, this.minValue); this.updateView(); } @@ -48,8 +49,9 @@ export class TimeintervalComponent implements OnInit, ControlValueAccessor { @Input() set max(max: number) { - if (typeof max !== 'undefined' && max !== this.maxValue) { - this.maxValue = max; + const maxValueData = coerceNumberProperty(max); + if (typeof maxValueData !== 'undefined' && maxValueData !== this.maxValue) { + this.maxValue = maxValueData; this.minValue = Math.min(this.minValue, this.maxValue); this.updateView(); } diff --git a/ui-ngx/src/app/shared/models/notification.models.ts b/ui-ngx/src/app/shared/models/notification.models.ts index 28bf639ab0..aa644ada73 100644 --- a/ui-ngx/src/app/shared/models/notification.models.ts +++ b/ui-ngx/src/app/shared/models/notification.models.ts @@ -36,7 +36,7 @@ export interface Notification { readonly info: NotificationInfo; readonly status: NotificationStatus; readonly createdTime: number; - readonly additionalConfig?: PushDeliveryMethodAdditionalConfig; + readonly additionalConfig?: WebDeliveryMethodAdditionalConfig; } export interface NotificationInfo { @@ -189,18 +189,18 @@ interface NotificationTemplateConfig { } export interface DeliveryMethodNotificationTemplate extends - Partial{ + Partial{ body?: string; enabled: boolean; method: NotificationDeliveryMethod; } -interface PushDeliveryMethodNotificationTemplate { +interface WebDeliveryMethodNotificationTemplate { subject?: string; - additionalConfig: PushDeliveryMethodAdditionalConfig; + additionalConfig: WebDeliveryMethodAdditionalConfig; } -interface PushDeliveryMethodAdditionalConfig { +interface WebDeliveryMethodAdditionalConfig { icon: { enabled: boolean; icon: string; @@ -232,14 +232,14 @@ export enum NotificationStatus { } export enum NotificationDeliveryMethod { - PUSH = 'PUSH', + WEB = 'WEB', SMS = 'SMS', EMAIL = 'EMAIL', SLACK = 'SLACK' } export const NotificationDeliveryMethodTranslateMap = new Map([ - [NotificationDeliveryMethod.PUSH, 'notification.delivery-method-type.push'], + [NotificationDeliveryMethod.WEB, 'notification.delivery-method-type.web'], [NotificationDeliveryMethod.SMS, 'notification.delivery-method-type.sms'], [NotificationDeliveryMethod.EMAIL, 'notification.delivery-method-type.email'], [NotificationDeliveryMethod.SLACK, 'notification.delivery-method-type.slack'] 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 2595622701..c1fcd07d3d 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2755,9 +2755,9 @@ "email": "Email", "email-failed-sent": "Email messages failed sent", "email-preview": "Email notification preview", - "push": "Web", - "push-failed-sent": "Web messages failed sent", - "push-preview": "Web notification preview", + "web": "Web", + "web-failed-sent": "Web messages failed sent", + "web-preview": "Web notification preview", "slack": "Slack", "slack-failed-sent": "Slack messages failed sent", "slack-preview": "Slack notification preview", @@ -2785,7 +2785,6 @@ "fails": "Fails", "filter": "Filter", "first-recipient": "First recipient", - "hierarchy-of-receiving": "Hierarchy of receiving notifications", "inbox": "Inbox", "link": "Link", "link-required": "Link is required", @@ -2812,6 +2811,7 @@ "not-found-slack-recipient": "Not found slack recipient", "notification": "Notification", "notification-center": "Notification center", + "notification-chain": "Notification chain", "notification-target": "Notification recipient", "notify": "notify", "notify-again": "Notify again", @@ -2867,7 +2867,7 @@ "template-hint": { "alarm": "Available params: ${alarmType}, ${alarmSeverity}, ${alarmStatus}, ${alarmOriginatorEntityType}, ${alarmOriginatorId}, ${alarmId}, ${alarmAction}", "alarm-comment": "Available params: ${comment}, ${alarmType}, ${alarmId}, ${alarmType}, ${alarmSeverity}, ${alarmStatus}, ${alarmOriginatorEntityType}, ${alarmOriginatorId}, ${alarmId}, ${alarmAction}", - "device-inactivity": "Available params: ${deviceName}, ${deviceType}, ${deviceId}", + "device-inactivity": "Available params: ${deviceName}, ${deviceLabel}, ${deviceType}, ${deviceId}", "entity-action": "Available params: ${actionType}, ${entityType}, ${entityName}, ${entityId}, ${originatorUserName}, ${originatorUserId}", "general": "Available params: ${recipientEmail}, ${recipientFirstName}, ${recipientLastName}" },