mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-10-16 06:40:05 +08:00
feat(plugin-sql-editor): CB-1498 move handler logic to the plugin-sql-editor-navigation-tab
This commit is contained in:
@@ -12,15 +12,16 @@ import {
|
||||
ConnectionSchemaManagerService,
|
||||
isObjectCatalogProvider, isObjectSchemaProvider, DATA_CONTEXT_NAV_NODE, NavigationTabsService
|
||||
} from '@cloudbeaver/core-app';
|
||||
import { isConnectionProvider } from '@cloudbeaver/core-connections';
|
||||
import { ConnectionsManagerService, IConnectionHandlerData, isConnectionProvider } from '@cloudbeaver/core-connections';
|
||||
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
|
||||
import { CommonDialogService, DialogueStateResult, RenameDialog } from '@cloudbeaver/core-dialogs';
|
||||
import type { IExecutorHandler } from '@cloudbeaver/core-executor';
|
||||
import { ExecutorInterrupter, IExecutionContextProvider, IExecutorHandler } from '@cloudbeaver/core-executor';
|
||||
import { ExtensionUtils } from '@cloudbeaver/core-extensions';
|
||||
import { ISessionAction, sessionActionContext, SessionActionService } from '@cloudbeaver/core-root';
|
||||
import { ActionService, ACTION_RENAME, DATA_CONTEXT_MENU_NESTED, menuExtractActions, MenuService, ViewService } from '@cloudbeaver/core-view';
|
||||
import { AuthenticationService, LogoutState } from '@cloudbeaver/plugin-authentication';
|
||||
import { DATA_CONTEXT_CONNECTION } from '@cloudbeaver/plugin-connections';
|
||||
import { DATA_CONTEXT_SQL_EDITOR_STATE } from '@cloudbeaver/plugin-sql-editor';
|
||||
import { DATA_CONTEXT_SQL_EDITOR_STATE, SqlResultTabsService } from '@cloudbeaver/plugin-sql-editor';
|
||||
|
||||
import { ACTION_SQL_EDITOR_OPEN } from './ACTION_SQL_EDITOR_OPEN';
|
||||
import { DATA_CONTEXT_SQL_EDITOR_TAB } from './DATA_CONTEXT_SQL_EDITOR_TAB';
|
||||
@@ -41,12 +42,19 @@ export class SqlEditorBootstrap extends Bootstrap {
|
||||
private readonly menuService: MenuService,
|
||||
private readonly sessionActionService: SessionActionService,
|
||||
private readonly commonDialogService: CommonDialogService,
|
||||
private readonly sqlEditorTabService: SqlEditorTabService
|
||||
private readonly sqlEditorTabService: SqlEditorTabService,
|
||||
private readonly authenticationService: AuthenticationService,
|
||||
private readonly sqlResultTabsService: SqlResultTabsService,
|
||||
private readonly connectionsManagerService: ConnectionsManagerService,
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
register(): void {
|
||||
this.authenticationService.onLogout.addHandler(this.logoutHandler.bind(this));
|
||||
this.connectionsManagerService.onDisconnect.addHandler(this.connectionHandler.bind(this));
|
||||
this.connectionsManagerService.onDelete.addHandler(this.connectionHandler.bind(this));
|
||||
|
||||
this.mainMenuService.registerRootItem(
|
||||
{
|
||||
id: 'sql-editor',
|
||||
@@ -186,4 +194,37 @@ export class SqlEditorBootstrap extends Bootstrap {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private async logoutHandler(data: LogoutState, contexts: IExecutionContextProvider<LogoutState>) {
|
||||
if (data === 'before') {
|
||||
for (const tab of this.sqlEditorTabService.sqlEditorTabs) {
|
||||
const canLogout = await this.sqlResultTabsService.canCloseResultTabs(tab.handlerState);
|
||||
|
||||
if (!canLogout) {
|
||||
ExecutorInterrupter.interrupt(contexts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async connectionHandler(
|
||||
data: IConnectionHandlerData,
|
||||
contexts: IExecutionContextProvider<IConnectionHandlerData>
|
||||
) {
|
||||
if (data.state === 'before') {
|
||||
for (const tab of this.sqlEditorTabService.sqlEditorTabs) {
|
||||
if (tab.handlerState.executionContext?.connectionId !== data.connectionId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const canPerformAction = await this.sqlResultTabsService.canCloseResultTabs(tab.handlerState);
|
||||
|
||||
if (!canPerformAction) {
|
||||
ExecutorInterrupter.interrupt(contexts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -6,7 +6,7 @@
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
|
||||
import { injectable } from '@cloudbeaver/core-di';
|
||||
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
|
||||
import { ActionService, KeyBindingService, MenuService, IAction, IDataContextProvider } from '@cloudbeaver/core-view';
|
||||
|
||||
import { ACTION_SQL_EDITOR_EXECUTE } from './actions/ACTION_SQL_EDITOR_EXECUTE';
|
||||
@@ -22,12 +22,14 @@ import { KEY_BINDING_SQL_EDITOR_SHOW_EXECUTION_PLAN } from './actions/bindings/K
|
||||
import { DATA_CONTEXT_SQL_EDITOR_DATA } from './SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA';
|
||||
|
||||
@injectable()
|
||||
export class SqlEditorMenuService {
|
||||
export class MenuBootstrap extends Bootstrap {
|
||||
constructor(
|
||||
private readonly actionService: ActionService,
|
||||
private readonly keyBindingService: KeyBindingService,
|
||||
private readonly menuService: MenuService
|
||||
) { }
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
register(): void {
|
||||
this.actionService.addHandler({
|
||||
@@ -122,4 +124,6 @@ export class SqlEditorMenuService {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
load(): void | Promise<void> { }
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2022 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 { ConnectionsManagerService, IConnectionHandlerData } from '@cloudbeaver/core-connections';
|
||||
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
|
||||
import { ExecutorInterrupter, IExecutionContextProvider } from '@cloudbeaver/core-executor';
|
||||
import { IServerConfigSaveData, ServerConfigurationService } from '@cloudbeaver/plugin-administration';
|
||||
import { AuthenticationService, LogoutState } from '@cloudbeaver/plugin-authentication';
|
||||
import { SqlEditorTabService } from '@cloudbeaver/plugin-sql-editor-navigation-tab';
|
||||
|
||||
import { SqlEditorMenuService } from './SqlEditorMenuService';
|
||||
import { SqlResultTabsService } from './SqlResultTabs/SqlResultTabsService';
|
||||
|
||||
@injectable()
|
||||
export class SqlEditorBootstrap extends Bootstrap {
|
||||
constructor(
|
||||
private readonly authenticationService: AuthenticationService,
|
||||
private readonly sqlEditorTabService: SqlEditorTabService,
|
||||
private readonly sqlResultTabsService: SqlResultTabsService,
|
||||
private readonly sqlEditorMenuService: SqlEditorMenuService,
|
||||
private readonly connectionsManagerService: ConnectionsManagerService,
|
||||
private readonly serverConfigurationService: ServerConfigurationService
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
register(): void {
|
||||
this.sqlEditorMenuService.register();
|
||||
|
||||
this.authenticationService.onLogout.addHandler(this.logoutHandler.bind(this));
|
||||
this.connectionsManagerService.onDisconnect.addHandler(this.connectionHandler.bind(this));
|
||||
this.connectionsManagerService.onDelete.addHandler(this.connectionHandler.bind(this));
|
||||
this.serverConfigurationService.saveTask.addHandler(this.saveHandler.bind(this));
|
||||
}
|
||||
|
||||
load(): void | Promise<void> { }
|
||||
|
||||
private async saveHandler(data: IServerConfigSaveData, contexts: IExecutionContextProvider<IServerConfigSaveData>) {
|
||||
for (const tab of this.sqlEditorTabService.sqlEditorTabs) {
|
||||
const canSave = await this.sqlResultTabsService.canCloseResultTabs(tab.handlerState);
|
||||
|
||||
if (!canSave) {
|
||||
ExecutorInterrupter.interrupt(contexts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async logoutHandler(data: LogoutState, contexts: IExecutionContextProvider<LogoutState>) {
|
||||
if (data === 'before') {
|
||||
for (const tab of this.sqlEditorTabService.sqlEditorTabs) {
|
||||
const canLogout = await this.sqlResultTabsService.canCloseResultTabs(tab.handlerState);
|
||||
|
||||
if (!canLogout) {
|
||||
ExecutorInterrupter.interrupt(contexts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async connectionHandler(
|
||||
data: IConnectionHandlerData,
|
||||
contexts: IExecutionContextProvider<IConnectionHandlerData>
|
||||
) {
|
||||
if (data.state === 'before') {
|
||||
for (const tab of this.sqlEditorTabService.sqlEditorTabs) {
|
||||
if (tab.handlerState.executionContext?.connectionId !== data.connectionId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const canPerformAction = await this.sqlResultTabsService.canCloseResultTabs(tab.handlerState);
|
||||
|
||||
if (!canPerformAction) {
|
||||
ExecutorInterrupter.interrupt(contexts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,9 @@
|
||||
import type { PluginManifest } from '@cloudbeaver/core-di';
|
||||
|
||||
import { LocaleService } from './LocaleService';
|
||||
import { MenuBootstrap } from './MenuBootstrap';
|
||||
import { SqlDialectInfoService } from './SqlDialectInfoService';
|
||||
import { SQLCodeEditorPanelBootstrap } from './SqlEditor/SQLCodeEditorPanel/SQLCodeEditorPanelBootstrap';
|
||||
import { SqlEditorBootstrap } from './SqlEditorBootstrap';
|
||||
import { SqlEditorMenuService } from './SqlEditorMenuService';
|
||||
import { SqlEditorModeService } from './SqlEditorModeService';
|
||||
import { SqlEditorService } from './SqlEditorService';
|
||||
import { SqlEditorSettingsService } from './SqlEditorSettingsService';
|
||||
@@ -29,9 +28,7 @@ export const sqlEditorPluginManifest: PluginManifest = {
|
||||
|
||||
providers: [
|
||||
LocaleService,
|
||||
SqlEditorBootstrap,
|
||||
SqlEditorService,
|
||||
SqlEditorMenuService,
|
||||
SqlDialectInfoService,
|
||||
SqlQueryResultService,
|
||||
SqlQueryService,
|
||||
@@ -41,5 +38,6 @@ export const sqlEditorPluginManifest: PluginManifest = {
|
||||
SqlEditorModeService,
|
||||
SQLCodeEditorPanelBootstrap,
|
||||
SqlEditorView,
|
||||
MenuBootstrap,
|
||||
],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user