diff --git a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html index 863b4960d7..80d3e300b0 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html @@ -19,46 +19,60 @@
device-profile.mqtt-device-topic-filters -
device-profile.support-level-wildcards
-
- - device-profile.telemetry-topic-filter - - - {{ 'device-profile.telemetry-topic-filter-required' | translate}} - - - - device-profile.rpc-request-topic-filter - - - {{ 'device-profile.rpc-request-topic-filter-required' | translate}} - - -
-
- - device-profile.attributes-topic-filter - - - {{ 'device-profile.attributes-topic-filter-required' | translate}} - - - - device-profile.rpc-response-topic-filter - - - {{ 'device-profile.rpc-response-topic-filter-required' | translate}} - - +
+
+
+ + device-profile.telemetry-topic-filter + + + {{ 'device-profile.telemetry-topic-filter-required' | translate}} + + + {{ 'device-profile.not-valid-pattern-topic-filter' | translate}} + + + + device-profile.rpc-request-topic-filter + + + {{ 'device-profile.rpc-request-topic-filter-required' | translate}} + + + {{ 'device-profile.not-valid-pattern-topic-filter' | translate}} + + +
+
+ + device-profile.attributes-topic-filter + + + {{ 'device-profile.attributes-topic-filter-required' | translate}} + + + {{ 'device-profile.not-valid-pattern-topic-filter' | translate}} + + + + device-profile.rpc-response-topic-filter + + + {{ 'device-profile.rpc-response-topic-filter-required' | translate}} + + + {{ 'device-profile.not-valid-pattern-topic-filter' | translate}} + + +
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts index 1b5061b44c..cd3052c2c9 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts @@ -40,6 +40,9 @@ export class MqttDeviceProfileTransportConfigurationComponent implements Control mqttDeviceProfileTransportConfigurationFormGroup: FormGroup; private requiredValue: boolean; + + private MQTTTopicPattern = new RegExp('^((?![#+]).)*$|^(.*[^#]\/|^)#$|^(.*\/|^)\+(\/.*|$)$'); + get required(): boolean { return this.requiredValue; } @@ -67,10 +70,10 @@ export class MqttDeviceProfileTransportConfigurationComponent implements Control ngOnInit() { this.mqttDeviceProfileTransportConfigurationFormGroup = this.fb.group({ configuration: this.fb.group({ - deviceAttributesTopic: [null, Validators.required], - deviceTelemetryTopic: [null, Validators.required], - deviceRpcRequestTopic: [null, Validators.required], - deviceRpcResponseTopic: [null, Validators.required] + deviceAttributesTopic: [null, [Validators.required, Validators.pattern(this.MQTTTopicPattern)]], + deviceTelemetryTopic: [null, [Validators.required, Validators.pattern(this.MQTTTopicPattern)]], + deviceRpcRequestTopic: [null, [Validators.required, Validators.pattern(this.MQTTTopicPattern)]], + deviceRpcResponseTopic: [null, [Validators.required, Validators.pattern(this.MQTTTopicPattern)]] }) }); this.mqttDeviceProfileTransportConfigurationFormGroup.valueChanges.subscribe(() => { 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 3c5550ee8f..8ba8a074a6 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -799,7 +799,8 @@ "attributes-topic-filter": "Attributes topic filter", "attributes-topic-filter-required": "Attributes topic filter is required.", "rpc-response-topic-filter": "RPC response topic filter", - "rpc-response-topic-filter-required": "RPC response topic filter is required." + "rpc-response-topic-filter-required": "RPC response topic filter is required.", + "not-valid-pattern-topic-filter": "Not valid pattern topic filter" }, "dialog": { "close": "Close dialog"