Browse Source

Added gateway connectors synced save adjustments

pull/11350/head
mpetrov 2 years ago
parent
commit
779cfea5ca
  1. 18
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/mqtt-basic-config/mqtt-basic-config.component.ts
  2. 33
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts
  3. 2
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts

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

@ -84,7 +84,7 @@ export class MqttBasicConfigComponent implements ControlValueAccessor, Validator
mappingTypes = MappingType; mappingTypes = MappingType;
basicFormGroup: FormGroup; basicFormGroup: FormGroup;
private onChange: (value: string) => void; private onChange: (value: MQTTBasicConfig) => void;
private onTouched: () => void; private onTouched: () => void;
private destroy$ = new Subject<void>(); private destroy$ = new Subject<void>();
@ -100,7 +100,7 @@ export class MqttBasicConfigComponent implements ControlValueAccessor, Validator
this.basicFormGroup.valueChanges this.basicFormGroup.valueChanges
.pipe(takeUntil(this.destroy$)) .pipe(takeUntil(this.destroy$))
.subscribe(value => { .subscribe(value => {
this.onChange(value); this.onChange(this.getMappedMQTTConfig(value));
this.onTouched(); this.onTouched();
}); });
} }
@ -110,7 +110,7 @@ export class MqttBasicConfigComponent implements ControlValueAccessor, Validator
this.destroy$.complete(); this.destroy$.complete();
} }
registerOnChange(fn: (value: string) => void): void { registerOnChange(fn: (value: MQTTBasicConfig) => void): void {
this.onChange = fn; this.onChange = fn;
} }
@ -135,6 +135,18 @@ export class MqttBasicConfigComponent implements ControlValueAccessor, Validator
this.basicFormGroup.setValue(editedBase, {emitEvent: false}); this.basicFormGroup.setValue(editedBase, {emitEvent: false});
} }
private getMappedMQTTConfig(basicConfig: MQTTBasicConfig): MQTTBasicConfig {
const { broker, workers, dataMapping, requestsMapping } = basicConfig || {};
return workers ? {
dataMapping,
requestsMapping,
broker: {
...broker,
...workers,
}
} : basicConfig;
}
validate(): ValidationErrors | null { validate(): ValidationErrors | null {
return this.basicFormGroup.valid ? null : { return this.basicFormGroup.valid ? null : {
basicFormGroup: {valid: false} basicFormGroup: {valid: false}

33
ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts

@ -60,7 +60,7 @@ import {
} from './gateway-widget.models'; } from './gateway-widget.models';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { AddConnectorDialogComponent } from '@home/components/widget/lib/gateway/dialog/add-connector-dialog.component'; import { AddConnectorDialogComponent } from '@home/components/widget/lib/gateway/dialog/add-connector-dialog.component';
import { debounceTime, take, takeUntil, tap } from 'rxjs/operators'; import { debounceTime, filter, take, takeUntil, tap } from 'rxjs/operators';
import { ErrorStateMatcher } from '@angular/material/core'; import { ErrorStateMatcher } from '@angular/material/core';
import { PageData } from '@shared/models/page/page-data'; import { PageData } from '@shared/models/page/page-data';
@ -133,6 +133,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
private basicConfigSub: Subscription; private basicConfigSub: Subscription;
private connectorUpdateInProgress = false;
private subscriptionOptions: WidgetSubscriptionOptions = { private subscriptionOptions: WidgetSubscriptionOptions = {
callbacks: { callbacks: {
onDataUpdated: () => this.ctx.ngZone.run(() => { onDataUpdated: () => this.ctx.ngZone.run(() => {
@ -210,6 +212,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
}); });
this.connectorForm.get('configurationJson').valueChanges.pipe( this.connectorForm.get('configurationJson').valueChanges.pipe(
filter(() => !this.connectorUpdateInProgress),
takeUntil(this.destroy$) takeUntil(this.destroy$)
).subscribe((config) => { ).subscribe((config) => {
const basicConfig = this.connectorForm.get('basicConfig'); const basicConfig = this.connectorForm.get('basicConfig');
@ -275,7 +278,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
} }
saveConnector(): void { saveConnector(): void {
const value = this.connectorForm.get('type').value === ConnectorType.MQTT ? this.getMappedMQTTValue() : this.connectorForm.value; const value = { ...this.connectorForm.value };
value.configuration = camelCase(value.name) + '.json'; value.configuration = camelCase(value.name) + '.json';
delete value.basicConfig; delete value.basicConfig;
if (value.type !== ConnectorType.GRPC) { if (value.type !== ConnectorType.GRPC) {
@ -336,20 +339,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
}); });
} }
private getMappedMQTTValue(): GatewayConnector {
const value = this.connectorForm.value;
return {
...value,
configurationJson: {
...value.configurationJson,
broker: {
...value.configurationJson.broker,
...value.configurationJson.workers,
}
}
};
}
private updateData(reload: boolean = false): void { private updateData(reload: boolean = false): void {
this.pageLink.sortOrder.property = this.sort.active; this.pageLink.sortOrder.property = this.sort.active;
this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()];
@ -383,7 +372,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
} }
const sharedIndex = this.sharedAttributeData.findIndex(data => { const sharedIndex = this.sharedAttributeData.findIndex(data => {
const sharedData = data.value; const sharedData = data.value;
return sharedData.name === connectorData.name && sharedData.ts && sharedData.ts <= connectorData.ts; return sharedData.name === connectorData.name
&& sharedData.ts && sharedData.ts <= connectorData.ts
&& isEqual(sharedData.value, connectorData.value);
}); });
return sharedIndex !== -1; return sharedIndex !== -1;
} }
@ -684,6 +675,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
this.basicConfigSub.unsubscribe(); this.basicConfigSub.unsubscribe();
} }
this.basicConfigSub = this.connectorForm.get('basicConfig').valueChanges.pipe( this.basicConfigSub = this.connectorForm.get('basicConfig').valueChanges.pipe(
filter(() => !this.connectorUpdateInProgress),
takeUntil(this.destroy$) takeUntil(this.destroy$)
).subscribe((config) => { ).subscribe((config) => {
const configJson = this.connectorForm.get('configurationJson'); const configJson = this.connectorForm.get('configurationJson');
@ -734,13 +726,16 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
case ConnectorType.MQTT: case ConnectorType.MQTT:
case ConnectorType.OPCUA: case ConnectorType.OPCUA:
case ConnectorType.MODBUS: case ConnectorType.MODBUS:
this.connectorForm.get('type').patchValue(connector.type, {emitValue: false, onlySelf: true}); this.connectorUpdateInProgress = true;
this.connectorForm.get('basicConfig').setValue({}, {emitEvent: false}); if (connector.name !== this.connectorForm.value.name) {
this.connectorForm.get('basicConfig').setValue({}, {emitEvent: false});
}
setTimeout(() => { setTimeout(() => {
this.connectorForm.patchValue({...connector, mode: connector.mode || ConnectorConfigurationModes.BASIC}); this.connectorForm.patchValue({...connector, mode: connector.mode || ConnectorConfigurationModes.BASIC});
this.createBasicConfigWatcher(); this.createBasicConfigWatcher();
this.connectorForm.markAsPristine(); this.connectorForm.markAsPristine();
this.connectorUpdateInProgress = false;
}); });
break; break;
default: default:

2
ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts

@ -182,7 +182,7 @@ export interface MQTTBasicConfig {
dataMapping: ConverterConnectorMapping[]; dataMapping: ConverterConnectorMapping[];
requestsMapping: Record<RequestType, RequestMappingData> | RequestMappingData[]; requestsMapping: Record<RequestType, RequestMappingData> | RequestMappingData[];
broker: BrokerConfig; broker: BrokerConfig;
workers: WorkersConfig; workers?: WorkersConfig;
} }
export interface OPCBasicConfig { export interface OPCBasicConfig {

Loading…
Cancel
Save