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');