From fa2b0b60a8341facd30769c5aefca9251896bd8a Mon Sep 17 00:00:00 2001 From: sergeyteleshev Date: Thu, 20 Mar 2025 14:38:01 +0100 Subject: [PATCH] CB-4067 fixes bug with incorrect host or port during search or changing driverId during connection creation --- .../Options/ConnectionFormOpitonsPart.ts | 56 ++++++++----------- .../src/ConnectionForm/Options/Options.tsx | 22 ++++---- 2 files changed, 34 insertions(+), 44 deletions(-) diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/Options/ConnectionFormOpitonsPart.ts b/webapp/packages/plugin-connections/src/ConnectionForm/Options/ConnectionFormOpitonsPart.ts index e161ab3968..e564e33f5a 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/Options/ConnectionFormOpitonsPart.ts +++ b/webapp/packages/plugin-connections/src/ConnectionForm/Options/ConnectionFormOpitonsPart.ts @@ -22,7 +22,6 @@ import { DBDriverResource, isJDBCConnection, type DatabaseConnection, - type IConnectionInfoParams, } from '@cloudbeaver/core-connections'; import type { ProjectInfoResource, ProjectsService } from '@cloudbeaver/core-projects'; import { AUTH_PROVIDER_LOCAL_ID, AuthProvidersResource, UserInfoResource } from '@cloudbeaver/core-authentication'; @@ -36,7 +35,6 @@ import type { IConnectionFormState } from '../IConnectionFormState.js'; import { CommonDialogService, DialogueStateResult } from '@cloudbeaver/core-dialogs'; import { ConnectionAuthenticationDialogLoader } from '../../ConnectionAuthentication/ConnectionAuthenticationDialogLoader.js'; import type { NotificationService } from '@cloudbeaver/core-events'; -import type { ResourceKeySimple } from '@cloudbeaver/core-resource'; const MAIN_PROPERTY_DATABASE_KEY = 'database'; const MAIN_PROPERTY_HOST_KEY = 'host'; @@ -74,21 +72,12 @@ export class ConnectionFormOptionsPart extends FormPart) { - if (!this.connectionKey || !this.connectionInfoResource.isIntersect(key, this.connectionKey)) { - return; - } - - await this.reload(); - } - private async formAuthState(data: IFormState, contexts: IExecutionContextProvider>) { const stateContext = contexts.getContext(formStateContext); @@ -146,26 +135,29 @@ export class ConnectionFormOptionsPart extends FormPart { if (this.formState.mode === 'create') { - const defaults = await this.getDefaults(); + await this.setDefaults(); this.setInitialState({ - ...defaults, + ...defaultStateGetter(), ...this.state, }); return; @@ -259,37 +251,33 @@ export class ConnectionFormOptionsPart extends FormPart = observe const tabsState = useContext(TabsContext); const isSharedProject = projectInfoResource.isProjectShared(formState.state.projectId); const optionsPart = getConnectionFormOptionsPart(formState); - const connectionInfoService = useResource( + const connectionInfoResource = useResource( Options, ConnectionInfoResource, createConnectionParam(formState.state.projectId, optionsPart.state.connectionId!), @@ -117,7 +117,7 @@ export const Options: TabContainerPanelComponent = observe ); //@TODO it's here until the profile implementation in the CloudBeaver - const readonly = formState.isDisabled || connectionInfoService.data?.authModel === PROFILE_AUTH_MODEL_ID; + const readonly = formState.isDisabled || connectionInfoResource.data?.authModel === PROFILE_AUTH_MODEL_ID; useFormValidator(formState.validationTask, formRef.current); const { credentialsSavingEnabled } = useAdministrationSettings(); @@ -142,7 +142,7 @@ export const Options: TabContainerPanelComponent = observe const authModelLoader = useResource( Options, DatabaseAuthModelsResource, - getComputed(() => optionsPart.state.authModelId || connectionInfoService.data?.authModel || driver?.defaultAuthModel || null), + getComputed(() => optionsPart.state.authModelId || connectionInfoResource.data?.authModel || driver?.defaultAuthModel || null), { onData: optionsPart.setAuthModel.bind(optionsPart), active: selected, @@ -166,12 +166,12 @@ export const Options: TabContainerPanelComponent = observe } const authentication = useAuthenticationAction({ - providerId: authModel?.requiredAuth ?? connectionInfoService.data?.requiredAuth ?? AUTH_PROVIDER_LOCAL_ID, + providerId: authModel?.requiredAuth ?? connectionInfoResource.data?.requiredAuth ?? AUTH_PROVIDER_LOCAL_ID, }); const edit = formState.mode === 'edit'; const originLocal = - !connectionInfoService.data || (connectionInfoOriginResource.data?.origin && isLocalConnection(connectionInfoOriginResource.data.origin)); + !connectionInfoResource.data || (connectionInfoOriginResource.data?.origin && isLocalConnection(connectionInfoOriginResource.data.origin)); const drivers = driverMap.resource.enabledDrivers.filter(({ id, driverInstalled }) => { if (!edit && !isAdmin && !driverInstalled) { @@ -188,11 +188,11 @@ export const Options: TabContainerPanelComponent = observe let properties = authModel?.properties; if ( - connectionInfoService.data?.authProperties && - connectionInfoService.data.authProperties.length > 0 && - optionsPart.state.authModelId === connectionInfoService.data.authModel + connectionInfoResource.data?.authProperties && + connectionInfoResource.data.authProperties.length > 0 && + optionsPart.state.authModelId === connectionInfoResource.data.authModel ) { - properties = connectionInfoService.data.authProperties; + properties = connectionInfoResource.data.authProperties; } const sharedCredentials = optionsPart.state.sharedCredentials && serverConfigResource.data?.distributed; @@ -208,7 +208,9 @@ export const Options: TabContainerPanelComponent = observe } runInAction(() => { - optionsPart.state.driverId = driverId; + optionsPart.state = { + driverId, + }; }); await formState.reload();