diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-data-keys-panel/modbus-data-keys-panel.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-data-keys-panel/modbus-data-keys-panel.component.ts
index 1a696dd75f..d128e3c246 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-data-keys-panel/modbus-data-keys-panel.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-data-keys-panel/modbus-data-keys-panel.component.ts
@@ -30,6 +30,7 @@ import { CommonModule } from '@angular/common';
import { SharedModule } from '@shared/shared.module';
import { GatewayHelpLinkPipe } from '@home/pipes/gateway-help-link.pipe';
import { generateSecret } from '@core/utils';
+import { coerceBoolean } from '@shared/decorators/coercion';
@Component({
selector: 'tb-modbus-data-keys-panel',
@@ -44,6 +45,7 @@ import { generateSecret } from '@core/utils';
})
export class ModbusDataKeysPanelComponent implements OnInit {
+ @coerceBoolean()
@Input() isMaster = false;
@Input() panelTitle: string;
@Input() addKeyTitle: string;
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-security-config/modbus-security-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-security-config/modbus-security-config.component.ts
index 7efcf095ee..caaff5ea40 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-security-config/modbus-security-config.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-security-config/modbus-security-config.component.ts
@@ -36,6 +36,7 @@ import { takeUntil } from 'rxjs/operators';
import {
SecurityConfigComponent
} from '@home/components/widget/lib/gateway/connectors-configuration/security-config/security-config.component';
+import { coerceBoolean } from '@shared/decorators/coercion';
@Component({
selector: 'tb-modbus-security-config',
@@ -62,8 +63,10 @@ import {
})
export class ModbusSecurityConfigComponent implements ControlValueAccessor, Validator, OnChanges, OnDestroy {
+ @coerceBoolean()
@Input() isMaster = false;
- @Input() disabled = false;
+
+ disabled = false;
securityConfigFormGroup: UntypedFormGroup;
@@ -113,8 +116,17 @@ export class ModbusSecurityConfigComponent implements ControlValueAccessor, Vali
this.onTouched = fn;
}
+ setDisabledState(isDisabled: boolean): void {
+ this.disabled = isDisabled;
+ if (this.disabled) {
+ this.securityConfigFormGroup.disable({emitEvent: false});
+ } else {
+ this.securityConfigFormGroup.enable({emitEvent: false});
+ }
+ }
+
validate(): ValidationErrors | null {
- return this.securityConfigFormGroup.valid || this.disabled ? null : {
+ return this.securityConfigFormGroup.valid ? null : {
securityConfigFormGroup: { valid: false }
};
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.html
index 41a7d2aee7..0ccbc734bf 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.html
@@ -204,7 +204,7 @@
-
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.ts
index 13a4eefb8c..1d34914b8b 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.ts
@@ -135,12 +135,13 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
value.port = value.serialPort;
delete value.serialPort;
}
- this.onChange(this.slaveConfigFormGroup.get('sendDataToThingsBoard').value ? value : {} as SlaveConfig);
+ this.onChange(value);
this.onTouched();
});
this.observeTypeChange();
this.observeFormEnable();
+ this.observeShowSecurity();
}
ngOnDestroy(): void {
@@ -194,6 +195,16 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
this.updateEnablingByProtocol(this.slaveConfigFormGroup.get('type').value);
}
+ private observeShowSecurity(): void {
+ this.showSecurityControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
+ if (value && this.slaveConfigFormGroup.get('sendDataToThingsBoard').value) {
+ this.slaveConfigFormGroup.get('security').enable({emitEvent: false});
+ } else {
+ this.slaveConfigFormGroup.get('security').disable({emitEvent: false});
+ }
+ });
+ }
+
private updateEnablingByProtocol(type: ModbusProtocolType): void {
if (type === ModbusProtocolType.Serial) {
if (this.slaveConfigFormGroup.get('sendDataToThingsBoard').value) {
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-values/modbus-values.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-values/modbus-values.component.ts
index f3e9a28bce..fee7e72616 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-values/modbus-values.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-values/modbus-values.component.ts
@@ -54,6 +54,7 @@ import { EllipsisChipListDirective } from '@shared/directives/ellipsis-chip-list
import { MatButton } from '@angular/material/button';
import { TbPopoverService } from '@shared/components/popover.service';
import { ModbusDataKeysPanelComponent } from '../modbus-data-keys-panel/modbus-data-keys-panel.component';
+import { coerceBoolean } from '@shared/decorators/coercion';
@Component({
selector: 'tb-modbus-values',
@@ -88,9 +89,10 @@ import { ModbusDataKeysPanelComponent } from '../modbus-data-keys-panel/modbus-d
export class ModbusValuesComponent implements ControlValueAccessor, Validator, OnChanges, OnDestroy {
+ @coerceBoolean()
@Input() singleMode = false;
- @Input() disabled = false;
+ disabled = false;
modbusRegisterTypes: ModbusRegisterType[] = Object.values(ModbusRegisterType);
modbusValueKeys = Object.values(ModbusValueKey);
ModbusValuesTranslationsMap = ModbusRegisterTranslationsMap;
@@ -159,6 +161,11 @@ export class ModbusValuesComponent implements ControlValueAccessor, Validator, O
};
}
+ setDisabledState(isDisabled: boolean): void {
+ this.disabled = isDisabled;
+ this.cdr.markForCheck();
+ }
+
getValueGroup(valueKey: ModbusValueKey, register?: ModbusRegisterType) {
return register ? this.valuesFormGroup.get(register).get(valueKey).value : this.valuesFormGroup.get(valueKey).value;
}