Browse Source

Revert "refactoring"

This reverts commit eb39f36007.
pull/11319/head
mpetrov 2 years ago
parent
commit
9c0a33237a
  1. 10
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-basic-config/modbus-basic-config.component.html
  2. 32
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-basic-config/modbus-basic-config.component.ts
  3. 17
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-master-table/modbus-master-table.component.ts
  4. 10
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.html
  5. 29
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.ts

10
ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-basic-config/modbus-basic-config.component.html

@ -23,6 +23,16 @@
<tb-modbus-master-table formControlName="master"></tb-modbus-master-table> <tb-modbus-master-table formControlName="master"></tb-modbus-master-table>
</mat-tab> </mat-tab>
<mat-tab label="{{ 'gateway.server-config' | translate }}"> <mat-tab label="{{ 'gateway.server-config' | translate }}">
<div class="tb-form-panel no-border no-padding padding-top">
<div class="tb-form-hint tb-primary-fill tb-flex center">{{ 'gateway.hints.modbus-server' | translate }}</div>
<div class="tb-form-row" fxLayoutAlign="space-between center">
<mat-slide-toggle class="mat-slide" [formControl]="enableSlaveControl">
<mat-label>
{{ 'gateway.enable' | translate }}
</mat-label>
</mat-slide-toggle>
</div>
</div>
<tb-modbus-slave-config formControlName="slave"></tb-modbus-slave-config> <tb-modbus-slave-config formControlName="slave"></tb-modbus-slave-config>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>

32
ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-basic-config/modbus-basic-config.component.ts

@ -18,10 +18,10 @@ import { ChangeDetectionStrategy, Component, forwardRef, Input, OnDestroy, Templ
import { import {
ControlValueAccessor, ControlValueAccessor,
FormBuilder, FormBuilder,
FormControl,
FormGroup, FormGroup,
NG_VALIDATORS, NG_VALIDATORS,
NG_VALUE_ACCESSOR, NG_VALUE_ACCESSOR,
UntypedFormControl,
ValidationErrors, ValidationErrors,
Validator, Validator,
} from '@angular/forms'; } from '@angular/forms';
@ -68,6 +68,7 @@ export class ModbusBasicConfigComponent implements ControlValueAccessor, Validat
@Input() generalTabContent: TemplateRef<any>; @Input() generalTabContent: TemplateRef<any>;
basicFormGroup: FormGroup; basicFormGroup: FormGroup;
enableSlaveControl: FormControl<boolean>;
onChange: (value: ModbusBasicConfig) => void; onChange: (value: ModbusBasicConfig) => void;
onTouched: () => void; onTouched: () => void;
@ -79,6 +80,7 @@ export class ModbusBasicConfigComponent implements ControlValueAccessor, Validat
master: [], master: [],
slave: [], slave: [],
}); });
this.enableSlaveControl = new FormControl(false);
this.basicFormGroup.valueChanges this.basicFormGroup.valueChanges
.pipe(takeUntil(this.destroy$)) .pipe(takeUntil(this.destroy$))
@ -86,6 +88,14 @@ export class ModbusBasicConfigComponent implements ControlValueAccessor, Validat
this.onChange(value); this.onChange(value);
this.onTouched(); this.onTouched();
}); });
this.enableSlaveControl.valueChanges
.pipe(takeUntil(this.destroy$))
.subscribe(enable => {
this.updateSlaveEnabling(enable);
this.basicFormGroup.get('slave').updateValueAndValidity({emitEvent: !!this.onChange});
this.basicFormGroup.get('master').updateValueAndValidity({emitEvent: !!this.onChange});
});
} }
ngOnDestroy(): void { ngOnDestroy(): void {
@ -108,16 +118,20 @@ export class ModbusBasicConfigComponent implements ControlValueAccessor, Validat
}; };
this.basicFormGroup.setValue(editedBase, {emitEvent: false}); this.basicFormGroup.setValue(editedBase, {emitEvent: false});
this.enableSlaveControl.setValue(!!basicConfig.slave && !isEqual(basicConfig.slave, {}));
}
validate(): ValidationErrors | null {
return this.basicFormGroup.valid ? null : {
basicFormGroup: {valid: false}
};
} }
validate(basicFormControl: UntypedFormControl): ValidationErrors | null { private updateSlaveEnabling(isEnabled: boolean): void {
const { master, slave } = basicFormControl.value; if (isEnabled) {
const isEmpty = !master?.slaves?.length && (isEqual(slave, {}) || !slave); this.basicFormGroup.get('slave').enable({emitEvent: false});
if (!this.basicFormGroup.valid || isEmpty) { } else {
return { this.basicFormGroup.get('slave').disable({emitEvent: false});
basicFormGroup: {valid: false}
};
} }
return null;
} }
} }

17
ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-master-table/modbus-master-table.component.ts

@ -34,8 +34,12 @@ import {
ControlValueAccessor, ControlValueAccessor,
FormArray, FormArray,
FormBuilder, FormBuilder,
NG_VALIDATORS,
NG_VALUE_ACCESSOR, NG_VALUE_ACCESSOR,
UntypedFormControl,
UntypedFormGroup, UntypedFormGroup,
ValidationErrors,
Validator,
} from '@angular/forms'; } from '@angular/forms';
import { import {
ModbusMasterConfig, ModbusMasterConfig,
@ -59,11 +63,16 @@ import { TbTableDatasource } from '@shared/components/table/table-datasource.abs
useExisting: forwardRef(() => ModbusMasterTableComponent), useExisting: forwardRef(() => ModbusMasterTableComponent),
multi: true multi: true
}, },
{
provide: NG_VALIDATORS,
useExisting: forwardRef(() => ModbusMasterTableComponent),
multi: true
}
], ],
standalone: true, standalone: true,
imports: [CommonModule, SharedModule] imports: [CommonModule, SharedModule]
}) })
export class ModbusMasterTableComponent implements ControlValueAccessor, AfterViewInit, OnInit, OnDestroy { export class ModbusMasterTableComponent implements ControlValueAccessor, Validator, AfterViewInit, OnInit, OnDestroy {
@ViewChild('searchInput') searchInputField: ElementRef; @ViewChild('searchInput') searchInputField: ElementRef;
@ -130,6 +139,12 @@ export class ModbusMasterTableComponent implements ControlValueAccessor, AfterVi
this.pushDataAsFormArrays(master.slaves); this.pushDataAsFormArrays(master.slaves);
} }
validate(masterControl: UntypedFormControl): ValidationErrors | null {
return masterControl.parent.get('slave').enabled || this.slaves.controls.length ? null : {
slavesFormGroup: {valid: false}
};
}
enterFilterMode(): void { enterFilterMode(): void {
this.textSearchMode = true; this.textSearchMode = true;
this.cdr.detectChanges(); this.cdr.detectChanges();

10
ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.html

@ -16,16 +16,6 @@
--> -->
<div [formGroup]="slaveConfigFormGroup" class="slave-container"> <div [formGroup]="slaveConfigFormGroup" class="slave-container">
<div class="tb-form-panel no-border no-padding padding-top">
<div class="tb-form-hint tb-primary-fill tb-flex center">{{ 'gateway.hints.modbus-server' | translate }}</div>
<div class="tb-form-row" fxLayoutAlign="space-between center">
<mat-slide-toggle class="mat-slide" [formControl]="enableSlaveControl">
<mat-label>
{{ 'gateway.enable' | translate }}
</mat-label>
</mat-slide-toggle>
</div>
</div>
<div class="slave-content tb-form-panel no-border no-padding padding-top" > <div class="slave-content tb-form-panel no-border no-padding padding-top" >
<div class="tb-flex row space-between align-center no-gap fill-width"> <div class="tb-flex row space-between align-center no-gap fill-width">
<div class="fixed-title-width" translate>gateway.server-slave-config</div> <div class="fixed-title-width" translate>gateway.server-slave-config</div>

29
ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/modbus/modbus-slave-config/modbus-slave-config.component.ts

@ -77,7 +77,6 @@ import { isEqual } from '@core/utils';
export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validator, OnDestroy { export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validator, OnDestroy {
slaveConfigFormGroup: UntypedFormGroup; slaveConfigFormGroup: UntypedFormGroup;
enableSlaveControl: FormControl<boolean>;
showSecurityControl: FormControl<boolean>; showSecurityControl: FormControl<boolean>;
ModbusProtocolLabelsMap = ModbusProtocolLabelsMap; ModbusProtocolLabelsMap = ModbusProtocolLabelsMap;
ModbusMethodLabelsMap = ModbusMethodLabelsMap; ModbusMethodLabelsMap = ModbusMethodLabelsMap;
@ -90,6 +89,7 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
readonly ModbusProtocolType = ModbusProtocolType; readonly ModbusProtocolType = ModbusProtocolType;
readonly modbusBaudrates = ModbusBaudrates; readonly modbusBaudrates = ModbusBaudrates;
private isSlaveEnabled = false;
private readonly serialSpecificControlKeys = ['serialPort', 'baudrate']; private readonly serialSpecificControlKeys = ['serialPort', 'baudrate'];
private readonly tcpUdpSpecificControlKeys = ['port', 'security', 'host']; private readonly tcpUdpSpecificControlKeys = ['port', 'security', 'host'];
@ -100,7 +100,6 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
constructor(private fb: FormBuilder) { constructor(private fb: FormBuilder) {
this.showSecurityControl = this.fb.control(false); this.showSecurityControl = this.fb.control(false);
this.enableSlaveControl = this.fb.control(false);
this.slaveConfigFormGroup = this.fb.group({ this.slaveConfigFormGroup = this.fb.group({
type: [ModbusProtocolType.TCP], type: [ModbusProtocolType.TCP],
host: ['', [Validators.required, Validators.pattern(noLeadTrailSpacesRegex)]], host: ['', [Validators.required, Validators.pattern(noLeadTrailSpacesRegex)]],
@ -128,7 +127,6 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
this.observeValueChanges(); this.observeValueChanges();
this.observeTypeChange(); this.observeTypeChange();
this.observeShowSecurity(); this.observeShowSecurity();
this.observeFormEnable();
} }
get protocolType(): ModbusProtocolType { get protocolType(): ModbusProtocolType {
@ -155,11 +153,15 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
} }
writeValue(slaveConfig: ModbusSlave): void { writeValue(slaveConfig: ModbusSlave): void {
this.enableSlaveControl.patchValue(!!slaveConfig && !isEqual(slaveConfig, {}));
this.showSecurityControl.patchValue(!!slaveConfig.security && !isEqual(slaveConfig.security, {})); this.showSecurityControl.patchValue(!!slaveConfig.security && !isEqual(slaveConfig.security, {}));
this.updateSlaveConfig(slaveConfig); this.updateSlaveConfig(slaveConfig);
} }
setDisabledState(isDisabled: boolean): void {
this.isSlaveEnabled = !isDisabled;
this.updateFormEnableState();
}
private observeValueChanges(): void { private observeValueChanges(): void {
this.slaveConfigFormGroup.valueChanges.pipe( this.slaveConfigFormGroup.valueChanges.pipe(
takeUntil(this.destroy$) takeUntil(this.destroy$)
@ -173,20 +175,11 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
}); });
} }
private observeFormEnable(): void {
this.enableSlaveControl.valueChanges
.pipe(takeUntil(this.destroy$))
.subscribe(value => {
this.updateFormEnableState(value);
this.slaveConfigFormGroup.updateValueAndValidity({emitEvent: !!this.onChange});
});
}
private observeTypeChange(): void { private observeTypeChange(): void {
this.slaveConfigFormGroup.get('type').valueChanges this.slaveConfigFormGroup.get('type').valueChanges
.pipe(takeUntil(this.destroy$)) .pipe(takeUntil(this.destroy$))
.subscribe(type => { .subscribe(type => {
this.updateFormEnableState(this.enableSlaveControl.value); this.updateFormEnableState();
this.updateMethodType(type); this.updateMethodType(type);
}); });
} }
@ -202,8 +195,8 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
} }
} }
private updateFormEnableState(enabled: boolean): void { private updateFormEnableState(): void {
if (enabled) { if (this.isSlaveEnabled) {
this.slaveConfigFormGroup.enable({emitEvent: false}); this.slaveConfigFormGroup.enable({emitEvent: false});
this.showSecurityControl.enable({emitEvent: false}); this.showSecurityControl.enable({emitEvent: false});
} else { } else {
@ -221,7 +214,7 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
} }
private updateSecurityEnable(securityEnabled: boolean): void { private updateSecurityEnable(securityEnabled: boolean): void {
if (securityEnabled && this.enableSlaveControl.value && this.protocolType !== ModbusProtocolType.Serial) { if (securityEnabled && this.isSlaveEnabled && this.protocolType !== ModbusProtocolType.Serial) {
this.slaveConfigFormGroup.get('security').enable({emitEvent: false}); this.slaveConfigFormGroup.get('security').enable({emitEvent: false});
} else { } else {
this.slaveConfigFormGroup.get('security').disable({emitEvent: false}); this.slaveConfigFormGroup.get('security').disable({emitEvent: false});
@ -233,7 +226,7 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
const enableKeys = isSerial ? this.serialSpecificControlKeys : this.tcpUdpSpecificControlKeys; const enableKeys = isSerial ? this.serialSpecificControlKeys : this.tcpUdpSpecificControlKeys;
const disableKeys = isSerial ? this.tcpUdpSpecificControlKeys : this.serialSpecificControlKeys; const disableKeys = isSerial ? this.tcpUdpSpecificControlKeys : this.serialSpecificControlKeys;
if (this.enableSlaveControl.value) { if (this.isSlaveEnabled) {
enableKeys.forEach(key => this.slaveConfigFormGroup.get(key)?.enable({ emitEvent: false })); enableKeys.forEach(key => this.slaveConfigFormGroup.get(key)?.enable({ emitEvent: false }));
} }

Loading…
Cancel
Save