diff --git a/webapp/packages/core-blocks/src/PropertiesTable/IProperty.ts b/webapp/packages/core-blocks/src/PropertiesTable/IProperty.ts
index 79076fdc00..e4dd204865 100644
--- a/webapp/packages/core-blocks/src/PropertiesTable/IProperty.ts
+++ b/webapp/packages/core-blocks/src/PropertiesTable/IProperty.ts
@@ -13,4 +13,5 @@ export interface IProperty {
defaultValue?: string;
description?: string;
validValues?: string[];
+ new?: boolean;
}
diff --git a/webapp/packages/core-blocks/src/PropertiesTable/PropertiesTable.tsx b/webapp/packages/core-blocks/src/PropertiesTable/PropertiesTable.tsx
index 331afe8f13..5fce925b32 100644
--- a/webapp/packages/core-blocks/src/PropertiesTable/PropertiesTable.tsx
+++ b/webapp/packages/core-blocks/src/PropertiesTable/PropertiesTable.tsx
@@ -105,7 +105,7 @@ export const PropertiesTable = observer(function PropertiesTable({
{translate('block_properties_table_value')}
- {onAdd && }
+ {onAdd && }
diff --git a/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.tsx b/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.tsx
index 6883c5ad8c..d4251ee281 100644
--- a/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.tsx
+++ b/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.tsx
@@ -134,10 +134,10 @@ export const PropertyItem = observer(function PropertyItem({
const handleRemove = useCallback(() => onRemove(property.id), [property]);
useLayoutEffect(() => {
- if (keyInputRef.current && isKeyEditable) {
+ if (keyInputRef.current && isKeyEditable && property.new) {
keyInputRef.current.focus();
}
- }, []);
+ }, [property]);
return styled(useStyles(styles))(
diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverProperties.tsx b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverProperties.tsx
index 9049b630e9..004588e5bb 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverProperties.tsx
+++ b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverProperties.tsx
@@ -39,7 +39,7 @@ export const DriverProperties = observer(function DriverProperties({
state,
loadProperties,
}: DriverPropertiesProps) {
- const controller = useController(DriverPropertiesController, driverId);
+ const controller = useController(DriverPropertiesController, driverId, state);
useMemo(() => {
if (loadProperties) {
@@ -54,7 +54,7 @@ export const DriverProperties = observer(function DriverProperties({
)}
diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverPropertiesController.ts b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverPropertiesController.ts
index 2d962886c0..e467d10628 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverPropertiesController.ts
+++ b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/DriverProperties/DriverPropertiesController.ts
@@ -32,20 +32,24 @@ export class DriverPropertiesController implements IInitializableController {
loaded = false;
+ private state!: Record;
+
constructor(
private driverPropertiesService: DriverPropertiesService,
private notificationService: NotificationService
) { }
- init(driverId: string) {
+ init(driverId: string, state: Record) {
this.driverId = driverId;
+ this.state = state;
}
- onAddProperty = () => {
+ addProperty = (key?: string, value?: string) => {
this.driverProperties.unshift({
id: uuid(),
- key: 'property',
- defaultValue: '',
+ key: key ?? 'property',
+ defaultValue: value ?? '',
+ new: !key,
});
}
@@ -64,6 +68,14 @@ export class DriverPropertiesController implements IInitializableController {
description: property.description,
validValues: property.validValues,
})));
+
+ for (const key of Object.keys(this.state)) {
+ if (this.driverProperties.some(property => property.key === key)) {
+ continue;
+ }
+
+ this.addProperty(key, this.state[key]);
+ }
this.loaded = true;
} catch (exception) {
this.notificationService.logException(exception, 'Can\'t load driver properties');
diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverProperties.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverProperties.tsx
index e5b4b2714a..98978f1a40 100644
--- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverProperties.tsx
+++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverProperties.tsx
@@ -41,7 +41,7 @@ export const DriverProperties = observer(function DriverProperties({
state,
loadProperties,
}: DriverPropertiesProps) {
- const controller = useController(DriverPropertiesController, driver);
+ const controller = useController(DriverPropertiesController, driver, state);
useEffect(() => {
if (loadProperties) {
@@ -56,7 +56,7 @@ export const DriverProperties = observer(function DriverProperties({
)}
diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverPropertiesController.ts b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverPropertiesController.ts
index 9a1d574942..85a3ad9fc8 100644
--- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverPropertiesController.ts
+++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/DriverProperties/DriverPropertiesController.ts
@@ -34,21 +34,24 @@ export class DriverPropertiesController implements IInitializableController {
@observable driverProperties = observable([])
private loaded = false;
+ private state!: Record;
constructor(
private driverPropertiesService: DriverPropertiesService,
private notificationService: NotificationService
) { }
- init(driver: DBDriver) {
+ init(driver: DBDriver, state: Record) {
this.driver = driver;
+ this.state = state;
}
- onAddProperty = () => {
+ addProperty = (key?: string, value?: string) => {
this.driverProperties.unshift({
id: uuid(),
- key: 'property',
- defaultValue: '',
+ key: key ?? 'property',
+ defaultValue: value ?? '',
+ new: !key,
});
}
@@ -67,6 +70,14 @@ export class DriverPropertiesController implements IInitializableController {
description: property.description,
validValues: property.validValues,
})));
+
+ for (const key of Object.keys(this.state)) {
+ if (this.driverProperties.some(property => property.key === key)) {
+ continue;
+ }
+
+ this.addProperty(key, this.state[key]);
+ }
this.loaded = true;
} catch (exception) {
this.notificationService.logException(exception, 'Can\'t load driver properties');