|
|
|
@ -51,6 +51,7 @@ import { EntityType } from '@shared/models/entity-type.models'; |
|
|
|
import { |
|
|
|
AddConnectorConfigData, |
|
|
|
ConnectorBaseConfig, |
|
|
|
ConnectorBaseInfo, |
|
|
|
ConnectorConfigurationModes, |
|
|
|
ConnectorType, |
|
|
|
GatewayConnector, |
|
|
|
@ -133,7 +134,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie |
|
|
|
|
|
|
|
private basicConfigSub: Subscription; |
|
|
|
|
|
|
|
private connectorUpdateInProgress = false; |
|
|
|
private jsonConfigSub: Subscription; |
|
|
|
|
|
|
|
private subscriptionOptions: WidgetSubscriptionOptions = { |
|
|
|
callbacks: { |
|
|
|
@ -211,18 +212,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
this.connectorForm.get('configurationJson').valueChanges.pipe( |
|
|
|
filter(() => !this.connectorUpdateInProgress), |
|
|
|
takeUntil(this.destroy$) |
|
|
|
).subscribe((config) => { |
|
|
|
const basicConfig = this.connectorForm.get('basicConfig'); |
|
|
|
const type = this.connectorForm.get('type').value; |
|
|
|
const mode = this.connectorForm.get('mode').value; |
|
|
|
if (!isEqual(config, basicConfig?.value) && this.allowBasicConfig.has(type) && mode === ConnectorConfigurationModes.ADVANCED) { |
|
|
|
this.connectorForm.get('basicConfig').patchValue(config, {emitEvent: false}); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
this.dataSource.sort = this.sort; |
|
|
|
this.dataSource.sortingDataAccessor = (data: AttributeData, sortHeaderId: string) => { |
|
|
|
switch (sortHeaderId) { |
|
|
|
@ -374,13 +363,26 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie |
|
|
|
const sharedData = data.value; |
|
|
|
const hasSameName = sharedData.name === connectorData.name; |
|
|
|
const hasEmptyConfig = isEqual(sharedData.configurationJson, {}) && hasSameName; |
|
|
|
const hasSameConfig =isEqual(sharedData.configurationJson, connectorData.configurationJson); |
|
|
|
const hasSameConfig = this.hasSameConfig(sharedData.configurationJson, connectorData.configurationJson); |
|
|
|
const isRecentlyCreated = sharedData.ts && sharedData.ts <= connectorData.ts; |
|
|
|
return hasSameName && isRecentlyCreated && (hasSameConfig || hasEmptyConfig); |
|
|
|
}); |
|
|
|
return sharedIndex !== -1; |
|
|
|
} |
|
|
|
|
|
|
|
private hasSameConfig(sharedDataConfigJson: ConnectorBaseInfo, connectorDataConfigJson: ConnectorBaseInfo): boolean { |
|
|
|
const { name, id, enableRemoteLogging, logLevel, ...sharedDataConfig } = sharedDataConfigJson; |
|
|
|
const { |
|
|
|
name: connectorName, |
|
|
|
id: connectorId, |
|
|
|
enableRemoteLogging: connectorEnableRemoteLogging, |
|
|
|
logLevel: connectorLogLevel, |
|
|
|
...connectorConfig |
|
|
|
} = connectorDataConfigJson; |
|
|
|
|
|
|
|
return isEqual(sharedDataConfig, connectorConfig); |
|
|
|
} |
|
|
|
|
|
|
|
private combineData(): void { |
|
|
|
this.dataSource.data = [...this.activeData, ...this.inactiveData, ...this.sharedAttributeData].filter((item, index, self) => |
|
|
|
index === self.findIndex((t) => t.key === item.key) |
|
|
|
@ -677,7 +679,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie |
|
|
|
this.basicConfigSub.unsubscribe(); |
|
|
|
} |
|
|
|
this.basicConfigSub = this.connectorForm.get('basicConfig').valueChanges.pipe( |
|
|
|
filter(() => !this.connectorUpdateInProgress), |
|
|
|
filter(() => !!this.initialConnector), |
|
|
|
takeUntil(this.destroy$) |
|
|
|
).subscribe((config) => { |
|
|
|
const configJson = this.connectorForm.get('configurationJson'); |
|
|
|
@ -690,6 +692,22 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private createJsonConfigWatcher(): void { |
|
|
|
if (this.jsonConfigSub) { |
|
|
|
this.jsonConfigSub.unsubscribe(); |
|
|
|
} |
|
|
|
this.jsonConfigSub = this.connectorForm.get('configurationJson').valueChanges.pipe( |
|
|
|
takeUntil(this.destroy$) |
|
|
|
).subscribe((config) => { |
|
|
|
const basicConfig = this.connectorForm.get('basicConfig'); |
|
|
|
const type = this.connectorForm.get('type').value; |
|
|
|
const mode = this.connectorForm.get('mode').value; |
|
|
|
if (!isEqual(config, basicConfig?.value) && this.allowBasicConfig.has(type) && mode === ConnectorConfigurationModes.ADVANCED) { |
|
|
|
this.connectorForm.get('basicConfig').patchValue(config, {emitEvent: false}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private confirmConnectorChange(): Observable<boolean> { |
|
|
|
if (this.initialConnector && this.connectorForm.dirty) { |
|
|
|
return this.dialogService.confirm( |
|
|
|
@ -728,22 +746,18 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie |
|
|
|
case ConnectorType.MQTT: |
|
|
|
case ConnectorType.OPCUA: |
|
|
|
case ConnectorType.MODBUS: |
|
|
|
this.connectorUpdateInProgress = true; |
|
|
|
if (connector.name !== this.connectorForm.value.name) { |
|
|
|
this.connectorForm.get('basicConfig').setValue({}, {emitEvent: false}); |
|
|
|
} |
|
|
|
|
|
|
|
this.connectorForm.get('mode').setValue(connector.mode || ConnectorConfigurationModes.BASIC, {emitEvent: false}); |
|
|
|
setTimeout(() => { |
|
|
|
this.connectorForm.patchValue({...connector, mode: connector.mode || ConnectorConfigurationModes.BASIC}); |
|
|
|
this.createBasicConfigWatcher(); |
|
|
|
this.connectorForm.patchValue(connector, {emitEvent: false}); |
|
|
|
this.connectorForm.markAsPristine(); |
|
|
|
this.connectorUpdateInProgress = false; |
|
|
|
this.createBasicConfigWatcher(); |
|
|
|
}); |
|
|
|
break; |
|
|
|
default: |
|
|
|
this.connectorForm.patchValue({...connector, mode: null}); |
|
|
|
this.connectorForm.markAsPristine(); |
|
|
|
} |
|
|
|
this.createJsonConfigWatcher(); |
|
|
|
} |
|
|
|
|
|
|
|
private setClientData(data: PageData<AttributeData>): void { |
|
|
|
|