UI: gateway connectors config update improvements

This commit is contained in:
Dmitriymush 2024-04-26 16:47:50 +03:00
parent cd070a6b61
commit e1d1f6c7f8
2 changed files with 44 additions and 27 deletions

View File

@ -136,7 +136,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
private subscriptionOptions: WidgetSubscriptionOptions = {
callbacks: {
onDataUpdated: () => this.ctx.ngZone.run(() => {
onDataUpdated: (data) => this.ctx.ngZone.run(() => {
this.onDataUpdated();
}),
onDataUpdateError: (subscription, e) => this.ctx.ngZone.run(() => {
@ -363,6 +363,17 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key));
this.combineData();
this.generateSubscription();
if (this.initialConnector) {
const clientConnectorData = data.data.find(attr => attr.key === this.initialConnector.name);
if (clientConnectorData) {
clientConnectorData.value = typeof clientConnectorData.value === 'string' ?
JSON.parse(clientConnectorData.value) : clientConnectorData.value;
if (this.isConnectorSynced(clientConnectorData) && clientConnectorData.value.configurationJson) {
this.setFormValue(clientConnectorData.value);
}
}
}
});
this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => {
this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key));
@ -429,30 +440,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
if (connector?.name !== this.initialConnector?.name) {
this.confirmConnectorChange().subscribe((result) => {
if (result) {
if (this.connectorForm.disabled) {
this.connectorForm.enable();
}
if (!connector.configuration) {
connector.configuration = '';
}
if (!connector.key) {
connector.key = 'auto';
}
if (!connector.configurationJson) {
connector.configurationJson = {};
}
connector.basicConfig = connector.configurationJson;
this.initialConnector = connector;
if (connector.type === ConnectorType.MQTT) {
this.addMQTTConfigControls();
} else {
this.connectorForm.setControl('basicConfig', this.fb.group({}), {emitEvent: false});
}
this.connectorForm.patchValue(connector, {emitEvent: false});
this.connectorForm.markAsPristine();
this.setFormValue(connector);
}
});
}
@ -690,7 +678,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
type === ConnectorType.MQTT &&
mode === ConnectorConfigurationModes.BASIC
) {
this.connectorForm.get('configurationJson').patchValue(config, {emitEvent: false});
const newConfig = { ...configJson.value, ...config };
this.connectorForm.get('configurationJson').patchValue(newConfig, {emitEvent: false});
}
});
}
@ -707,4 +696,31 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie
}
return of(true);
}
private setFormValue(connector: GatewayConnector): void {
if (this.connectorForm.disabled) {
this.connectorForm.enable();
}
if (!connector.configuration) {
connector.configuration = '';
}
if (!connector.key) {
connector.key = 'auto';
}
if (!connector.configurationJson) {
connector.configurationJson = {};
}
connector.basicConfig = connector.configurationJson;
this.initialConnector = connector;
if (connector.type === ConnectorType.MQTT) {
this.addMQTTConfigControls();
} else {
this.connectorForm.setControl('basicConfig', this.fb.group({}), {emitEvent: false});
}
this.connectorForm.patchValue(connector, {emitEvent: false});
this.connectorForm.markAsPristine();
}
}

View File

@ -113,7 +113,8 @@ export interface GatewayConnector {
name: string;
type: ConnectorType;
configuration?: string;
configurationJson: string;
configurationJson: string | {[key: string]: any};
basicConfig?: string | {[key: string]: any};
logLevel: string;
key?: string;
class?: string;