diff --git a/webapp/packages/core-localization/src/locales/en.ts b/webapp/packages/core-localization/src/locales/en.ts index 202d67bd1a..771fb1063a 100644 --- a/webapp/packages/core-localization/src/locales/en.ts +++ b/webapp/packages/core-localization/src/locales/en.ts @@ -44,6 +44,7 @@ export const defaultENLocale = [ ['ui_no_items_placeholder', 'There are no items yet.'], ['ui_search_no_result_placeholder', 'No results have been found.'], ['ui_save_reminder', 'You have unsaved changes.'], + ['ui_yes', 'Yes'], ['root_permission_denied', 'You have no permissions'], ['app_root_session_expire_warning_title', 'Session is about to expire'], diff --git a/webapp/packages/core-localization/src/locales/ru.ts b/webapp/packages/core-localization/src/locales/ru.ts index 3a5d6473a7..6afc6ffb5c 100644 --- a/webapp/packages/core-localization/src/locales/ru.ts +++ b/webapp/packages/core-localization/src/locales/ru.ts @@ -42,6 +42,7 @@ export const defaultRULocale = [ ['ui_no_items_placeholder', 'Вы еще ничего не добавили.'], ['ui_search_no_result_placeholder', 'По вашему запросу ничего не найдено.'], ['ui_save_reminder', 'У вас есть несохраненные изменения.'], + ['ui_yes', 'Да'], ['root_permission_denied', 'Отказано в доступе'], ['app_root_session_expire_warning_title', 'Ваша сессия скоро закончится'], diff --git a/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx b/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx index 91c4a68aa1..9259e48b99 100644 --- a/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx +++ b/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionForm.tsx @@ -26,7 +26,7 @@ export const PublicConnectionForm: React.FC = observer(function PublicConnection const service = useService(PublicConnectionFormService); const close = useCallback(() => service.close(true), []); - const save = useCallback(() => service.close(true), []); + const save = useCallback(() => service.save(), []); return styled(styles)( diff --git a/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionFormService.ts b/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionFormService.ts index de60084901..cbb6274fd3 100644 --- a/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionFormService.ts +++ b/webapp/packages/plugin-connections/src/PublicConnectionForm/PublicConnectionFormService.ts @@ -8,10 +8,11 @@ import { action, makeObservable, observable } from 'mobx'; -import { ConnectionFormService, ConnectionInfoResource, IConnectionFormState } from '@cloudbeaver/core-connections'; +import { ConnectionAuthService, ConnectionFormService, ConnectionInfoResource, IConnectionFormState } from '@cloudbeaver/core-connections'; import { ConnectionFormState } from '@cloudbeaver/core-connections'; import { injectable } from '@cloudbeaver/core-di'; import { CommonDialogService, ConfirmationDialog, DialogueStateResult } from '@cloudbeaver/core-dialogs'; +import { NotificationService } from '@cloudbeaver/core-events'; import { ExecutorInterrupter, IExecutorHandler } from '@cloudbeaver/core-executor'; import { SessionDataResource } from '@cloudbeaver/core-root'; import type { ConnectionConfig, ResourceKey } from '@cloudbeaver/core-sdk'; @@ -27,9 +28,11 @@ export class PublicConnectionFormService { constructor( private readonly commonDialogService: CommonDialogService, + private readonly notificationService: NotificationService, private readonly optionsPanelService: OptionsPanelService, private readonly connectionFormService: ConnectionFormService, private readonly connectionInfoResource: ConnectionInfoResource, + private readonly connectionAuthService: ConnectionAuthService, private readonly sessionDataResource: SessionDataResource ) { makeObservable(this, { @@ -84,6 +87,16 @@ export class PublicConnectionFormService { } } + save(): void { + const connection = this.formState?.info; + + this.close(true); + + if (connection?.id && connection.connected) { + this.tryReconnect(connection.id); + } + } + private closeDeleted: IExecutorHandler> = (data, contexts) => { if (!this.formState || !this.formState.config.connectionId) { return; @@ -123,6 +136,25 @@ export class PublicConnectionFormService { } }; + private async tryReconnect(id: string) { + const result = await this.commonDialogService.open(ConfirmationDialog, { + title: 'connections_public_connection_edit_reconnect_title', + message: 'connections_public_connection_edit_reconnect_message', + confirmActionText: 'ui_yes', + }); + + if (result === DialogueStateResult.Rejected) { + return; + } + + try { + await this.connectionInfoResource.close(id); + await this.connectionAuthService.auth(id); + } catch (exception) { + this.notificationService.logException(exception, 'connections_public_connection_edit_reconnect_failed'); + } + } + private clearFormState() { this.formState?.dispose(); this.formState = null; diff --git a/webapp/packages/plugin-connections/src/locales/en.ts b/webapp/packages/plugin-connections/src/locales/en.ts index f807e88c7d..a34a6a922b 100644 --- a/webapp/packages/plugin-connections/src/locales/en.ts +++ b/webapp/packages/plugin-connections/src/locales/en.ts @@ -2,4 +2,7 @@ export default [ ['connections_public_connection_edit_menu_item_title', 'Edit Connection'], ['connections_public_connection_edit_cancel_title', 'Cancel confirmation'], ['connections_public_connection_edit_cancel_message', 'You\'re going to cancel connection changes. Unsaved changes will be lost. Are you sure?'], + ['connections_public_connection_edit_reconnect_title', 'Connection updated'], + ['connections_public_connection_edit_reconnect_message', 'Connection has been updated. Do you want to reconnect?'], + ['connections_public_connection_edit_reconnect_failed', 'Failed to reconnect'], ]; diff --git a/webapp/packages/plugin-connections/src/locales/ru.ts b/webapp/packages/plugin-connections/src/locales/ru.ts index 1ed9674006..b114fe5796 100644 --- a/webapp/packages/plugin-connections/src/locales/ru.ts +++ b/webapp/packages/plugin-connections/src/locales/ru.ts @@ -2,4 +2,7 @@ export default [ ['connections_public_connection_edit_menu_item_title', 'Изменить подключение'], ['connections_public_connection_edit_cancel_title', 'Отмена редактирования'], ['connections_public_connection_edit_cancel_message', 'Вы собираетесь закрыть редактор, несохраненные изменения не будут применены. Вы уверены?'], + ['connections_public_connection_edit_reconnect_title', 'Подключение обновлено'], + ['connections_public_connection_edit_reconnect_message', 'Подключение было обновлено. Вы хотите переподключиться?'], + ['connections_public_connection_edit_reconnect_failed', 'Не удалось переподключиться'], ];