Browse Source

UI: Fix notification after change API

pull/7911/head
Vladyslav_Prykhodko 3 years ago
parent
commit
a39db0a1cf
  1. 2
      ui-ngx/src/app/modules/home/pages/notification-center/request-table/notification-request-error-dialog.component.ts
  2. 26
      ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.component.html
  3. 4
      ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.componet.ts
  4. 4
      ui-ngx/src/app/modules/home/pages/notification-center/rule-table/escalation-form.component.html
  5. 4
      ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.html
  6. 14
      ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.ts
  7. 44
      ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-configuration.ts
  8. 20
      ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-notification-dialog.component.html
  9. 12
      ui-ngx/src/app/shared/components/time/timeinterval.component.ts
  10. 14
      ui-ngx/src/app/shared/models/notification.models.ts
  11. 10
      ui-ngx/src/assets/locale/locale.constant-en_US.json

2
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<Not
errorStats: { [key in NotificationDeliveryMethod]: {[key in string]: string}};
notificationDeliveryMethodErrorTranslateMap = new Map<NotificationDeliveryMethod, string>([
[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'],

26
ui-ngx/src/app/modules/home/pages/notification-center/request-table/request-notification-dialog.component.html

@ -120,13 +120,13 @@
</form>
</mat-step>
<mat-step *ngIf="!notificationRequestForm.get('useTemplate').value &&
notificationRequestForm.get('template.configuration.deliveryMethodsTemplates.PUSH.enabled').value"
[stepControl]="pushTemplateForm">
notificationRequestForm.get('template.configuration.deliveryMethodsTemplates.WEB.enabled').value"
[stepControl]="webTemplateForm">
<ng-template matStepLabel>{{ 'notification.web-settings' | translate }}</ng-template>
<div class="tb-hint tb-hint-available-params">
{{ notificationTemplateTypeTranslateMap.get(notificationType.GENERAL).hint | translate }}
</div>
<form [formGroup]="pushTemplateForm">
<form [formGroup]="webTemplateForm">
<mat-form-field class="mat-block" floatLabel="always">
<mat-label translate>notification.subject</mat-label>
<input matInput formControlName="subject" [placeholder]="notificationRequestForm.get('template.configuration.notificationSubject').value">
@ -146,7 +146,7 @@
<mat-slide-toggle formControlName="enabled" class="toggle">
{{ 'icon.icon' | translate }}
</mat-slide-toggle>
<div *ngIf="pushTemplateForm.get('additionalConfig.icon.enabled').value"
<div *ngIf="webTemplateForm.get('additionalConfig.icon.enabled').value"
fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column">
<tb-material-icon-select formControlName="icon" required fxFlex>
</tb-material-icon-select>
@ -158,12 +158,12 @@
<mat-slide-toggle formControlName="enabled" class="toggle">
{{ 'notification.action-button' | translate }}
</mat-slide-toggle>
<div *ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.enabled').value">
<div *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.enabled').value">
<div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column">
<mat-form-field class="mat-block" fxFlex>
<mat-label translate>notification.button-text</mat-label>
<input matInput formControlName="text" required>
<mat-error *ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.text').hasError('required')">
<mat-error *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.text').hasError('required')">
{{ 'notification.button-text-required' | translate }}
</mat-error>
</mat-form-field>
@ -178,10 +178,10 @@
</mat-select>
</mat-form-field>
<mat-form-field fxFlex
*ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.LINK; else dashboardSelector">
*ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.LINK; else dashboardSelector">
<mat-label translate>notification.link</mat-label>
<input matInput formControlName="link" required>
<mat-error *ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.link').hasError('required')">
<mat-error *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.link').hasError('required')">
{{ 'notification.link-required' | translate }}
</mat-error>
</mat-form-field>
@ -192,13 +192,13 @@
formControlName="dashboardId">
</tb-dashboard-autocomplete>
<tb-dashboard-state-autocomplete fxFlex="35" fxFlex.xs="100"
[dashboardId]="pushTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').value"
[dashboardId]="webTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').value"
formControlName="dashboardState">
</tb-dashboard-state-autocomplete>
</ng-template>
</div>
<mat-slide-toggle formControlName="setEntityIdInState" class="toggle"
*ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.DASHBOARD">
*ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.DASHBOARD">
{{ 'notification.set-entity-from-notification' | translate }}
</mat-slide-toggle>
</div>
@ -270,13 +270,13 @@
strokeWidth="5" *ngIf="(isLoading$ | async) && !preview">
</mat-progress-spinner>
<div *ngIf="preview" style="padding-bottom: 16px">
<section class="preview-group notification" *ngIf="preview.processedTemplates.PUSH?.enabled">
<section class="preview-group notification" *ngIf="preview.processedTemplates.WEB?.enabled">
<div fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
<mat-icon class="tb-mat-18" svgIcon="mdi:bell-badge"></mat-icon>
<div class="group-title" translate>notification.delivery-method-type.push-preview</div>
<div class="group-title" translate>notification.delivery-method-type.web-preview</div>
</div>
<div class="web-preview">
<tb-notification preview [notification]="preview.processedTemplates.PUSH"></tb-notification>
<tb-notification preview [notification]="preview.processedTemplates.WEB"></tb-notification>
</div>
</section>
<section class="preview-group notification" *ngIf="preview.processedTemplates.EMAIL?.enabled">

4
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;
})

4
ui-ngx/src/app/modules/home/pages/notification-center/rule-table/escalation-form.component.html

@ -24,8 +24,8 @@
<tb-timeinterval
subscriptSizing="dynamic"
formControlName="delayInSec"
min="{{ 0 }}"
max="{{ 604800000 }}"
min="60000"
max="604800000"
disabledAdvanced></tb-timeinterval>
<span fxFlex class="escalation-notify" translate>notification.notify</span>
</div>

4
ui-ngx/src/app/modules/home/pages/notification-center/rule-table/rule-notification-dialog.component.html

@ -76,7 +76,7 @@
</section>
<ng-template #alarmTargesConfig>
<fieldset class="fields-group tb-hierarchy" formGroupName="recipientsConfig">
<legend translate>notification.hierarchy-of-receiving</legend>
<legend translate>notification.notification-chain</legend>
<tb-escalations-component formControlName="escalationTable"></tb-escalations-component>
</fieldset>
</ng-template>
@ -108,7 +108,7 @@
</mat-form-field>
</fieldset>
<fieldset class="fields-group tb-margin-2" formGroupName="clearRule">
<fieldset class="fields-group tb-margin-2" formGroupName="clearRule" *ngIf="countRecipientsChainConfig() > 1">
<legend translate>notification.clear-rule</legend>
<mat-form-field fxFlex class="mat-block" floatLabel="always">
<mat-label translate>alarm.alarm-status-list</mat-label>

14
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;
}
}

44
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<T, R = any> extends DialogComponent<T, R> implements OnDestroy{
templateNotificationForm: FormGroup;
pushTemplateForm: FormGroup;
webTemplateForm: FormGroup;
emailTemplateForm: FormGroup;
smsTemplateForm: FormGroup;
slackTemplateForm: FormGroup;
@ -87,10 +87,10 @@ export abstract class TemplateConfiguration<T, R = any> 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<T, R = any> 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<T, R = any> extends DialogComponent<
});
this.deliveryMethodFormsMap = new Map<NotificationDeliveryMethod, FormGroup>([
[NotificationDeliveryMethod.PUSH, this.pushTemplateForm],
[NotificationDeliveryMethod.WEB, this.webTemplateForm],
[NotificationDeliveryMethod.EMAIL, this.emailTemplateForm],
[NotificationDeliveryMethod.SMS, this.smsTemplateForm],
[NotificationDeliveryMethod.SLACK, this.slackTemplateForm]

20
ui-ngx/src/app/modules/home/pages/notification-center/template-table/template-notification-dialog.component.html

@ -84,13 +84,13 @@
</section>
</form>
</mat-step>
<mat-step *ngIf="templateNotificationForm.get('configuration.deliveryMethodsTemplates.PUSH.enabled').value"
[stepControl]="pushTemplateForm">
<mat-step *ngIf="templateNotificationForm.get('configuration.deliveryMethodsTemplates.WEB.enabled').value"
[stepControl]="webTemplateForm">
<ng-template matStepLabel>{{ 'notification.web-settings' | translate }}</ng-template>
<div class="tb-hint tb-hint-available-params">
{{ notificationTemplateTypeTranslateMap.get(templateNotificationForm.get('notificationType').value).hint | translate }}
</div>
<form [formGroup]="pushTemplateForm">
<form [formGroup]="webTemplateForm">
<mat-form-field class="mat-block" floatLabel="always">
<mat-label translate>notification.subject</mat-label>
<input matInput formControlName="subject" [placeholder]="templateNotificationForm.get('configuration.notificationSubject').value">
@ -110,7 +110,7 @@
<mat-slide-toggle formControlName="enabled" class="toggle">
{{ 'icon.icon' | translate }}
</mat-slide-toggle>
<div *ngIf="pushTemplateForm.get('additionalConfig.icon.enabled').value"
<div *ngIf="webTemplateForm.get('additionalConfig.icon.enabled').value"
fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column">
<tb-material-icon-select formControlName="icon" required fxFlex>
</tb-material-icon-select>
@ -122,12 +122,12 @@
<mat-slide-toggle formControlName="enabled" class="toggle">
{{ 'notification.action-button' | translate }}
</mat-slide-toggle>
<div *ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.enabled').value">
<div *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.enabled').value">
<div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column">
<mat-form-field class="mat-block" fxFlex>
<mat-label translate>notification.button-text</mat-label>
<input matInput formControlName="text" required>
<mat-error *ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.text').hasError('required')">
<mat-error *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.text').hasError('required')">
{{ 'notification.button-text-required' | translate }}
</mat-error>
</mat-form-field>
@ -142,10 +142,10 @@
</mat-select>
</mat-form-field>
<mat-form-field fxFlex
*ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.LINK; else dashboardSelector">
*ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.LINK; else dashboardSelector">
<mat-label translate>notification.link</mat-label>
<input matInput formControlName="link" required>
<mat-error *ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.link').hasError('required')">
<mat-error *ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.link').hasError('required')">
{{ 'notification.link-required' | translate }}
</mat-error>
</mat-form-field>
@ -156,13 +156,13 @@
formControlName="dashboardId">
</tb-dashboard-autocomplete>
<tb-dashboard-state-autocomplete fxFlex="35" fxFlex.xs="100"
[dashboardId]="pushTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').value"
[dashboardId]="webTemplateForm.get('additionalConfig.actionButtonConfig.dashboardId').value"
formControlName="dashboardState">
</tb-dashboard-state-autocomplete>
</ng-template>
</div>
<mat-slide-toggle formControlName="setEntityIdInState" class="toggle"
*ngIf="pushTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.DASHBOARD">
*ngIf="webTemplateForm.get('additionalConfig.actionButtonConfig.linkType').value === actionButtonLinkType.DASHBOARD">
{{ 'notification.set-entity-from-notification' | translate }}
</mat-slide-toggle>
</div>

12
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();
}

14
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<PushDeliveryMethodNotificationTemplate & EmailDeliveryMethodNotificationTemplate & SlackDeliveryMethodNotificationTemplate>{
Partial<WebDeliveryMethodNotificationTemplate & EmailDeliveryMethodNotificationTemplate & SlackDeliveryMethodNotificationTemplate>{
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, string>([
[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']

10
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}"
},

Loading…
Cancel
Save