From 7e7885995729fb530f34a55b0e72f891f729b3f6 Mon Sep 17 00:00:00 2001 From: alex <48489896+devnaumov@users.noreply.github.com> Date: Fri, 15 Dec 2023 17:49:19 +0100 Subject: [PATCH 1/4] CB-4397 remove custom connection controller (#2229) Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com> --- .../CustomConnectionController.ts | 79 ------------------- .../CustomConnectionDialog.tsx | 30 ------- .../DriverSelectorDialog.tsx | 36 --------- .../src/CustomConnectionPluginBootstrap.ts | 4 +- .../Driver.m.css | 0 .../Driver.tsx | 0 .../DriverSelector.m.css | 0 .../DriverSelector.tsx | 0 .../DriverSelectorDialog.m.css | 0 .../DriverSelector/DriverSelectorDialog.tsx | 40 ++++++++++ .../DriverSelector/useDriverSelectorDialog.ts | 47 +++++++++++ 11 files changed, 89 insertions(+), 147 deletions(-) delete mode 100644 webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionController.ts delete mode 100644 webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionDialog.tsx delete mode 100644 webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelectorDialog.tsx rename webapp/packages/plugin-connection-custom/src/{CustomConnection/DriverSelectorDialog => DriverSelector}/Driver.m.css (100%) rename webapp/packages/plugin-connection-custom/src/{CustomConnection/DriverSelectorDialog => DriverSelector}/Driver.tsx (100%) rename webapp/packages/plugin-connection-custom/src/{CustomConnection/DriverSelectorDialog => DriverSelector}/DriverSelector.m.css (100%) rename webapp/packages/plugin-connection-custom/src/{CustomConnection/DriverSelectorDialog => DriverSelector}/DriverSelector.tsx (100%) rename webapp/packages/plugin-connection-custom/src/{CustomConnection/DriverSelectorDialog => DriverSelector}/DriverSelectorDialog.m.css (100%) create mode 100644 webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelectorDialog.tsx create mode 100644 webapp/packages/plugin-connection-custom/src/DriverSelector/useDriverSelectorDialog.ts diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionController.ts b/webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionController.ts deleted file mode 100644 index 3ad960563f..0000000000 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionController.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * CloudBeaver - Cloud Database Manager - * Copyright (C) 2020-2023 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 { computed, makeObservable, observable } from 'mobx'; - -import { ConnectionsManagerService, DBDriver, DBDriverResource } from '@cloudbeaver/core-connections'; -import { IInitializableController, injectable } from '@cloudbeaver/core-di'; -import { NotificationService } from '@cloudbeaver/core-events'; -import { ProjectsService } from '@cloudbeaver/core-projects'; -import { CachedMapAllKey } from '@cloudbeaver/core-resource'; -import { isArraysEqual } from '@cloudbeaver/core-utils'; -import { PublicConnectionFormService } from '@cloudbeaver/plugin-connections'; - -@injectable() -export class CustomConnectionController implements IInitializableController { - isLoading: boolean; - onClose!: () => void; - - get drivers(): DBDriver[] { - return this.dbDriverResource.enabledDrivers; - } - - constructor( - private readonly dbDriverResource: DBDriverResource, - private readonly notificationService: NotificationService, - private readonly projectsService: ProjectsService, - private readonly publicConnectionFormService: PublicConnectionFormService, - private readonly connectionsManagerService: ConnectionsManagerService, - ) { - this.isLoading = true; - - makeObservable(this, { - isLoading: observable, - drivers: computed({ - equals: isArraysEqual, - }), - }); - } - - init(onClose: () => void): void { - this.loadDBDrivers(); - this.onClose = onClose; - } - - onDriverSelect = async (driverId: string) => { - await this.projectsService.load(); - - const projects = this.connectionsManagerService.createConnectionProjects; - - if (projects.length === 0) { - this.notificationService.logError({ title: 'core_projects_no_default_project' }); - return; - } - - const state = await this.publicConnectionFormService.open( - projects[0].id, - { driverId }, - this.drivers.map(driver => driver.id), - ); - - if (state) { - this.onClose(); - } - }; - - private async loadDBDrivers() { - try { - await this.dbDriverResource.load(CachedMapAllKey); - } catch (exception: any) { - this.notificationService.logException(exception, "Can't load database drivers"); - } finally { - this.isLoading = false; - } - } -} diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionDialog.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionDialog.tsx deleted file mode 100644 index 7322363994..0000000000 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/CustomConnectionDialog.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * CloudBeaver - Cloud Database Manager - * Copyright (C) 2020-2023 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 { observer } from 'mobx-react-lite'; - -import { useTranslate } from '@cloudbeaver/core-blocks'; -import { useController } from '@cloudbeaver/core-di'; -import type { DialogComponent } from '@cloudbeaver/core-dialogs'; - -import { CustomConnectionController } from './CustomConnectionController'; -import { DriverSelectorDialog } from './DriverSelectorDialog/DriverSelectorDialog'; - -export const CustomConnectionDialog: DialogComponent = observer(function CustomConnectionDialog({ rejectDialog }) { - const controller = useController(CustomConnectionController, rejectDialog); - const translate = useTranslate(); - - return ( - - ); -}); diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelectorDialog.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelectorDialog.tsx deleted file mode 100644 index c8d62d124f..0000000000 --- a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelectorDialog.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * CloudBeaver - Cloud Database Manager - * Copyright (C) 2020-2023 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 { observer } from 'mobx-react-lite'; - -import { CommonDialogBody, CommonDialogHeader, CommonDialogWrapper, Loader, s, useS } from '@cloudbeaver/core-blocks'; - -import type { IDriver } from './Driver'; -import { DriverSelector } from './DriverSelector'; -import styles from './DriverSelectorDialog.m.css'; - -interface IProps { - title: string; - drivers: IDriver[]; - isLoading: boolean; - onSelect: (driverId: string) => void; - onClose: () => void; -} - -export const DriverSelectorDialog = observer(function DriverSelectorDialog({ title, drivers, isLoading, onSelect, onClose }) { - const style = useS(styles); - - return ( - - - - {isLoading && } - {!isLoading && } - - - ); -}); diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnectionPluginBootstrap.ts b/webapp/packages/plugin-connection-custom/src/CustomConnectionPluginBootstrap.ts index f28864745a..4a1ef9daf8 100644 --- a/webapp/packages/plugin-connection-custom/src/CustomConnectionPluginBootstrap.ts +++ b/webapp/packages/plugin-connection-custom/src/CustomConnectionPluginBootstrap.ts @@ -14,8 +14,8 @@ import { ActionService, MenuService } from '@cloudbeaver/core-view'; import { MENU_CONNECTIONS } from '@cloudbeaver/plugin-connections'; import { ACTION_CONNECTION_CUSTOM } from './Actions/ACTION_CONNECTION_CUSTOM'; -import { CustomConnectionDialog } from './CustomConnection/CustomConnectionDialog'; import { CustomConnectionSettingsService } from './CustomConnectionSettingsService'; +import { DriverSelectorDialog } from './DriverSelector/DriverSelectorDialog'; @injectable() export class CustomConnectionPluginBootstrap extends Bootstrap { @@ -67,6 +67,6 @@ export class CustomConnectionPluginBootstrap extends Bootstrap { load(): void | Promise {} private async openConnectionsDialog() { - await this.commonDialogService.open(CustomConnectionDialog, null); + await this.commonDialogService.open(DriverSelectorDialog, null); } } diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/Driver.m.css b/webapp/packages/plugin-connection-custom/src/DriverSelector/Driver.m.css similarity index 100% rename from webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/Driver.m.css rename to webapp/packages/plugin-connection-custom/src/DriverSelector/Driver.m.css diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/Driver.tsx b/webapp/packages/plugin-connection-custom/src/DriverSelector/Driver.tsx similarity index 100% rename from webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/Driver.tsx rename to webapp/packages/plugin-connection-custom/src/DriverSelector/Driver.tsx diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.m.css b/webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelector.m.css similarity index 100% rename from webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.m.css rename to webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelector.m.css diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.tsx b/webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelector.tsx similarity index 100% rename from webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.tsx rename to webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelector.tsx diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelectorDialog.m.css b/webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelectorDialog.m.css similarity index 100% rename from webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelectorDialog.m.css rename to webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelectorDialog.m.css diff --git a/webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelectorDialog.tsx b/webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelectorDialog.tsx new file mode 100644 index 0000000000..b7f5dabb83 --- /dev/null +++ b/webapp/packages/plugin-connection-custom/src/DriverSelector/DriverSelectorDialog.tsx @@ -0,0 +1,40 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2023 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 { observer } from 'mobx-react-lite'; + +import { CommonDialogBody, CommonDialogHeader, CommonDialogWrapper, s, useResource, useS, useTranslate } from '@cloudbeaver/core-blocks'; +import { DBDriverResource } from '@cloudbeaver/core-connections'; +import type { DialogComponent } from '@cloudbeaver/core-dialogs'; +import { ProjectInfoResource } from '@cloudbeaver/core-projects'; +import { CachedMapAllKey } from '@cloudbeaver/core-resource'; + +import { DriverSelector } from './DriverSelector'; +import styles from './DriverSelectorDialog.m.css'; +import { useDriverSelectorDialog } from './useDriverSelectorDialog'; + +export const DriverSelectorDialog: DialogComponent = observer(function DriverSelectorDialog({ rejectDialog }) { + const translate = useTranslate(); + const style = useS(styles); + useResource(DriverSelectorDialog, ProjectInfoResource, CachedMapAllKey, { forceSuspense: true }); + const dbDriverResource = useResource(DriverSelectorDialog, DBDriverResource, CachedMapAllKey); + + const enabledDrivers = dbDriverResource.resource.enabledDrivers; + const dialog = useDriverSelectorDialog( + enabledDrivers.map(driver => driver.id), + rejectDialog, + ); + + return ( + + + + + + + ); +}); diff --git a/webapp/packages/plugin-connection-custom/src/DriverSelector/useDriverSelectorDialog.ts b/webapp/packages/plugin-connection-custom/src/DriverSelector/useDriverSelectorDialog.ts new file mode 100644 index 0000000000..eef4995d07 --- /dev/null +++ b/webapp/packages/plugin-connection-custom/src/DriverSelector/useDriverSelectorDialog.ts @@ -0,0 +1,47 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2023 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 { action } from 'mobx'; + +import { useObservableRef } from '@cloudbeaver/core-blocks'; +import { ConnectionsManagerService } from '@cloudbeaver/core-connections'; +import { useService } from '@cloudbeaver/core-di'; +import { NotificationService } from '@cloudbeaver/core-events'; +import { PublicConnectionFormService } from '@cloudbeaver/plugin-connections'; + +interface State { + select(driverId: string): Promise; +} + +export function useDriverSelectorDialog(drivers: string[], onSelect?: () => void) { + const notificationService = useService(NotificationService); + const connectionsManagerService = useService(ConnectionsManagerService); + const publicConnectionFormService = useService(PublicConnectionFormService); + + const state: State = useObservableRef( + () => ({ + async select(driverId: string) { + const projects = this.connectionsManagerService.createConnectionProjects; + + if (projects.length === 0) { + this.notificationService.logError({ title: 'core_projects_no_default_project' }); + return; + } + + const state = await this.publicConnectionFormService.open(projects[0].id, { driverId }, this.drivers); + + if (state) { + onSelect?.(); + } + }, + }), + { select: action.bound }, + { drivers, notificationService, connectionsManagerService, publicConnectionFormService }, + ); + + return state; +} From c0f9d8d232c68840bf9bfc167a29555523d1310a Mon Sep 17 00:00:00 2001 From: serge-rider Date: Mon, 18 Dec 2023 10:31:08 +0300 Subject: [PATCH 2/4] 23.3.1 version bump --- server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.model/pom.xml | 2 +- server/bundles/io.cloudbeaver.product.ce/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.product.ce/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.resources.drivers.base/pom.xml | 2 +- server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.server/pom.xml | 2 +- .../bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.admin/pom.xml | 2 +- .../bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.auth/pom.xml | 2 +- .../io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.data.transfer/pom.xml | 2 +- server/bundles/io.cloudbeaver.service.fs/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.fs/pom.xml | 2 +- .../io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.metadata/pom.xml | 2 +- .../io.cloudbeaver.service.rm.nio/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.rm.nio/pom.xml | 2 +- server/bundles/io.cloudbeaver.service.rm/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.rm/pom.xml | 2 +- .../io.cloudbeaver.service.security/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.service.security/pom.xml | 2 +- server/bundles/io.cloudbeaver.slf4j/META-INF/MANIFEST.MF | 4 ++-- server/bundles/io.cloudbeaver.slf4j/pom.xml | 2 +- server/features/io.cloudbeaver.ce.drivers.feature/feature.xml | 2 +- server/features/io.cloudbeaver.ce.drivers.feature/pom.xml | 2 +- server/features/io.cloudbeaver.product.ce.feature/feature.xml | 2 +- server/features/io.cloudbeaver.product.ce.feature/pom.xml | 2 +- server/features/io.cloudbeaver.server.feature/feature.xml | 2 +- server/features/io.cloudbeaver.server.feature/pom.xml | 2 +- server/features/io.cloudbeaver.ws.feature/feature.xml | 2 +- server/features/io.cloudbeaver.ws.feature/pom.xml | 2 +- server/pom.xml | 2 +- server/product/web-server/CloudbeaverServer.product | 2 +- server/product/web-server/pom.xml | 2 +- 37 files changed, 50 insertions(+), 50 deletions(-) diff --git a/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF index a7bd3831cc..b29e0cb554 100644 --- a/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Model Bundle-SymbolicName: io.cloudbeaver.model;singleton:=true -Bundle-Version: 1.0.42.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.43.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.model/pom.xml b/server/bundles/io.cloudbeaver.model/pom.xml index a11f349cb7..5492731afd 100644 --- a/server/bundles/io.cloudbeaver.model/pom.xml +++ b/server/bundles/io.cloudbeaver.model/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.model - 1.0.42-SNAPSHOT + 1.0.43-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.product.ce/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.product.ce/META-INF/MANIFEST.MF index 61eefb9ec3..162440a105 100644 --- a/server/bundles/io.cloudbeaver.product.ce/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.product.ce/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Community Product Bundle-SymbolicName: io.cloudbeaver.product.ce;singleton:=true -Bundle-Version: 23.3.0.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 23.3.1.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.product.ce/pom.xml b/server/bundles/io.cloudbeaver.product.ce/pom.xml index 1ebbd7ac69..72bdfb0058 100644 --- a/server/bundles/io.cloudbeaver.product.ce/pom.xml +++ b/server/bundles/io.cloudbeaver.product.ce/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.product.ce - 23.3.0-SNAPSHOT + 23.3.1-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.resources.drivers.base/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.resources.drivers.base/META-INF/MANIFEST.MF index 16b950eab2..25a62c7810 100644 --- a/server/bundles/io.cloudbeaver.resources.drivers.base/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.resources.drivers.base/META-INF/MANIFEST.MF @@ -2,8 +2,8 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Base JDBC drivers Bundle-SymbolicName: io.cloudbeaver.resources.drivers.base;singleton:=true -Bundle-Version: 1.0.87.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.88.qualifier +Bundle-Release-Date: 20231225 Bundle-Vendor: DBeaver Corp Bundle-ActivationPolicy: lazy Automatic-Module-Name: io.cloudbeaver.resources.drivers.base diff --git a/server/bundles/io.cloudbeaver.resources.drivers.base/pom.xml b/server/bundles/io.cloudbeaver.resources.drivers.base/pom.xml index 913eb7c2d4..be7556b331 100644 --- a/server/bundles/io.cloudbeaver.resources.drivers.base/pom.xml +++ b/server/bundles/io.cloudbeaver.resources.drivers.base/pom.xml @@ -9,6 +9,6 @@ ../ io.cloudbeaver.resources.drivers.base - 1.0.87-SNAPSHOT + 1.0.88-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF index 6753e34728..de84d59d34 100644 --- a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Server Bundle-SymbolicName: io.cloudbeaver.server;singleton:=true -Bundle-Version: 23.3.0.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 23.3.1.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-Activator: io.cloudbeaver.server.CBPlatformActivator diff --git a/server/bundles/io.cloudbeaver.server/pom.xml b/server/bundles/io.cloudbeaver.server/pom.xml index 8e97d2a068..e8e094b262 100644 --- a/server/bundles/io.cloudbeaver.server/pom.xml +++ b/server/bundles/io.cloudbeaver.server/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.server - 23.3.0-SNAPSHOT + 23.3.1-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF index 23edb7313e..80140e1cf4 100644 --- a/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Service - Administration Bundle-SymbolicName: io.cloudbeaver.service.admin;singleton:=true -Bundle-Version: 1.0.86.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.87.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.admin/pom.xml b/server/bundles/io.cloudbeaver.service.admin/pom.xml index 8de3ad1a6d..bcab761d2a 100644 --- a/server/bundles/io.cloudbeaver.service.admin/pom.xml +++ b/server/bundles/io.cloudbeaver.service.admin/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.admin - 1.0.86-SNAPSHOT + 1.0.87-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF index dc191252f9..229c44bd72 100644 --- a/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Service - Authentication Bundle-SymbolicName: io.cloudbeaver.service.auth;singleton:=true -Bundle-Version: 1.0.86.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.87.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.auth/pom.xml b/server/bundles/io.cloudbeaver.service.auth/pom.xml index 891eccccfe..095723785a 100644 --- a/server/bundles/io.cloudbeaver.service.auth/pom.xml +++ b/server/bundles/io.cloudbeaver.service.auth/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.auth - 1.0.86-SNAPSHOT + 1.0.87-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF index 2a52d5638d..bd8ae32a38 100644 --- a/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Service - Data Transfer Bundle-SymbolicName: io.cloudbeaver.service.data.transfer;singleton:=true -Bundle-Version: 1.0.87.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.88.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/pom.xml b/server/bundles/io.cloudbeaver.service.data.transfer/pom.xml index fcb1a976db..c8f2c8f811 100644 --- a/server/bundles/io.cloudbeaver.service.data.transfer/pom.xml +++ b/server/bundles/io.cloudbeaver.service.data.transfer/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.data.transfer - 1.0.87-SNAPSHOT + 1.0.88-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.fs/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.fs/META-INF/MANIFEST.MF index de6f47e208..d29245754b 100644 --- a/server/bundles/io.cloudbeaver.service.fs/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.fs/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Service - File System Bundle-SymbolicName: io.cloudbeaver.service.fs;singleton:=true -Bundle-Version: 1.0.4.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.5.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.fs/pom.xml b/server/bundles/io.cloudbeaver.service.fs/pom.xml index 9a3cec1dd1..07f54c6e29 100644 --- a/server/bundles/io.cloudbeaver.service.fs/pom.xml +++ b/server/bundles/io.cloudbeaver.service.fs/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.fs - 1.0.4-SNAPSHOT + 1.0.5-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF index 51a920c346..b84a0ad21c 100644 --- a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Service - Metadata Bundle-SymbolicName: io.cloudbeaver.service.metadata;singleton:=true -Bundle-Version: 1.0.90.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.91.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.metadata/pom.xml b/server/bundles/io.cloudbeaver.service.metadata/pom.xml index dc0ec7155a..70540921b6 100644 --- a/server/bundles/io.cloudbeaver.service.metadata/pom.xml +++ b/server/bundles/io.cloudbeaver.service.metadata/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.metadata - 1.0.90-SNAPSHOT + 1.0.91-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.rm.nio/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.rm.nio/META-INF/MANIFEST.MF index c0edc03bc8..17c14323b1 100644 --- a/server/bundles/io.cloudbeaver.service.rm.nio/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.rm.nio/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Resource manager NIO implementation Bundle-SymbolicName: io.cloudbeaver.service.rm.nio;singleton:=true -Bundle-Version: 1.0.4.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.5.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.rm.nio/pom.xml b/server/bundles/io.cloudbeaver.service.rm.nio/pom.xml index d0f58fae05..ef3260d98c 100644 --- a/server/bundles/io.cloudbeaver.service.rm.nio/pom.xml +++ b/server/bundles/io.cloudbeaver.service.rm.nio/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.rm.nio - 1.0.4-SNAPSHOT + 1.0.5-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.rm/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.rm/META-INF/MANIFEST.MF index 19b158bda8..0e0bcbdea1 100644 --- a/server/bundles/io.cloudbeaver.service.rm/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.rm/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: Cloudbeaver Web Service - Resource manager Bundle-SymbolicName: io.cloudbeaver.service.rm;singleton:=true -Bundle-Version: 1.0.39.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.40.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.rm/pom.xml b/server/bundles/io.cloudbeaver.service.rm/pom.xml index 2d2425fa0b..c895568070 100644 --- a/server/bundles/io.cloudbeaver.service.rm/pom.xml +++ b/server/bundles/io.cloudbeaver.service.rm/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.rm - 1.0.39-SNAPSHOT + 1.0.40-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.security/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.security/META-INF/MANIFEST.MF index 31a27a3d52..6dc55c289b 100644 --- a/server/bundles/io.cloudbeaver.service.security/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.security/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: Cloudbeaver Web Service - Security Bundle-Vendor: DBeaver Corp Bundle-SymbolicName: io.cloudbeaver.service.security;singleton:=true -Bundle-Version: 1.0.42.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.43.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.service.security/pom.xml b/server/bundles/io.cloudbeaver.service.security/pom.xml index 6010a7dd8c..3f07b747ae 100644 --- a/server/bundles/io.cloudbeaver.service.security/pom.xml +++ b/server/bundles/io.cloudbeaver.service.security/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.service.security - 1.0.42-SNAPSHOT + 1.0.43-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.slf4j/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.slf4j/META-INF/MANIFEST.MF index d728e5c388..1e1762950e 100644 --- a/server/bundles/io.cloudbeaver.slf4j/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.slf4j/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Vendor: DBeaver Corp Bundle-Name: CloudBeaver SLF4j Binding Bundle-SymbolicName: io.cloudbeaver.slf4j;singleton:=true -Bundle-Version: 1.0.2.qualifier -Bundle-Release-Date: 20231204 +Bundle-Version: 1.0.3.qualifier +Bundle-Release-Date: 20231225 Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . diff --git a/server/bundles/io.cloudbeaver.slf4j/pom.xml b/server/bundles/io.cloudbeaver.slf4j/pom.xml index 2071df3b98..973dec34f8 100644 --- a/server/bundles/io.cloudbeaver.slf4j/pom.xml +++ b/server/bundles/io.cloudbeaver.slf4j/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.slf4j - 1.0.2-SNAPSHOT + 1.0.3-SNAPSHOT eclipse-plugin diff --git a/server/features/io.cloudbeaver.ce.drivers.feature/feature.xml b/server/features/io.cloudbeaver.ce.drivers.feature/feature.xml index 15bf2d5fa6..e804edf56c 100644 --- a/server/features/io.cloudbeaver.ce.drivers.feature/feature.xml +++ b/server/features/io.cloudbeaver.ce.drivers.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/server/features/io.cloudbeaver.ce.drivers.feature/pom.xml b/server/features/io.cloudbeaver.ce.drivers.feature/pom.xml index 62cfcf189f..5ffa614c64 100644 --- a/server/features/io.cloudbeaver.ce.drivers.feature/pom.xml +++ b/server/features/io.cloudbeaver.ce.drivers.feature/pom.xml @@ -9,6 +9,6 @@ ../ io.cloudbeaver.ce.drivers.feature - 1.0.110-SNAPSHOT + 1.0.111-SNAPSHOT eclipse-feature diff --git a/server/features/io.cloudbeaver.product.ce.feature/feature.xml b/server/features/io.cloudbeaver.product.ce.feature/feature.xml index e60183e943..a9055d5f60 100644 --- a/server/features/io.cloudbeaver.product.ce.feature/feature.xml +++ b/server/features/io.cloudbeaver.product.ce.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/server/features/io.cloudbeaver.product.ce.feature/pom.xml b/server/features/io.cloudbeaver.product.ce.feature/pom.xml index f793147cc1..434dade9bf 100644 --- a/server/features/io.cloudbeaver.product.ce.feature/pom.xml +++ b/server/features/io.cloudbeaver.product.ce.feature/pom.xml @@ -10,7 +10,7 @@ ../ io.cloudbeaver.product.ce.feature - 23.3.0-SNAPSHOT + 23.3.1-SNAPSHOT eclipse-feature diff --git a/server/features/io.cloudbeaver.server.feature/feature.xml b/server/features/io.cloudbeaver.server.feature/feature.xml index 6bfc7fd629..70897e5314 100644 --- a/server/features/io.cloudbeaver.server.feature/feature.xml +++ b/server/features/io.cloudbeaver.server.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/server/features/io.cloudbeaver.server.feature/pom.xml b/server/features/io.cloudbeaver.server.feature/pom.xml index 7384d8d592..a396a1475a 100644 --- a/server/features/io.cloudbeaver.server.feature/pom.xml +++ b/server/features/io.cloudbeaver.server.feature/pom.xml @@ -10,6 +10,6 @@ ../ io.cloudbeaver.server.feature - 23.3.0-SNAPSHOT + 23.3.1-SNAPSHOT eclipse-feature diff --git a/server/features/io.cloudbeaver.ws.feature/feature.xml b/server/features/io.cloudbeaver.ws.feature/feature.xml index ea8c8d761a..01515ea22a 100644 --- a/server/features/io.cloudbeaver.ws.feature/feature.xml +++ b/server/features/io.cloudbeaver.ws.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/server/features/io.cloudbeaver.ws.feature/pom.xml b/server/features/io.cloudbeaver.ws.feature/pom.xml index eb4f4cade0..0f2d59df8a 100644 --- a/server/features/io.cloudbeaver.ws.feature/pom.xml +++ b/server/features/io.cloudbeaver.ws.feature/pom.xml @@ -10,6 +10,6 @@ ../ io.cloudbeaver.ws.feature - 1.0.40-SNAPSHOT + 1.0.41-SNAPSHOT eclipse-feature diff --git a/server/pom.xml b/server/pom.xml index 56264f9211..7f498ad9bf 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -19,7 +19,7 @@ CloudBeaver CE - 23.3.0 + 23.3.1 diff --git a/server/product/web-server/CloudbeaverServer.product b/server/product/web-server/CloudbeaverServer.product index f283c6b6cf..9ab14b5272 100644 --- a/server/product/web-server/CloudbeaverServer.product +++ b/server/product/web-server/CloudbeaverServer.product @@ -2,7 +2,7 @@ diff --git a/server/product/web-server/pom.xml b/server/product/web-server/pom.xml index 4e06ae7223..0b34f579b2 100644 --- a/server/product/web-server/pom.xml +++ b/server/product/web-server/pom.xml @@ -9,7 +9,7 @@ 1.0.0-SNAPSHOT ../../ - 23.3.0-SNAPSHOT + 23.3.1-SNAPSHOT web-server eclipse-repository Cloudbeaver Server Product From dcddb57cee51234bad6f93c11af394497339042f Mon Sep 17 00:00:00 2001 From: serge-rider Date: Mon, 18 Dec 2023 10:31:37 +0300 Subject: [PATCH 3/4] 23.3.1 version bump --- webapp/packages/product-default/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/packages/product-default/package.json b/webapp/packages/product-default/package.json index 2341c47c2f..e8286b8e14 100644 --- a/webapp/packages/product-default/package.json +++ b/webapp/packages/product-default/package.json @@ -5,7 +5,7 @@ "src/**/*.scss", "public/**/*" ], - "version": "23.3.0", + "version": "23.3.1", "description": "CloudBeaver Community", "license": "Apache-2.0", "main": "dist/index.js", From eb1ff964879cd6983e7b39217a2464c9357ad2a6 Mon Sep 17 00:00:00 2001 From: sergeyteleshev Date: Mon, 18 Dec 2023 13:03:19 +0100 Subject: [PATCH 4/4] CB-4356 useForm does not switch tabs like insane after press enter (#2211) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CB-4334. Added new property for ObjectPropertyInfo. * CB-4277. Fixed typo * CB-4335 added to gql "required" property for form inputs * CB-4335 added required properties to all inputs of ObjectPropertyInfoForm * CB-4335 added to useForm submit events handling * CB-4335 create connection form uses useForm hook (first iteration) * CB-4335 required fix for render field * CB-4335 actions not required fix for connection form * CB-4335 identify providers forms uses useForm * CB-4335 connection form has scroll and access tab * enable panels tab switch on invalid text input for SSH and SSL tabs * CB-4335 all dynamic fields shows correctly * СB-4335 made textarea required * CB-4335 user authorization and change password has useForms * CB-4335 team meta uses useForms * CB-4335 team form actions uses react context * CB-4335 Add ConnectionFormActionsContext to ConnectionFormBaseActions * CB-4335 Remove unnecessary required attribute from AuthProviderForm component * CB-4356 useForm does not switch tabs like insane after press enter * CB-4335. Added required parameter to AuthProviderInfo * CB-4335 auth provider form has required property * Revert "CB-4356 useForm does not switch tabs like insane after press enter" This reverts commit 6f658eb51e5f38dab425e2543f55a00581cbb17a. * CB-4356 tab panel does not switch on each enter press * CB-4356 clean code in tabPanel component * CB-4356 TabPanelValidation handler for switching tabs * CB-4356 cleanup for useExecutor, TabState, TabPanel components * CB-4356 switch tabs simplified (cleanup) * CB-4356 highlight invalid fields after tab being switched * CB-4356 added license to TabPanelValidation * CB-4356 remove unneeded dep from useExecutor * CB-4356 chore: refactor tabs validation * feat(CB-4356): clear tabs validation state before start new one * Revert "feat(CB-4356): clear tabs validation state before start new one" This reverts commit 76b0a9c5ce345184d7ca9fb999ba31bf28dc0576. * CB-4356 reset invalid element before form validation * CB-4356 fix: executor collection usage * fix: required field should not be required if it is readonly * CB-4356 fix: forms shows child content correctly * Revert "CB-4356 fix: forms shows child content correctly" This reverts commit 4fd046b690f8eb6a09ad6cf1a7d037c2eead6b97. * CB-4356 fix: TeamForm show users tab correctly * CB-4356 fix: ssh key doesnt required if it is saved * CB-4356 remove unique id error in console * CB-4356 fix: error with form validation * Revert "CB-4356 fix: error with form validation" This reverts commit 0dce34f8b4de40bce91146b8eecb614b2cab692a. --------- Co-authored-by: Denis Sinelnikov Co-authored-by: s.teleshev Co-authored-by: Aleksei Potsetsuev Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com> --- .../io/cloudbeaver/model/WebPropertyInfo.java | 5 + .../registry/WebAuthProviderDescriptor.java | 6 + .../schema/service.core.graphqls | 2 + .../model/user/WebAuthProviderInfo.java | 4 + .../schema/service.auth.graphqls | 2 + .../plugin.xml | 4 +- .../FormControls/Checkboxes/FieldCheckbox.tsx | 1 - .../src/FormControls/FormContext.ts | 2 +- .../core-blocks/src/FormControls/Textarea.tsx | 1 + .../core-blocks/src/FormControls/useForm.ts | 6 +- .../ObjectPropertyInfoForm/RenderField.tsx | 9 + .../packages/core-blocks/src/useExecutor.ts | 16 +- .../src/ExecutorHandlersCollection.ts | 2 +- .../src/queries/connections/getAuthModels.gql | 1 + .../getDataTransferProcessors.gql | 1 + .../AuthProviderConfigurationParameters.gql | 1 + .../queries/fragments/AuthProviderInfo.gql | 1 + .../fragments/DriverProviderPropertyInfo.gql | 1 + .../queries/fragments/NavNodeProperties.gql | 1 + .../queries/fragments/ObjectOriginInfo.gql | 1 + .../queries/fragments/ObjectPropertyInfo.gql | 1 + .../UserConnectionAuthProperties.gql | 1 + ...UserConnectionNetworkHandlerProperties.gql | 1 + .../grid/getSqlExecutionPlanResult.gql | 1 + webapp/packages/core-ui/src/Tabs/TabPanel.tsx | 64 ++--- .../packages/core-ui/src/Tabs/TabsState.tsx | 7 +- ...VALIDATION.ts => TabsValidationContext.ts} | 8 +- .../src/Tabs/TabsValidationProvider.tsx | 71 ++++++ .../core-ui/src/Tabs/useTabsValidation.ts | 89 +++++++ webapp/packages/core-ui/src/locales/en.ts | 1 + webapp/packages/core-ui/src/locales/it.ts | 1 + webapp/packages/core-ui/src/locales/ru.ts | 1 + .../AuthConfigurationForm.tsx | 63 +++-- .../AuthConfigurationFormBaseActions.tsx | 4 +- .../IAuthConfigurationFormProps.ts | 5 + .../Options/AuthConfigurationOptions.tsx | 239 +++++++++--------- .../Users/Teams/Options/TeamOptions.tsx | 36 ++- .../Administration/Users/Teams/TeamForm.tsx | 27 +- .../Users/Teams/TeamFormActionsContext.ts | 8 + .../Users/Teams/TeamFormBaseActions.tsx | 9 +- .../AuthProviderForm/AuthProviderForm.tsx | 1 + .../ConnectFormActionsContext.ts | 9 + .../src/ConnectionForm/ConnectionForm.m.css | 7 + .../src/ConnectionForm/ConnectionForm.tsx | 63 +++-- .../ConnectionFormBaseActions.tsx | 12 +- .../src/ConnectionForm/SSH/SSH.tsx | 2 +- .../src/ConnectionForm/SSH/SSHKeyUploader.tsx | 2 +- .../src/ConnectionForm/SSH/SSHPanel.tsx | 5 +- .../src/ConnectionForm/SSL/SSL.tsx | 2 +- .../src/ConnectionForm/SSL/SSLPanel.tsx | 5 +- .../ChangePassword/ChangePassword.tsx | 60 +++-- 51 files changed, 571 insertions(+), 301 deletions(-) rename webapp/packages/core-ui/src/Tabs/{DATA_CONTEXT_TABS_FORM_VALIDATION.ts => TabsValidationContext.ts} (51%) create mode 100644 webapp/packages/core-ui/src/Tabs/TabsValidationProvider.tsx create mode 100644 webapp/packages/core-ui/src/Tabs/useTabsValidation.ts create mode 100644 webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormActionsContext.ts create mode 100644 webapp/packages/plugin-connections/src/ConnectionForm/ConnectFormActionsContext.ts create mode 100644 webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.m.css diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebPropertyInfo.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebPropertyInfo.java index 1d48cd397f..d9212fb25c 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebPropertyInfo.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebPropertyInfo.java @@ -173,6 +173,11 @@ public class WebPropertyInfo { return new String[0]; } + @Property + public boolean isRequired() { + return property.isRequired(); + } + public boolean hasFeature(@NotNull String feature) { return property.hasFeature(feature); } diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java index 40ef7acbee..831d6eba0a 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java @@ -55,6 +55,7 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor { private final boolean trusted; private final boolean isPrivate; private final String[] requiredFeatures; + private final boolean isRequired; public WebAuthProviderDescriptor(IConfigurationElement cfg) { super(cfg); @@ -64,6 +65,7 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor { this.configurable = CommonUtils.toBoolean(cfg.getAttribute("configurable")); this.trusted = CommonUtils.toBoolean(cfg.getAttribute("trusted")); this.isPrivate = CommonUtils.toBoolean(cfg.getAttribute("private")); + this.isRequired = CommonUtils.toBoolean(cfg.getAttribute("required")); for (IConfigurationElement cfgElement : cfg.getChildren("configuration")) { for (IConfigurationElement propGroup : ArrayUtils.safeArray(cfgElement.getChildren(PropertyDescriptor.TAG_PROPERTY_GROUP))) { @@ -124,6 +126,10 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor { return isPrivate; } + public boolean isRequired() { + return isRequired; + } + public List getConfigurationParameters() { return new ArrayList<>(configurationParameters.values()); } diff --git a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls index 59a0094df7..0b8b0b8a2a 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls @@ -36,6 +36,8 @@ type ObjectPropertyInfo { order: Int! # Supported configuration types (for driver properties) supportedConfigurationTypes: [ String! ] + # Required parameters + required: Boolean! @since(version: "23.3.1") } enum ObjectPropertyLength { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProviderInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProviderInfo.java index d5f2dee003..9175b980dd 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProviderInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProviderInfo.java @@ -83,6 +83,10 @@ public class WebAuthProviderInfo { return descriptor.isPrivate(); } + public boolean isRequired() { + return descriptor.isRequired(); + } + public boolean isSupportProvisioning() { return descriptor.getInstance() instanceof SMProvisioner; } diff --git a/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls index 865aa3b9fa..82530a3bc7 100644 --- a/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls +++ b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls @@ -72,6 +72,8 @@ type AuthProviderInfo { credentialProfiles: [AuthProviderCredentialsProfile!]! requiredFeatures: [String!]! + + required: Boolean! } type AuthInfo { diff --git a/server/bundles/io.cloudbeaver.service.security/plugin.xml b/server/bundles/io.cloudbeaver.service.security/plugin.xml index b26bf58784..88eff847ae 100644 --- a/server/bundles/io.cloudbeaver.service.security/plugin.xml +++ b/server/bundles/io.cloudbeaver.service.security/plugin.xml @@ -9,8 +9,8 @@ icon="platform:/plugin/org.jkiss.dbeaver.model/icons/tree/key.png"> - - + + diff --git a/webapp/packages/core-blocks/src/FormControls/Checkboxes/FieldCheckbox.tsx b/webapp/packages/core-blocks/src/FormControls/Checkboxes/FieldCheckbox.tsx index 6bf183b379..35e292b911 100644 --- a/webapp/packages/core-blocks/src/FormControls/Checkboxes/FieldCheckbox.tsx +++ b/webapp/packages/core-blocks/src/FormControls/Checkboxes/FieldCheckbox.tsx @@ -8,7 +8,6 @@ import { observer } from 'mobx-react-lite'; import { filterLayoutFakeProps, getLayoutProps } from '../../Containers/filterLayoutFakeProps'; -import elementsSizeStyles from '../../Containers/shared/ElementsSize.m.css'; import { s } from '../../s'; import { useS } from '../../useS'; import { Field } from '../Field'; diff --git a/webapp/packages/core-blocks/src/FormControls/FormContext.ts b/webapp/packages/core-blocks/src/FormControls/FormContext.ts index 98042f8c0e..306a25f08b 100644 --- a/webapp/packages/core-blocks/src/FormControls/FormContext.ts +++ b/webapp/packages/core-blocks/src/FormControls/FormContext.ts @@ -21,7 +21,7 @@ export interface IChangeData { export interface IFormContext { ref: HTMLFormElement | null; onValidate: SyncExecutor; - onSubmit: SyncExecutor; + onSubmit: SyncExecutor; onChange: IExecutor; parent: IFormContext | null; disableEnterSubmit: boolean; diff --git a/webapp/packages/core-blocks/src/FormControls/Textarea.tsx b/webapp/packages/core-blocks/src/FormControls/Textarea.tsx index fb3b956208..f06b05a791 100644 --- a/webapp/packages/core-blocks/src/FormControls/Textarea.tsx +++ b/webapp/packages/core-blocks/src/FormControls/Textarea.tsx @@ -86,6 +86,7 @@ export const Textarea: TextareaType = observer(function Textarea({ + + {translate('administration_identity_providers_provider_configuration_icon_url')} + + + {translate('administration_identity_providers_provider_configuration_disabled')} + + + {parameters.isLoaded() && parameters.data && ( + <> + {isUncategorizedExists && ( + + {translate('administration_identity_providers_provider_configuration_parameters')} + + + )} + {categories.map(category => ( + + {category} + + + ))} + + )} + {(state.config.metadataLink || state.config.signInLink || state.config.signOutLink || state.config.acsLink) && ( - {translate('administration_identity_providers_provider_configuration_links')} + provider.id} - valueSelector={provider => provider.label} - iconSelector={provider => provider.icon} - titleSelector={provider => provider.description} - placeholder={translate('administration_identity_providers_choose_provider_placeholder')} - readOnly={state.readonly || edit} + title={state.config.signInLink} disabled={state.disabled} - required - tiny - fill - onSelect={handleProviderSelect} + autoHide + readOnly + onCustomCopy={() => copy(state.config.signInLink!, true)} > - {translate('administration_identity_providers_provider')} - - - {translate('administration_identity_providers_provider_id')} + Sign in - - {translate('administration_identity_providers_provider_configuration_name')} - - - - {translate('administration_identity_providers_provider_configuration_icon_url')} - - copy(state.config.signOutLink!, true)} > - {translate('administration_identity_providers_provider_configuration_disabled')} - + Sign out + + copy(state.config.redirectLink!, true)} + > + Redirect + + copy(state.config.acsLink!, true)} + > + ACS + + {state.config.metadataLink && ( + + {translate('administration_identity_providers_provider_configuration_links_metadata')} + + )} - {parameters.isLoaded() && parameters.data && ( - <> - {isUncategorizedExists && ( - - {translate('administration_identity_providers_provider_configuration_parameters')} - - - )} - {categories.map(category => ( - - {category} - - - ))} - - )} - {(state.config.metadataLink || state.config.signInLink || state.config.signOutLink || state.config.acsLink) && ( - - {translate('administration_identity_providers_provider_configuration_links')} - copy(state.config.signInLink!, true)} - > - Sign in - - copy(state.config.signOutLink!, true)} - > - Sign out - - copy(state.config.redirectLink!, true)} - > - Redirect - - copy(state.config.acsLink!, true)} - > - ACS - - {state.config.metadataLink && ( - - {translate('administration_identity_providers_provider_configuration_links_metadata')} - - )} - - )} - - , + )} + ); }); diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/Options/TeamOptions.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/Options/TeamOptions.tsx index 2455a60f2d..57ea0c723e 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/Options/TeamOptions.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/Options/TeamOptions.tsx @@ -6,10 +6,9 @@ * you may not use this file except in compliance with the License. */ import { observer } from 'mobx-react-lite'; -import { useRef } from 'react'; import styled, { css } from 'reshadow'; -import { ColoredContainer, Form, Group, InputField, Textarea, useResource, useStyles, useTranslate } from '@cloudbeaver/core-blocks'; +import { ColoredContainer, Group, InputField, Textarea, useResource, useStyles, useTranslate } from '@cloudbeaver/core-blocks'; import { ServerConfigResource } from '@cloudbeaver/core-root'; import type { TabContainerPanelComponent } from '@cloudbeaver/core-ui'; @@ -27,27 +26,24 @@ const styles = css` export const TeamOptions: TabContainerPanelComponent = observer(function TeamOptions({ state }) { const serverConfigResource = useResource(TeamOptions, ServerConfigResource, undefined); const style = useStyles(styles); - const formRef = useRef(null); const translate = useTranslate(); const edit = state.mode === 'edit'; return styled(style)( -
- - - - {translate('administration_teams_team_id')} - - - {translate('administration_teams_team_name')} - - - - {!serverConfigResource.resource.distributed && } - - -
, + + + + {translate('administration_teams_team_id')} + + + {translate('administration_teams_team_name')} + + + + {!serverConfigResource.resource.distributed && } + + ); }); diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamForm.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamForm.tsx index da1a8606a6..19888ccb04 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamForm.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamForm.tsx @@ -10,13 +10,14 @@ import { useEffect } from 'react'; import styled, { css } from 'reshadow'; import type { TeamInfo } from '@cloudbeaver/core-authentication'; -import { IconOrImage, Loader, Placeholder, useExecutor, useObjectRef, useStyles, useTranslate } from '@cloudbeaver/core-blocks'; +import { Form, IconOrImage, Loader, Placeholder, useExecutor, useForm, useObjectRef, useStyles, useTranslate } from '@cloudbeaver/core-blocks'; import { useService } from '@cloudbeaver/core-di'; import { BASE_TAB_STYLES, TabList, TabPanelList, TabsState, UNDERLINE_TAB_BIG_STYLES, UNDERLINE_TAB_STYLES } from '@cloudbeaver/core-ui'; import { teamContext } from './Contexts/teamContext'; import type { ITeamFormState } from './ITeamFormProps'; import { TeamFormService } from './TeamFormService'; +import { ITeamFormActionsContext, TeamFormActionsContext } from './TeamFormActionsContext'; const tabsStyles = css` TabList { @@ -85,6 +86,14 @@ const formStyles = css` flex-direction: column; overflow: auto; } + Form { + width: 100%; + height: 100%; + display: flex; + flex: 1; + flex-direction: column; + overflow: auto; + } `; interface Props { @@ -100,6 +109,12 @@ export const TeamForm = observer(function TeamForm({ state, onCancel, onS const style = [BASE_TAB_STYLES, tabsStyles, UNDERLINE_TAB_STYLES, UNDERLINE_TAB_BIG_STYLES]; const styles = useStyles(style, topBarStyles, formStyles); const service = useService(TeamFormService); + const form = useForm({ + onSubmit: state.save, + }); + const actions = useObjectRef({ + save: async () => form.submit(), + }); useExecutor({ executor: state.submittingTask, @@ -121,7 +136,8 @@ export const TeamForm = observer(function TeamForm({ state, onCancel, onS }, []); return styled(styles)( - +
+ @@ -137,7 +153,9 @@ export const TeamForm = observer(function TeamForm({ state, onCancel, onS - + + + @@ -145,6 +163,7 @@ export const TeamForm = observer(function TeamForm({ state, onCancel, onS - , + +
, ); }); diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormActionsContext.ts b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormActionsContext.ts new file mode 100644 index 0000000000..1ee0f2893d --- /dev/null +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormActionsContext.ts @@ -0,0 +1,8 @@ +import { createContext } from 'react'; +import type { ITeamFormState } from './ITeamFormProps'; + +export interface ITeamFormActionsContext { + save: ITeamFormState['save']; +} + +export const TeamFormActionsContext = createContext(null); \ No newline at end of file diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormBaseActions.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormBaseActions.tsx index b57d5dc92b..4c44c84125 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormBaseActions.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamFormBaseActions.tsx @@ -10,9 +10,16 @@ import { observer } from 'mobx-react-lite'; import { Button, PlaceholderComponent, useTranslate } from '@cloudbeaver/core-blocks'; import type { ITeamFormProps } from './ITeamFormProps'; +import { useContext } from 'react'; +import { TeamFormActionsContext } from './TeamFormActionsContext'; export const TeamFormBaseActions: PlaceholderComponent = observer(function TeamFormBaseActions({ state, onCancel }) { const translate = useTranslate(); + const actions = useContext(TeamFormActionsContext); + + if (!actions) { + throw new Error('TeamFormActionsContext not provided'); + } return ( <> @@ -21,7 +28,7 @@ export const TeamFormBaseActions: PlaceholderComponent = observe {translate('ui_processing_cancel')} )} - diff --git a/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/AuthProviderForm.tsx b/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/AuthProviderForm.tsx index af1ea5aefe..4f2d22e5dc 100644 --- a/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/AuthProviderForm.tsx +++ b/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/AuthProviderForm.tsx @@ -46,6 +46,7 @@ export const AuthProviderForm = observer(function AuthProviderForm({ prov parameter.user && ( (null); \ No newline at end of file diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.m.css b/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.m.css new file mode 100644 index 0000000000..b3fbf5b933 --- /dev/null +++ b/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.m.css @@ -0,0 +1,7 @@ +.form { + overflow: auto; + display: flex; + flex-direction: column; + flex: 1; + height: 100%; +} \ No newline at end of file diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.tsx index 2b14c1a281..3b1fe153e2 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionForm.tsx @@ -9,7 +9,7 @@ import { observer } from 'mobx-react-lite'; import { useEffect } from 'react'; import styled, { css } from 'reshadow'; -import { ExceptionMessage, Loader, Placeholder, StatusMessage, useExecutor, useObjectRef, useStyles } from '@cloudbeaver/core-blocks'; +import { ExceptionMessage, Form, Loader, Placeholder, StatusMessage, useExecutor, useForm, useObjectRef, useStyles } from '@cloudbeaver/core-blocks'; import { useService } from '@cloudbeaver/core-di'; import { ENotificationType } from '@cloudbeaver/core-events'; import type { ConnectionConfig } from '@cloudbeaver/core-sdk'; @@ -18,6 +18,8 @@ import { BASE_TAB_STYLES, TabList, TabPanelList, TabsState, UNDERLINE_TAB_BIG_ST import { ConnectionFormService } from './ConnectionFormService'; import { connectionConfigContext } from './Contexts/connectionConfigContext'; import type { IConnectionFormState } from './IConnectionFormProps'; +import connectionFormStyles from './ConnectionForm.m.css'; +import { ConnectionFormActionsContext, IConnectionFormActionsContext } from './ConnectFormActionsContext'; const tabsStyles = css` TabList { @@ -106,6 +108,21 @@ export const ConnectionForm = observer(function ConnectionF const style = [BASE_TAB_STYLES, tabsStyles, UNDERLINE_TAB_STYLES, UNDERLINE_TAB_BIG_STYLES]; const styles = useStyles(style, topBarStyles, formStyles); const service = useService(ConnectionFormService); + + const form = useForm({ + onSubmit: event => { + if (event?.type === 'test') { + state.test(); + } else { + state.save(); + } + }, + }); + + const actionsContext = useObjectRef(() => ({ + save: async () => form.submit(new SubmitEvent('submit')), + test: async () => form.submit(new SubmitEvent('test')), + })); useExecutor({ executor: state.submittingTask, @@ -139,25 +156,29 @@ export const ConnectionForm = observer(function ConnectionF } return styled(styles)( - - - - - - - - - - - - - - - - - - - - , +
+ + + + + + + + + + + + + + + + + + + + + + +
, ); }); diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionFormBaseActions.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionFormBaseActions.tsx index c0c0c47a79..617d6751ef 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionFormBaseActions.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/ConnectionFormBaseActions.tsx @@ -13,11 +13,19 @@ import { DatabaseAuthModelsResource, DBDriverResource } from '@cloudbeaver/core- import { useAuthenticationAction } from '@cloudbeaver/core-ui'; import type { IConnectionFormProps } from './IConnectionFormProps'; +import { useContext } from 'react'; +import { ConnectionFormActionsContext } from './ConnectFormActionsContext'; export const ConnectionFormBaseActions: PlaceholderComponent = observer(function ConnectionFormBaseActions({ state, onCancel, }) { + const actions = useContext(ConnectionFormActionsContext); + + if (!actions) { + throw new Error('ConnectionFormActionsContext not provided'); + } + const translate = useTranslate(); const driverMap = useResource(ConnectionFormBaseActions, DBDriverResource, state.config.driverId || null); @@ -40,10 +48,10 @@ export const ConnectionFormBaseActions: PlaceholderComponent )} - - diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSH.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSH.tsx index cdbada9d62..483936d90b 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSH.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSH.tsx @@ -95,7 +95,7 @@ export const SSH: TabContainerPanelComponent = observer(function SSH({ st
- + {translate('connections_network_handler_ssh_tunnel_enable')} (function SSHKeyUploader({ state, s disabled={disabled} readOnly={readonly} description={saved ? translate('ui_processing_saved') : undefined} - required={state.savePassword} + required={state.savePassword && !saved} medium > {translate('connections_network_handler_ssh_tunnel_private_key')} diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSHPanel.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSHPanel.tsx index 28de5386a6..5f8fa39b4b 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSHPanel.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/SSH/SSHPanel.tsx @@ -8,16 +8,15 @@ import { observer } from 'mobx-react-lite'; import { SSH_TUNNEL_ID } from '@cloudbeaver/core-connections'; -import { TabContainerPanelComponent, useTab } from '@cloudbeaver/core-ui'; +import type { TabContainerPanelComponent } from '@cloudbeaver/core-ui'; import type { IConnectionFormProps } from '../IConnectionFormProps'; import { SSH } from './SSH'; export const SSHPanel: TabContainerPanelComponent = observer(function SSHPanel(props) { const state = props.state.config.networkHandlersConfig?.find(state => state.id === SSH_TUNNEL_ID); - const tab = useTab(props.tabId); - if (!state || !tab.selected) { + if (!state) { return null; } diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSL.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSL.tsx index 0935e9c0b3..14d206c68a 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSL.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSL.tsx @@ -61,7 +61,7 @@ export const SSL: TabContainerPanelComponent = observer(function SSL({ st - + {translate('connections_public_connection_ssl_enable')} {isUncategorizedExists && ( diff --git a/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSLPanel.tsx b/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSLPanel.tsx index 37845646a5..3d8b92b533 100644 --- a/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSLPanel.tsx +++ b/webapp/packages/plugin-connections/src/ConnectionForm/SSL/SSLPanel.tsx @@ -10,7 +10,7 @@ import { observer } from 'mobx-react-lite'; import { useResource } from '@cloudbeaver/core-blocks'; import { DBDriverResource, NetworkHandlerResource } from '@cloudbeaver/core-connections'; import { CachedMapAllKey } from '@cloudbeaver/core-resource'; -import { TabContainerTabComponent, useTab } from '@cloudbeaver/core-ui'; +import type { TabContainerTabComponent } from '@cloudbeaver/core-ui'; import type { IConnectionFormProps } from '../IConnectionFormProps'; import { getSSLDefaultConfig } from './getSSLDefaultConfig'; @@ -18,7 +18,6 @@ import { getSSLDriverHandler } from './getSSLDriverHandler'; import { SSL } from './SSL'; export const SSLPanel: TabContainerTabComponent = observer(function SSLPanel(props) { - const tab = useTab(props.tabId); const networkHandlerResource = useResource(SSLPanel, NetworkHandlerResource, CachedMapAllKey); const dbDriverResource = useResource(SSLPanel, DBDriverResource, props.state.config.driverId ?? null); @@ -30,7 +29,7 @@ export const SSLPanel: TabContainerTabComponent = observer const handlerState = props.state.config.networkHandlersConfig?.find(h => h.id === handler?.id); - if (!handler || !handlerState || !tab.selected) { + if (!handler || !handlerState) { return null; } diff --git a/webapp/packages/plugin-user-profile/src/UserProfileForm/Authentication/ChangePassword/ChangePassword.tsx b/webapp/packages/plugin-user-profile/src/UserProfileForm/Authentication/ChangePassword/ChangePassword.tsx index 63aba69082..b1539b5f0f 100644 --- a/webapp/packages/plugin-user-profile/src/UserProfileForm/Authentication/ChangePassword/ChangePassword.tsx +++ b/webapp/packages/plugin-user-profile/src/UserProfileForm/Authentication/ChangePassword/ChangePassword.tsx @@ -7,42 +7,46 @@ */ import { observer } from 'mobx-react-lite'; -import { Button, Group, GroupItem, GroupTitle, InputField, useTranslate } from '@cloudbeaver/core-blocks'; +import { Button, Form, Group, GroupItem, GroupTitle, InputField, useForm, useTranslate } from '@cloudbeaver/core-blocks'; import { useChangePassword } from './useChangePassword'; export const ChangePassword = observer(function ChangePassword() { const translate = useTranslate(); const state = useChangePassword(); - const disabled = state.submitting; + const form = useForm({ + onSubmit: state.changePassword, + }); return ( - - {translate('plugin_user_profile_authentication_change_password')} - value.trim()} small required> - {translate('plugin_user_profile_authentication_change_password_current_password')} - - value.trim()} - small - required - > - {translate('plugin_user_profile_authentication_change_password_new_password')} - - value.trim()} small required> - {translate('plugin_user_profile_authentication_change_password_repeat_password')} - - - - - + + + {translate('plugin_user_profile_authentication_change_password')} + value.trim()} small required> + {translate('plugin_user_profile_authentication_change_password_current_password')} + + value.trim()} + small + required + > + {translate('plugin_user_profile_authentication_change_password_new_password')} + + value.trim()} small required> + {translate('plugin_user_profile_authentication_change_password_repeat_password')} + + + + + + ); });