diff --git a/webapp/packages/core-ui/src/Form/FormState.ts b/webapp/packages/core-ui/src/Form/FormState.ts index d0017e9255..ebcd39dba5 100644 --- a/webapp/packages/core-ui/src/Form/FormState.ts +++ b/webapp/packages/core-ui/src/Form/FormState.ts @@ -151,7 +151,7 @@ export class FormState implements IFormState { async reload() { for (const part of this.parts.values()) { - await part.load(); + await part.reload(); } } diff --git a/webapp/packages/core-ui/src/Form/IFormPart.ts b/webapp/packages/core-ui/src/Form/IFormPart.ts index 446c33fd97..c6ebf8a2cc 100644 --- a/webapp/packages/core-ui/src/Form/IFormPart.ts +++ b/webapp/packages/core-ui/src/Form/IFormPart.ts @@ -16,5 +16,6 @@ export interface IFormPart extends ILoadableState { readonly isChanged: boolean; load(): Promise; + reload(): Promise; reset(): void; } diff --git a/webapp/packages/plugin-connection-search/src/Search/ConnectionSearchService.ts b/webapp/packages/plugin-connection-search/src/Search/ConnectionSearchService.ts index 39c21ed820..2336a28774 100644 --- a/webapp/packages/plugin-connection-search/src/Search/ConnectionSearchService.ts +++ b/webapp/packages/plugin-connection-search/src/Search/ConnectionSearchService.ts @@ -154,17 +154,12 @@ export class ConnectionSearchService { port: String(database.port), driverId: database.defaultDriver, }, - // TODO remove it? submitType: null, projectId: projects[0]!.id, availableDrivers: database.possibleDrivers, type: 'public', }); - - // this.formState.closeTask.addHandler(this.goBack.bind(this)); } - - // this.formState.load(); } private clearFormState() { diff --git a/webapp/packages/plugin-connections-administration/src/Administration/Connections/ConnectionsTable/ConnectionEdit.tsx b/webapp/packages/plugin-connections-administration/src/Administration/Connections/ConnectionsTable/ConnectionEdit.tsx index 8cc05e56b2..f7dc39b1ac 100644 --- a/webapp/packages/plugin-connections-administration/src/Administration/Connections/ConnectionsTable/ConnectionEdit.tsx +++ b/webapp/packages/plugin-connections-administration/src/Administration/Connections/ConnectionsTable/ConnectionEdit.tsx @@ -22,6 +22,7 @@ interface Props { export const ConnectionEdit = observer(function ConnectionEditNew({ item }) { const data = useConnectionFormState(item, state => { state.setMode(FormMode.Edit); + // TODO refactor it? state.setState({ ...state.state, config: { @@ -37,6 +38,7 @@ export const ConnectionEdit = observer(function ConnectionEditNew({ item const projectId = item.projectId; const connectionId = item.connectionId; + // TODO remove it? useMemo(() => { data.state.config.connectionId = connectionId; data.state.projectId = projectId; diff --git a/webapp/packages/plugin-connections-administration/src/Administration/Connections/CreateConnectionService.ts b/webapp/packages/plugin-connections-administration/src/Administration/Connections/CreateConnectionService.ts index 1221794a43..a390a814a4 100644 --- a/webapp/packages/plugin-connections-administration/src/Administration/Connections/CreateConnectionService.ts +++ b/webapp/packages/plugin-connections-administration/src/Administration/Connections/CreateConnectionService.ts @@ -112,8 +112,6 @@ export class CreateConnectionService { submitType: null, type: 'admin', }); - - // this.data.closeTask.addHandler(this.cancelCreate.bind(this)); } clearConnectionTemplate(): void { diff --git a/webapp/packages/plugin-connections-administration/src/ConnectionForm/ConnectionAccess/ConnectionFormAccessPart.ts b/webapp/packages/plugin-connections-administration/src/ConnectionForm/ConnectionAccess/ConnectionFormAccessPart.ts index a338a76a2f..a8b7dd640f 100644 --- a/webapp/packages/plugin-connections-administration/src/ConnectionForm/ConnectionAccess/ConnectionFormAccessPart.ts +++ b/webapp/packages/plugin-connections-administration/src/ConnectionForm/ConnectionAccess/ConnectionFormAccessPart.ts @@ -72,13 +72,17 @@ export class ConnectionFormAccessPart extends FormPart 0) { - await this.connectionInfoResource.deleteConnectionsAccess(key, subjectsToRevoke); + promises.push(this.connectionInfoResource.deleteConnectionsAccess(key, subjectsToRevoke)); } if (subjectsToGrant.length > 0) { - await this.connectionInfoResource.addConnectionsAccess(key, subjectsToGrant); + promises.push(this.connectionInfoResource.addConnectionsAccess(key, subjectsToGrant)); } + + await Promise.all(promises); } edit() { diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/DriverProperties/ConnectionFormDriverPropertiesPart.ts b/webapp/packages/plugin-connections/src/ConnectionForm/DriverProperties/ConnectionFormDriverPropertiesPart.ts index d76bdb192b..bcfa2f942b 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/DriverProperties/ConnectionFormDriverPropertiesPart.ts +++ b/webapp/packages/plugin-connections/src/ConnectionForm/DriverProperties/ConnectionFormDriverPropertiesPart.ts @@ -11,18 +11,20 @@ import { ConnectionInfoResource, createConnectionParam, type DBDriverResource } import type { IConnectionFormState } from '../IConnectionFormState.js'; import type { IConnectionProperties } from '../Options/IConnectionConfig.js'; +const getDefaultState = (): IConnectionProperties => ({}); + export class ConnectionFormDriverPropertiesPart extends FormPart { constructor( formState: IFormState, private readonly dbDriverResource: DBDriverResource, private readonly connectionInfoResource: ConnectionInfoResource, ) { - super(formState, {}); + super(formState, getDefaultState()); } protected override async loader(): Promise { if (!this.formState.state.config.connectionId || !this.formState.state.projectId) { - this.setInitialState({}); + this.setInitialState(getDefaultState()); return; } @@ -30,7 +32,7 @@ export class ConnectionFormDriverPropertiesPart extends FormPart runInAction(() => { if (driver.data) { - for (const key of Object.keys(driverPropertiesPart.state ?? {})) { + for (const key of Object.keys(driverPropertiesPart.state)) { if (driver.data.driverProperties.some(property => property.id === key) || state.propertiesList.some(property => property.key === key)) { continue; } - state.add(key, driverPropertiesPart.state![key]); + state.add(key, driverPropertiesPart.state[key]); } } }); diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/Options/IConnectionConfig.ts b/webapp/packages/plugin-connections/src/ConnectionForm/Options/IConnectionConfig.ts index e4fce2c060..ee19e329f8 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/Options/IConnectionConfig.ts +++ b/webapp/packages/plugin-connections/src/ConnectionForm/Options/IConnectionConfig.ts @@ -9,7 +9,7 @@ import { DriverConfigurationType } from '@cloudbeaver/core-sdk'; import { schema } from '@cloudbeaver/core-utils'; import { CONNECTION_NETWORK_HANDLER_SCHEMA } from './IConnectionNetworkHanler.js'; -export const CONNECTION_PROPERTIES_SCHEMA = schema.record(schema.any()).optional(); +export const CONNECTION_PROPERTIES_SCHEMA = schema.record(schema.any()); export const CONNECTION_CONFIG_SCHEMA = schema.object({ authModelId: schema.string().optional(), @@ -28,7 +28,7 @@ export const CONNECTION_CONFIG_SCHEMA = schema.object({ name: schema.string().optional(), networkHandlersConfig: schema.array(CONNECTION_NETWORK_HANDLER_SCHEMA).optional(), port: schema.string().optional(), - properties: CONNECTION_PROPERTIES_SCHEMA, + properties: CONNECTION_PROPERTIES_SCHEMA.optional(), providerProperties: schema.record(schema.any()).optional(), readOnly: schema.boolean().optional(), saveCredentials: schema.boolean().optional(), diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/Options/Options.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/Options/Options.tsx index 913a906fd0..6a607da07f 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/Options/Options.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/Options/Options.tsx @@ -140,7 +140,7 @@ export const Options: TabContainerPanelComponent = observe DatabaseAuthModelsResource, getComputed(() => config.authModelId || info?.authModel || driver?.defaultAuthModel || null), { - onData: data => optionsHook.setAuthModel(data), + onData: optionsHook.setAuthModel, }, ); @@ -157,7 +157,7 @@ export const Options: TabContainerPanelComponent = observe return; } - optionsHook.setAuthModel(model); + await optionsHook.setAuthModel(model); } const authentication = useAuthenticationAction({ @@ -176,10 +176,7 @@ export const Options: TabContainerPanelComponent = observe }); function setProject(projectId: string) { - formState.setState({ - ...formState.state, - projectId, - }); + formState.state.projectId = projectId; } let properties = authModel?.properties; diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/Options/useOptions.ts b/webapp/packages/plugin-connections/src/ConnectionForm/Options/useOptions.ts index 4608892a8a..b9842fc2ed 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/Options/useOptions.ts +++ b/webapp/packages/plugin-connections/src/ConnectionForm/Options/useOptions.ts @@ -104,7 +104,7 @@ export function useOptions(formState: IFormState, config: } }); }, - setAuthModel(model: DatabaseAuthModel) { + async setAuthModel(model: DatabaseAuthModel) { const { config, info, formState } = refObject; config.credentials = {}; @@ -119,7 +119,7 @@ export function useOptions(formState: IFormState, config: } } - formState.reload(); + await formState.reload(); }, isNameAutoFill() { diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/OriginInfo/ConnectionFormOriginInfoFormPart.ts b/webapp/packages/plugin-connections/src/ConnectionForm/OriginInfo/ConnectionFormOriginInfoFormPart.ts index cc17f3f11d..17565c42d2 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/OriginInfo/ConnectionFormOriginInfoFormPart.ts +++ b/webapp/packages/plugin-connections/src/ConnectionForm/OriginInfo/ConnectionFormOriginInfoFormPart.ts @@ -41,7 +41,7 @@ export class ConnectionFormOriginInfoFormPart extends FormPart): Promise { - return Promise.resolve(); - } + protected override async saveChanges(data: IFormState): Promise {} }