Commit abfb6893ba7dd67abba3e42f2c3f4f47b3b4a6d2
1 parent
10e6b9a4
UI: Added unique alarm type validation in alarm rule
Showing
4 changed files
with
22 additions
and
5 deletions
@@ -41,6 +41,9 @@ | @@ -41,6 +41,9 @@ | ||
41 | <mat-error *ngIf="alarmFormGroup.get('alarmType').hasError('required')"> | 41 | <mat-error *ngIf="alarmFormGroup.get('alarmType').hasError('required')"> |
42 | {{ 'device-profile.alarm-type-required' | translate }} | 42 | {{ 'device-profile.alarm-type-required' | translate }} |
43 | </mat-error> | 43 | </mat-error> |
44 | + <mat-error *ngIf="alarmFormGroup.get('alarmType').hasError('unique')"> | ||
45 | + {{ 'device-profile.alarm-type-unique' | translate }} | ||
46 | + </mat-error> | ||
44 | <mat-hint *ngIf="!disabled" | 47 | <mat-hint *ngIf="!disabled" |
45 | innerHTML="{{ 'device-profile.alarm-type-pattern-hint' | translate }}"></mat-hint> | 48 | innerHTML="{{ 'device-profile.alarm-type-pattern-hint' | translate }}"></mat-hint> |
46 | </mat-form-field> | 49 | </mat-form-field> |
@@ -133,6 +133,19 @@ export class DeviceProfileAlarmComponent implements ControlValueAccessor, OnInit | @@ -133,6 +133,19 @@ export class DeviceProfileAlarmComponent implements ControlValueAccessor, OnInit | ||
133 | } | 133 | } |
134 | 134 | ||
135 | public validate(c: FormControl) { | 135 | public validate(c: FormControl) { |
136 | + if (c.parent) { | ||
137 | + const alarmType = c.value.alarmType; | ||
138 | + const profileAlarmsType = []; | ||
139 | + c.parent.getRawValue().forEach((alarm: DeviceProfileAlarm) => { | ||
140 | + profileAlarmsType.push(alarm.alarmType); | ||
141 | + } | ||
142 | + ); | ||
143 | + if (profileAlarmsType.filter(profileAlarmType => profileAlarmType === alarmType).length > 1) { | ||
144 | + this.alarmFormGroup.get('alarmType').setErrors({ | ||
145 | + unique: true | ||
146 | + }); | ||
147 | + } | ||
148 | + } | ||
136 | return (this.alarmFormGroup.valid) ? null : { | 149 | return (this.alarmFormGroup.valid) ? null : { |
137 | alarm: { | 150 | alarm: { |
138 | valid: false, | 151 | valid: false, |
@@ -38,7 +38,7 @@ import { | @@ -38,7 +38,7 @@ import { | ||
38 | } from '@shared/models/device.models'; | 38 | } from '@shared/models/device.models'; |
39 | import { EntityType } from '@shared/models/entity-type.models'; | 39 | import { EntityType } from '@shared/models/entity-type.models'; |
40 | import { RuleChainId } from '@shared/models/id/rule-chain-id'; | 40 | import { RuleChainId } from '@shared/models/id/rule-chain-id'; |
41 | -import {ServiceType} from "@shared/models/queue.models"; | 41 | +import { ServiceType } from '@shared/models/queue.models'; |
42 | 42 | ||
43 | @Component({ | 43 | @Component({ |
44 | selector: 'tb-device-profile', | 44 | selector: 'tb-device-profile', |
@@ -176,10 +176,10 @@ export class DeviceProfileComponent extends EntityComponent<DeviceProfile> { | @@ -176,10 +176,10 @@ export class DeviceProfileComponent extends EntityComponent<DeviceProfile> { | ||
176 | transportConfiguration: entity.profileData?.transportConfiguration, | 176 | transportConfiguration: entity.profileData?.transportConfiguration, |
177 | alarms: entity.profileData?.alarms, | 177 | alarms: entity.profileData?.alarms, |
178 | provisionConfiguration: deviceProvisionConfiguration | 178 | provisionConfiguration: deviceProvisionConfiguration |
179 | - }}); | ||
180 | - this.entityForm.patchValue({defaultRuleChainId: entity.defaultRuleChainId ? entity.defaultRuleChainId.id : null}); | ||
181 | - this.entityForm.patchValue({defaultQueueName: entity.defaultQueueName}); | ||
182 | - this.entityForm.patchValue({description: entity.description}); | 179 | + }}, {emitEvent: false}); |
180 | + this.entityForm.patchValue({defaultRuleChainId: entity.defaultRuleChainId ? entity.defaultRuleChainId.id : null}, {emitEvent: false}); | ||
181 | + this.entityForm.patchValue({defaultQueueName: entity.defaultQueueName}, {emitEvent: false}); | ||
182 | + this.entityForm.patchValue({description: entity.description}, {emitEvent: false}); | ||
183 | } | 183 | } |
184 | 184 | ||
185 | prepareFormValue(formValue: any): any { | 185 | prepareFormValue(formValue: any): any { |
@@ -909,6 +909,7 @@ | @@ -909,6 +909,7 @@ | ||
909 | "edit-alarm-rule": "Edit alarm rule", | 909 | "edit-alarm-rule": "Edit alarm rule", |
910 | "alarm-type": "Alarm type", | 910 | "alarm-type": "Alarm type", |
911 | "alarm-type-required": "Alarm type is required.", | 911 | "alarm-type-required": "Alarm type is required.", |
912 | + "alarm-type-unique": "Alarm type needs to be unique.", | ||
912 | "alarm-type-pattern-hint": "Alarm type pattern, use <code>${metaKeyName}</code> to substitute variables from metadata", | 913 | "alarm-type-pattern-hint": "Alarm type pattern, use <code>${metaKeyName}</code> to substitute variables from metadata", |
913 | "create-alarm-pattern": "Create <b>{{alarmType}}</b> alarm", | 914 | "create-alarm-pattern": "Create <b>{{alarmType}}</b> alarm", |
914 | "create-alarm-rules": "Create alarm rules", | 915 | "create-alarm-rules": "Create alarm rules", |