method type switch fix and data keys crash fix
This commit is contained in:
		
							parent
							
								
									7df0459c16
								
							
						
					
					
						commit
						d9c5b5efc4
					
				@ -105,7 +105,7 @@ export class ModbusDataKeysPanelComponent implements OnInit, OnDestroy {
 | 
			
		||||
      type: [ModbusDataType.BYTES, [Validators.required]],
 | 
			
		||||
      address: [null, [Validators.required]],
 | 
			
		||||
      objectsCount: [1, [Validators.required]],
 | 
			
		||||
      functionCode: [this.getDefaultFunctionCodes()[0]],
 | 
			
		||||
      functionCode: [{ value: this.getDefaultFunctionCodes()[0], disabled: !this.withFunctionCode }, [Validators.required]],
 | 
			
		||||
      id: [{value: generateSecret(5), disabled: true}],
 | 
			
		||||
    });
 | 
			
		||||
    this.observeKeyDataType(dataKeyFormGroup);
 | 
			
		||||
@ -154,7 +154,7 @@ export class ModbusDataKeysPanelComponent implements OnInit, OnDestroy {
 | 
			
		||||
      type: [type, [Validators.required]],
 | 
			
		||||
      address: [address, [Validators.required]],
 | 
			
		||||
      objectsCount: [objectsCount, [Validators.required]],
 | 
			
		||||
      functionCode: [functionCode, [Validators.required]],
 | 
			
		||||
      functionCode: [{ value: functionCode, disabled: !this.withFunctionCode }, [Validators.required]],
 | 
			
		||||
      id: [{ value: generateSecret(5), disabled: true }],
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
@ -164,10 +164,18 @@ export class ModbusDataKeysPanelComponent implements OnInit, OnDestroy {
 | 
			
		||||
      if (!this.editableDataTypes.includes(dataType)) {
 | 
			
		||||
        keyFormGroup.get('objectsCount').patchValue(ModbusObjectCountByDataType[dataType], {emitEvent: false});
 | 
			
		||||
      }
 | 
			
		||||
      this.functionCodesMap.set(keyFormGroup.get('id').value, this.getFunctionCodes(dataType));
 | 
			
		||||
      this.updateFunctionCodes(keyFormGroup, dataType);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private updateFunctionCodes(keyFormGroup: FormGroup, dataType: ModbusDataType): void {
 | 
			
		||||
    const functionCodes = this.getFunctionCodes(dataType);
 | 
			
		||||
    this.functionCodesMap.set(keyFormGroup.get('id').value, functionCodes);
 | 
			
		||||
    if (!functionCodes.includes(keyFormGroup.get('functionCode').value)) {
 | 
			
		||||
      keyFormGroup.get('functionCode').patchValue(functionCodes[0], {emitEvent: false});
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private getFunctionCodes(dataType: ModbusDataType): number[] {
 | 
			
		||||
    if (this.keysType === ModbusValueKey.ATTRIBUTES_UPDATES) {
 | 
			
		||||
      return dataType === ModbusDataType.STRING
 | 
			
		||||
 | 
			
		||||
@ -175,7 +175,21 @@ export class ModbusSlaveConfigComponent implements ControlValueAccessor, Validat
 | 
			
		||||
  private observeTypeChange(): void {
 | 
			
		||||
    this.slaveConfigFormGroup.get('type').valueChanges
 | 
			
		||||
      .pipe(takeUntil(this.destroy$))
 | 
			
		||||
      .subscribe(() => this.updateFormEnableState(this.isSlaveEnabled));
 | 
			
		||||
      .subscribe(type => {
 | 
			
		||||
        this.updateFormEnableState(this.isSlaveEnabled);
 | 
			
		||||
        this.updateMethodType(type);
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private updateMethodType(type: ModbusProtocolType): void {
 | 
			
		||||
    if (this.slaveConfigFormGroup.get('method').value !== ModbusMethodType.RTU) {
 | 
			
		||||
      this.slaveConfigFormGroup.get('method').patchValue(
 | 
			
		||||
        type === ModbusProtocolType.Serial
 | 
			
		||||
          ? ModbusSerialMethodType.ASCII
 | 
			
		||||
          : ModbusMethodType.SOCKET,
 | 
			
		||||
        {emitEvent: false}
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private observeFormEnable(): void {
 | 
			
		||||
 | 
			
		||||
@ -201,7 +201,21 @@ export class ModbusSlaveDialogComponent extends DialogComponent<ModbusSlaveDialo
 | 
			
		||||
  private observeTypeChange(): void {
 | 
			
		||||
    this.slaveConfigFormGroup.get('type').valueChanges
 | 
			
		||||
      .pipe(takeUntil(this.destroy$))
 | 
			
		||||
      .subscribe(type => this.updateControlsEnabling(type));
 | 
			
		||||
      .subscribe(type => {
 | 
			
		||||
        this.updateControlsEnabling(type);
 | 
			
		||||
        this.updateMethodType(type);
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private updateMethodType(type: ModbusProtocolType): void {
 | 
			
		||||
    if (this.slaveConfigFormGroup.get('method').value !== ModbusMethodType.RTU) {
 | 
			
		||||
      this.slaveConfigFormGroup.get('method').patchValue(
 | 
			
		||||
        type === ModbusProtocolType.Serial
 | 
			
		||||
          ? ModbusSerialMethodType.ASCII
 | 
			
		||||
          : ModbusMethodType.SOCKET,
 | 
			
		||||
        {emitEvent: false}
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private updateControlsEnabling(type: ModbusProtocolType): void {
 | 
			
		||||
 | 
			
		||||
@ -36,8 +36,8 @@
 | 
			
		||||
  <div class="tb-form-row space-between tb-flex">
 | 
			
		||||
    <div class="fixed-title-width" translate>gateway.attributes</div>
 | 
			
		||||
    <div class="tb-flex ellipsis-chips-container">
 | 
			
		||||
      <mat-chip-listbox [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.ATTRIBUTES, register)" class="tb-flex">
 | 
			
		||||
        <mat-chip *ngFor="let attribute of getValueGroup(ModbusValueKey.ATTRIBUTES, register)">
 | 
			
		||||
      <mat-chip-listbox [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.ATTRIBUTES, register).value" class="tb-flex">
 | 
			
		||||
        <mat-chip *ngFor="let attribute of getValueGroup(ModbusValueKey.ATTRIBUTES, register).value">
 | 
			
		||||
          {{ attribute.tag }}
 | 
			
		||||
        </mat-chip>
 | 
			
		||||
        <mat-chip class="mat-mdc-chip ellipsis-chip">
 | 
			
		||||
@ -57,8 +57,8 @@
 | 
			
		||||
  <div class="tb-form-row space-between tb-flex">
 | 
			
		||||
    <div class="fixed-title-width" translate>gateway.timeseries</div>
 | 
			
		||||
    <div class="tb-flex ellipsis-chips-container">
 | 
			
		||||
      <mat-chip-listbox class="tb-flex" [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.TIMESERIES, register)">
 | 
			
		||||
        <mat-chip *ngFor="let telemetry of getValueGroup(ModbusValueKey.TIMESERIES, register)">
 | 
			
		||||
      <mat-chip-listbox class="tb-flex" [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.TIMESERIES, register).value">
 | 
			
		||||
        <mat-chip *ngFor="let telemetry of getValueGroup(ModbusValueKey.TIMESERIES, register).value">
 | 
			
		||||
          {{ telemetry.tag }}
 | 
			
		||||
        </mat-chip>
 | 
			
		||||
        <mat-chip class="mat-mdc-chip ellipsis-chip">
 | 
			
		||||
@ -78,8 +78,8 @@
 | 
			
		||||
  <div class="tb-form-row space-between tb-flex">
 | 
			
		||||
    <div class="fixed-title-width" translate>gateway.attribute-updates</div>
 | 
			
		||||
    <div class="tb-flex ellipsis-chips-container">
 | 
			
		||||
      <mat-chip-listbox [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.ATTRIBUTES_UPDATES, register)" class="tb-flex">
 | 
			
		||||
        <mat-chip *ngFor="let attributeUpdate of getValueGroup(ModbusValueKey.ATTRIBUTES_UPDATES, register)">
 | 
			
		||||
      <mat-chip-listbox [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.ATTRIBUTES_UPDATES, register).value" class="tb-flex">
 | 
			
		||||
        <mat-chip *ngFor="let attributeUpdate of getValueGroup(ModbusValueKey.ATTRIBUTES_UPDATES, register).value">
 | 
			
		||||
          {{ attributeUpdate.tag }}
 | 
			
		||||
        </mat-chip>
 | 
			
		||||
        <mat-chip class="mat-mdc-chip ellipsis-chip">
 | 
			
		||||
@ -99,8 +99,8 @@
 | 
			
		||||
  <div class="tb-form-row space-between tb-flex">
 | 
			
		||||
    <div class="fixed-title-width" translate>gateway.rpc-requests</div>
 | 
			
		||||
    <div class="tb-flex ellipsis-chips-container">
 | 
			
		||||
      <mat-chip-listbox [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.RPC_REQUESTS, register)" class="tb-flex">
 | 
			
		||||
        <mat-chip *ngFor="let rpcRequest of getValueGroup(ModbusValueKey.RPC_REQUESTS, register)">
 | 
			
		||||
      <mat-chip-listbox [tb-ellipsis-chip-list]="getValueGroup(ModbusValueKey.RPC_REQUESTS, register).value" class="tb-flex">
 | 
			
		||||
        <mat-chip *ngFor="let rpcRequest of getValueGroup(ModbusValueKey.RPC_REQUESTS, register).value">
 | 
			
		||||
          {{ rpcRequest.tag }}
 | 
			
		||||
        </mat-chip>
 | 
			
		||||
        <mat-chip class="mat-mdc-chip ellipsis-chip">
 | 
			
		||||
 | 
			
		||||
@ -161,7 +161,9 @@ export class ModbusValuesComponent implements ControlValueAccessor, Validator, O
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getValueGroup(valueKey: ModbusValueKey, register?: ModbusRegisterType): FormGroup {
 | 
			
		||||
    return register ? this.valuesFormGroup.get(register).get(valueKey).value : this.valuesFormGroup.get(valueKey).value;
 | 
			
		||||
    return register
 | 
			
		||||
      ? this.valuesFormGroup.get(register).get(valueKey) as FormGroup
 | 
			
		||||
      : this.valuesFormGroup.get(valueKey) as FormGroup;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  manageKeys($event: Event, matButton: MatButton, keysType: ModbusValueKey, register?: ModbusRegisterType): void {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user