diff --git a/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx b/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx index 845b473f1c..1a7d091e54 100644 --- a/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx +++ b/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx @@ -6,7 +6,8 @@ * you may not use this file except in compliance with the License. */ -import { observer, useLocalStore } from 'mobx-react'; +import { observer } from 'mobx-react'; +import { useMemo } from 'react'; import styled, { css } from 'reshadow'; import { Loader } from '@cloudbeaver/core-blocks'; @@ -53,12 +54,10 @@ export const ElementsTree: React.FC = observer(function ElementsTree({ const nodeChildren = useChildren(root); const Placeholder = emptyPlaceholder; - const context = useLocalStore(source => source, { - control, - onOpen, - onSelect, - isSelected, - }); + const context = useMemo( + () => ({ control, onOpen, onSelect, isSelected }), + [control, onOpen, onSelect, isSelected] + ); if (!nodeChildren.children || nodeChildren.children.length === 0) { if (nodeChildren.isLoading()) { diff --git a/webapp/packages/core-app/src/index.ts b/webapp/packages/core-app/src/index.ts index d8b6099614..a214a2c96b 100644 --- a/webapp/packages/core-app/src/index.ts +++ b/webapp/packages/core-app/src/index.ts @@ -22,6 +22,8 @@ export * from './shared/NavigationTabs/TabNavigationContext'; export * from './shared/ToolsPanel/LogViewTab/LogViewerMenuService'; export * from './shared/ToolsPanel/LogViewTab/LogViewerService'; export * from './shared/SessionExpireDialog/SessionExpiredDialogService'; +export * from './NavigationTree/ElementsTree'; +export * from './NavigationTree/TreeContext'; export * from './NavigationTree/NavigationTreeService'; export * from './NavigationTree/NavigationTreeContextMenuService'; export * from './AppLocaleService'; diff --git a/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts b/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts index 3be46fcbbf..4aadaae65d 100644 --- a/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts +++ b/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts @@ -120,7 +120,7 @@ export class NavNodeManagerService extends Bootstrap { this.connectionInfo.onItemAdd.subscribe(this.connectionUpdateHandler.bind(this)); this.connectionInfo.onItemDelete.subscribe(this.connectionRemoveHandler.bind(this)); this.connectionInfo.onConnectionCreate.subscribe(this.connectionCreateHandler.bind(this)); - this.sessionResource.onDataUpdate.subscribe(this.updateRootChildren.bind(this)); + this.sessionResource.onDataUpdate.subscribe(this.refreshRoot.bind(this)); } load(): void {} @@ -319,7 +319,13 @@ export class NavNodeManagerService extends Bootstrap { }; }; - private async updateRootChildren() { + async updateRoot(): Promise { + if (await this.isNavTreeEnabled()) { + await this.navTree.refresh(ROOT_NODE_PATH); + } + } + + async refreshRoot(): Promise { this.navTree.delete(ROOT_NODE_PATH); if (await this.isNavTreeEnabled()) { await this.navTree.refresh(ROOT_NODE_PATH); diff --git a/webapp/packages/core-blocks/src/FormControls/Checkboxes/CheckboxMarkup.tsx b/webapp/packages/core-blocks/src/FormControls/Checkboxes/CheckboxMarkup.tsx index 373a8e93e1..89976b56d8 100644 --- a/webapp/packages/core-blocks/src/FormControls/Checkboxes/CheckboxMarkup.tsx +++ b/webapp/packages/core-blocks/src/FormControls/Checkboxes/CheckboxMarkup.tsx @@ -41,6 +41,7 @@ const checkboxStyles = composes( } checkbox-label { composes: theme-typography--body2 from global; + cursor: pointer; } ` ); diff --git a/webapp/packages/core-blocks/src/Tree/TreeNode/TreeNode.tsx b/webapp/packages/core-blocks/src/Tree/TreeNode/TreeNode.tsx index f3e7a51812..90ebdf85f1 100644 --- a/webapp/packages/core-blocks/src/Tree/TreeNode/TreeNode.tsx +++ b/webapp/packages/core-blocks/src/Tree/TreeNode/TreeNode.tsx @@ -6,8 +6,8 @@ * you may not use this file except in compliance with the License. */ -import { observer, useLocalStore } from 'mobx-react'; -import { useRef } from 'react'; +import { observer } from 'mobx-react'; +import { useMemo, useRef } from 'react'; import styled, { use } from 'reshadow'; import { useStyles } from '@cloudbeaver/core-theming'; @@ -50,7 +50,7 @@ export const TreeNode: React.FC = observer(function TreeNode({ handlersRef.current.onOpen?.(); }; - const nodeContext = useLocalStore(source => source, { + const nodeContext = useMemo(() => ({ loading, selected, expanded, @@ -58,16 +58,7 @@ export const TreeNode: React.FC = observer(function TreeNode({ expand: handleExpand, select: handleSelect, open: handleOpen, - }); - // const nodeContext = useMemo(() => ({ - // loading, - // selected, - // expanded, - // leaf, - // expand: handleExpand, - // select: handleSelect, - // open: handleOpen, - // }), [loading, selected, expanded, leaf, handleExpand, handleSelect, handleOpen]); + }), [loading, selected, expanded, leaf, handleExpand, handleSelect, handleOpen]); return styled(useStyles(TREE_NODE_STYLES))( diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/Options.tsx b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/Options.tsx index 2a12a3359e..4f0a96b2a2 100644 --- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/Options.tsx +++ b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/Options.tsx @@ -28,7 +28,6 @@ import { useStyles } from '@cloudbeaver/core-theming'; import { EConnectionType } from '../EConnectionType'; import { IConnectionFormModel } from '../IConnectionFormModel'; -import { formStyles } from './formStyles'; import { OptionsController } from './OptionsController'; import { ParametersForm } from './ParametersForm'; @@ -52,6 +51,12 @@ const styles = css` flex-direction: column; max-width: 630px; } + connection-type { + margin-left: 180px; + } + Radio { + composes: theme-typography--body2 from global; + } `; export const Options = observer(function Options({ @@ -66,7 +71,7 @@ export const Options = observer(function Options({ const translate = useTranslate(); const [focusedRef] = useFocus({ focusFirstChild: true }); - return styled(useStyles(styles, formStyles))( + return styled(useStyles(styles))( diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/ParametersForm.tsx b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/ParametersForm.tsx index 19dd37791c..3df89c540e 100644 --- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/ParametersForm.tsx +++ b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/ParametersForm.tsx @@ -7,21 +7,25 @@ */ import { observer } from 'mobx-react'; -import styled, { use, css } from 'reshadow'; +import styled, { css, use } from 'reshadow'; import { FormGroup, InputField } from '@cloudbeaver/core-blocks'; import { useTranslate } from '@cloudbeaver/core-localization'; import { ConnectionInfo } from '@cloudbeaver/core-sdk'; import { useStyles } from '@cloudbeaver/core-theming'; -import { formStyles } from './formStyles'; - interface ParametersFormProps { connection: ConnectionInfo; disabled?: boolean; embedded?: boolean; } +const parametersFormStyles = css` + sub-label { + composes: theme-typography--caption from global; + line-height: 14px; + }`; + export const ParametersForm = observer(function ParametersForm({ connection, embedded, @@ -29,7 +33,7 @@ export const ParametersForm = observer(function ParametersForm({ }: ParametersFormProps) { const translate = useTranslate(); - return styled(useStyles(formStyles))( + return styled(useStyles(parametersFormStyles))( <> {!embedded && ( diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/formStyles.ts b/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/formStyles.ts deleted file mode 100644 index 3128565886..0000000000 --- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionForm/Options/formStyles.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * cloudbeaver - Cloud Database Manager - * Copyright (C) 2020 DBeaver Corp and others - * - * Licensed under the Apache License, Version 2.0. - * you may not use this file except in compliance with the License. - */ - -import { css } from 'reshadow'; - -export const formStyles = css` - connection-form { - flex: 1; - display: flex; - overflow: auto; - flex-direction: row; - } - layout-grid { - flex: 1; - } - connection-type { - margin-left: 180px; - } - Radio { - composes: theme-typography--body1 from global; - } - sub-label { - composes: theme-typography--caption from global; - line-height: 14px; - } -`; diff --git a/webapp/packages/core-connections/src/DatabaseAuthDialog/DBAuthDialogController.ts b/webapp/packages/core-connections/src/DatabaseAuthDialog/DBAuthDialogController.ts index 6be1910642..e8bac62a07 100644 --- a/webapp/packages/core-connections/src/DatabaseAuthDialog/DBAuthDialogController.ts +++ b/webapp/packages/core-connections/src/DatabaseAuthDialog/DBAuthDialogController.ts @@ -17,10 +17,17 @@ import { GQLErrorCatcher } from '@cloudbeaver/core-sdk'; import { ConnectionInfoResource } from '../ConnectionInfoResource'; import { DBDriverResource } from '../DBDriverResource'; +interface IDBAuthConfig { + credentials: any; + saveCredentials: boolean; +} @injectable() export class DBAuthDialogController implements IInitializableController, IDestructibleController { @observable isAuthenticating = false; - @observable credentials = {}; + @observable config: IDBAuthConfig = { + credentials: {}, + saveCredentials: false, + }; readonly error = new GQLErrorCatcher(); @@ -53,7 +60,7 @@ export class DBAuthDialogController implements IInitializableController, IDestru this.isAuthenticating = true; try { - await this.connectionInfoResource.init(this.connectionId, this.credentials); + await this.connectionInfoResource.init(this.connectionId, this.config.credentials); this.close(); } catch (exception) { if (!this.error.catch(exception) || this.isDistructed) { diff --git a/webapp/packages/core-connections/src/DatabaseAuthDialog/DatabaseAuthDialog.tsx b/webapp/packages/core-connections/src/DatabaseAuthDialog/DatabaseAuthDialog.tsx index 8115dbdbb4..367a8ebcf6 100644 --- a/webapp/packages/core-connections/src/DatabaseAuthDialog/DatabaseAuthDialog.tsx +++ b/webapp/packages/core-connections/src/DatabaseAuthDialog/DatabaseAuthDialog.tsx @@ -10,10 +10,11 @@ import { observer } from 'mobx-react'; import styled, { css } from 'reshadow'; import { - SubmittingForm, ErrorMessage, Loader, useFocus, ObjectPropertyInfoForm + SubmittingForm, ErrorMessage, Loader, useFocus, ObjectPropertyInfoForm, FieldCheckbox, FormBox, FormBoxElement, FormGroup } from '@cloudbeaver/core-blocks'; import { useController } from '@cloudbeaver/core-di'; import { CommonDialogWrapper, DialogComponentProps } from '@cloudbeaver/core-dialogs'; +import { useTranslate } from '@cloudbeaver/core-localization'; import { composes, useStyles } from '@cloudbeaver/core-theming'; import { useConnectionInfo } from '../useConnectionInfo'; @@ -46,6 +47,10 @@ const styles = composes( ObjectPropertyInfoForm { align-items: center; justify-content: center; + display: inline-flex; + } + FormBox { + align-items: center; } ErrorMessage { position: sticky; @@ -64,6 +69,7 @@ export const DatabaseAuthDialog = observer(function DatabaseAuthDialog({ const [focusedRef] = useFocus({ focusFirstChild: true }); const { driver } = useDBDriver(connection.connectionInfo?.driverId || ''); const controller = useController(DBAuthDialogController, payload, rejectDialog); + const translate = useTranslate(); return styled(useStyles(styles))( : ( - + + + + + + + + )} {controller.error.responseMessage && ( diff --git a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/Form/ServerConfigurationConfigurationForm.tsx b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/Form/ServerConfigurationConfigurationForm.tsx index 7e31d3774c..d0f3c88432 100644 --- a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/Form/ServerConfigurationConfigurationForm.tsx +++ b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/Form/ServerConfigurationConfigurationForm.tsx @@ -34,6 +34,7 @@ export const ServerConfigurationConfigurationForm: React.FC = observer(fu mod={['primary']} disabled={!serverConfig.authenticationEnabled} long + autoHide > {translate('administration_configuration_wizard_configuration_anonymous_access')} @@ -45,6 +46,7 @@ export const ServerConfigurationConfigurationForm: React.FC = observer(fu description={translate('administration_configuration_wizard_configuration_authentication_description')} mod={['primary']} long + autoHide > {translate('administration_configuration_wizard_configuration_authentication')} @@ -56,6 +58,7 @@ export const ServerConfigurationConfigurationForm: React.FC = observer(fu description={translate('administration_configuration_wizard_configuration_custom_connections_description')} mod={['primary']} long + autoHide > {translate('administration_configuration_wizard_configuration_custom_connections')} diff --git a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx index b549b7e0dc..283dfa1fce 100644 --- a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx +++ b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx @@ -10,7 +10,7 @@ import { observer } from 'mobx-react'; import styled, { use, css } from 'reshadow'; import { AdministrationTools, ADMINISTRATION_TOOLS_STYLES } from '@cloudbeaver/core-administration'; -import { FormBox, FormBoxElement, IconButton, SubmittingForm, useFocus } from '@cloudbeaver/core-blocks'; +import { FormBox, FormBoxElement, IconButton, Loader, SubmittingForm, useFocus } from '@cloudbeaver/core-blocks'; import { useController, useService } from '@cloudbeaver/core-di'; import { useFormValidator } from '@cloudbeaver/core-executor'; import { useTranslate } from '@cloudbeaver/core-localization'; @@ -44,6 +44,8 @@ const styles = composes( layout-grid-cell { position: relative; + display: flex; + flex-direction: column; border: solid 1px; } @@ -62,6 +64,10 @@ const styles = composes( flex-direction: row; } + FormBox { + flex: 0; + } + p { line-height: 2; } @@ -70,12 +76,13 @@ const styles = composes( export const ServerConfigurationPage = observer(function ServerConfigurationPage() { const translate = useTranslate(); + const style = useStyles(styles, ADMINISTRATION_TOOLS_STYLES); const [focusedRef] = useFocus({ focusFirstChild: true }); const service = useService(ServerConfigurationService); const controller = useController(ServerConfigurationPageController); useFormValidator(service.validationTask, focusedRef); - return styled(useStyles(styles, ADMINISTRATION_TOOLS_STYLES))( + return styled(style)( @@ -91,15 +98,23 @@ export const ServerConfigurationPage = observer(function ServerConfigurationPage )} - - - - {!controller.editing && } - - - - - + {service.loading ? ( + + ) : ( + <> + + + + {!controller.editing && ( + + )} + + + + + + + )} diff --git a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts index d16262bb41..8b7ef80d05 100644 --- a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts +++ b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts @@ -26,6 +26,7 @@ export interface IValidationStatusContext { @injectable() export class ServerConfigurationService { @observable state: IServerConfigurationPageState; + @observable loading: boolean; readonly validationTask: IExecutor; constructor( @@ -35,19 +36,27 @@ export class ServerConfigurationService { private readonly notificationService: NotificationService, private readonly usersResource: UsersResource ) { + this.loading = true; this.state = this.getConfig(); this.validationTask = new Executor(); } async loadConfig(): Promise { - const config = await this.serverConfigResource.load(null); + this.loading = true; + try { + const config = await this.serverConfigResource.load(null); - this.state = this.administrationScreenService - .getItemState( - 'server-configuration', - () => this.getConfig(config), - !config?.configurationMode - ); + this.state = this.administrationScreenService + .getItemState( + 'server-configuration', + () => this.getConfig(config), + !config?.configurationMode + ); + } catch (exception) { + this.notificationService.logException(exception, 'Can\'t load server configuration'); + } finally { + this.loading = false; + } } isDone(): boolean { diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ConnectionForm.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ConnectionForm.tsx index 16fdafa55c..73b9c41278 100644 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ConnectionForm.tsx +++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ConnectionForm.tsx @@ -7,17 +7,16 @@ */ import { observer } from 'mobx-react'; -import styled from 'reshadow'; +import styled, { css } from 'reshadow'; import { - Radio, InputField, useFocus, ObjectPropertyInfoForm, InputGroup + Radio, InputField, useFocus, ObjectPropertyInfoForm, InputGroup, FieldCheckbox, SubmittingForm, FormBox, FormBoxElement, FormGroup, RadioGroup } from '@cloudbeaver/core-blocks'; import { DBDriver } from '@cloudbeaver/core-connections'; import { useTranslate } from '@cloudbeaver/core-localization'; import { useStyles } from '@cloudbeaver/core-theming'; import { ConnectionType } from '../ConnectionFormDialogController'; -import { formStyles } from './formStyles'; import { IFormController } from './IFormController'; import { ParametersForm } from './ParametersForm'; @@ -26,68 +25,99 @@ interface ConnectionFormProps { controller: IFormController; } +const connectionFormStyles = css` + SubmittingForm { + flex: 1; + } + FormBoxElement { + flex: 1; + } + FormBox { + padding: 4px 24px 18px; + } + connection-type { + padding: 12px; + margin-left: 160px; + } + Radio { + composes: theme-typography--body2 from global; + font-weight: 500; + padding: 0 12px; + } +`; + export const ConnectionForm = observer(function ConnectionForm({ driver, controller, }: ConnectionFormProps) { const translate = useTranslate(); - const [focusedRef] = useFocus({ focusFirstChild: true }); + const [focusedRef] = useFocus({ focusFirstChild: true }); - return styled(useStyles(formStyles))( - - - controller.onChangeType(ConnectionType.Attributes)} - > - {translate('customConnection_connectionType_custom')} - - controller.onChangeType(ConnectionType.URL)} - > - {translate('customConnection_connectionType_url')} - - - {controller.connectionType === ConnectionType.Attributes ? ( - - ) : ( - - controller.onChange('url', value)} - > - {translate('customConnection_url_JDBC')} - - - )} - {controller.authModel && ( - <> - - {translate('connections_connection_edit_authentication')} - - - - )} - + return styled(useStyles(connectionFormStyles))( + + + + + + + + {translate('customConnection_connectionType_custom')} + + + {translate('customConnection_connectionType_url')} + + + + + {controller.connectionType === ConnectionType.Attributes ? ( + + ) : ( + + controller.onChange('url', value)} + > + {translate('customConnection_url_JDBC')} + + + )} + {controller.authModel && ( + <> + + {translate('connections_connection_edit_authentication')} + + + + + + + )} + + + ); }); diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ParametersForm.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ParametersForm.tsx index 80fa0e9958..41f597a7f7 100644 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ParametersForm.tsx +++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/ParametersForm.tsx @@ -7,13 +7,12 @@ */ import { observer } from 'mobx-react'; -import styled, { use } from 'reshadow'; +import styled, { css, use } from 'reshadow'; import { InputField } from '@cloudbeaver/core-blocks'; import { useTranslate } from '@cloudbeaver/core-localization'; import { useStyles } from '@cloudbeaver/core-theming'; -import { formStyles } from './formStyles'; import { IFormController } from './IFormController'; interface ParametersFormProps { @@ -21,13 +20,19 @@ interface ParametersFormProps { embedded?: boolean; } +const parametersFormStyles = css` + sub-label { + composes: theme-typography--caption from global; + line-height: 14px; + }`; + export const ParametersForm = observer(function ParametersForm({ controller, embedded, }: ParametersFormProps) { const translate = useTranslate(); - return styled(useStyles(formStyles))( + return styled(useStyles(parametersFormStyles))( <> {!embedded && ( diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/formStyles.ts b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/formStyles.ts deleted file mode 100644 index 36a09fae52..0000000000 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionForm/formStyles.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * cloudbeaver - Cloud Database Manager - * Copyright (C) 2020 DBeaver Corp and others - * - * Licensed under the Apache License, Version 2.0. - * you may not use this file except in compliance with the License. - */ - -import { css } from 'reshadow'; - -export const formStyles = css` - connection-form { - flex: 1; - display: flex; - flex-direction: column; - padding: 18px 24px; - padding-top: 4px; - } - connection-type { - padding: 12px; - } - Radio { - composes: theme-typography--body1 from global; - font-weight: 500; - padding: 0 12px; - } - sub-label { - composes: theme-typography--caption from global; - line-height: 14px; - } - group { - box-sizing: border-box; - display: flex; - } - hr { - margin-left: 24px; - margin-right: 24px; - } -`; diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialog.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialog.tsx index f19d9da321..e7d5efe77c 100644 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialog.tsx +++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialog.tsx @@ -40,8 +40,8 @@ const styles = composes( box-sizing: border-box; } CommonDialogWrapper { - max-height: 550px; - min-height: 550px; + max-height: 594px; + min-height: 594px; } SubmittingForm { flex: 1; diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialogController.ts b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialogController.ts index 4b3dfb6aad..4bb6f66a3c 100644 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialogController.ts +++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/ConnectionFormDialog/ConnectionFormDialogController.ts @@ -39,6 +39,7 @@ implements IInitializableController, IDestructibleController { url: '', properties: {}, credentials: {}, + saveCredentials: false, }; readonly error = new GQLErrorCatcher(); @@ -126,6 +127,7 @@ implements IInitializableController, IDestructibleController { if (this.authModel) { config.authModelId = this.config.authModelId; config.credentials = this.config.credentials; + config.saveCredentials = this.config.saveCredentials; } if (Object.keys(this.config.properties).length > 0) { config.properties = this.config.properties;