From bb4d65d3412c8f345a23b459c81808dfbb955029 Mon Sep 17 00:00:00 2001
From: Tatiana Fokina <123386439+tfokina@users.noreply.github.com>
Date: Tue, 28 Mar 2023 14:56:31 +0400
Subject: [PATCH] CB-3073 add ddl resource, remove ddl controller (#1563)
* CB-3073 add ddl resource, remove ddl controller
* CB-3073 Remove loader, load active project connections
---------
Co-authored-by: dariamarutkina <125263541+dariamarutkina@users.noreply.github.com>
---
.../src/DdlViewer/DDLViewerTabPanel.tsx | 27 +++----
.../src/DdlViewer/DdlResource.ts | 47 +++++++++++++
.../src/DdlViewer/DdlViewerController.ts | 70 -------------------
.../src/DdlViewer/DdlViewerService.ts | 46 ------------
.../ExtendedDDLViewerTabPanel.tsx | 39 +++++------
.../plugin-ddl-viewer/src/manifest.ts | 4 +-
6 files changed, 79 insertions(+), 154 deletions(-)
create mode 100644 webapp/packages/plugin-ddl-viewer/src/DdlViewer/DdlResource.ts
delete mode 100644 webapp/packages/plugin-ddl-viewer/src/DdlViewer/DdlViewerController.ts
delete mode 100644 webapp/packages/plugin-ddl-viewer/src/DdlViewer/DdlViewerService.ts
diff --git a/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DDLViewerTabPanel.tsx b/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DDLViewerTabPanel.tsx
index ce6eb9011d..65950b53c4 100644
--- a/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DDLViewerTabPanel.tsx
+++ b/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DDLViewerTabPanel.tsx
@@ -7,11 +7,10 @@
*/
import { observer } from 'mobx-react-lite';
-import { useEffect } from 'react';
import styled from 'reshadow';
-import { Loader, useStyles } from '@cloudbeaver/core-blocks';
-import { useController } from '@cloudbeaver/core-di';
+import { useResource, useStyles } from '@cloudbeaver/core-blocks';
+import { ConnectionDialectResource, ConnectionInfoActiveProjectKey, ConnectionInfoResource, createConnectionParam } from '@cloudbeaver/core-connections';
import { MenuBar, MENU_BAR_DEFAULT_STYLES } from '@cloudbeaver/core-ui';
import { useMenu } from '@cloudbeaver/core-view';
import type { NavNodeTransformViewComponent } from '@cloudbeaver/plugin-navigation-tree';
@@ -20,26 +19,22 @@ import { SQLCodeEditorLoader } from '@cloudbeaver/plugin-sql-editor';
import { TAB_PANEL_STYLES } from '../TAB_PANEL_STYLES';
import { DATA_CONTEXT_DDL_VIEWER_NODE } from './DATA_CONTEXT_DDL_VIEWER_NODE';
import { DATA_CONTEXT_DDL_VIEWER_VALUE } from './DATA_CONTEXT_DDL_VIEWER_VALUE';
-import { DdlViewerController } from './DdlViewerController';
+import { DdlResource } from './DdlResource';
import { MENU_DDL_VIEWER_FOOTER } from './MENU_DDL_VIEWER_FOOTER';
export const DDLViewerTabPanel: NavNodeTransformViewComponent = observer(function DDLViewerTabPanel({ nodeId, folderId }) {
const style = useStyles(TAB_PANEL_STYLES);
- const controller = useController(DdlViewerController, nodeId);
const menu = useMenu({ menu: MENU_DDL_VIEWER_FOOTER });
- useEffect(() => {
- controller.load();
- });
- // TODO: not triggered in switch case with lazy
- // useTab(folderId, () => controller.load());
+ const ddlResource = useResource(DDLViewerTabPanel, DdlResource, nodeId);
- if (controller.isLoading) {
- return ;
- }
+ const connectionInfoResource = useResource(DDLViewerTabPanel, ConnectionInfoResource, ConnectionInfoActiveProjectKey);
+ const connection = connectionInfoResource.resource.getConnectionForNode(nodeId);
+ const connectionParam = connection ? createConnectionParam(connection) : null;
+ const connectionDialectResource = useResource(DDLViewerTabPanel, ConnectionDialectResource, connectionParam);
menu.context.set(DATA_CONTEXT_DDL_VIEWER_NODE, nodeId);
- menu.context.set(DATA_CONTEXT_DDL_VIEWER_VALUE, controller.metadata);
+ menu.context.set(DATA_CONTEXT_DDL_VIEWER_VALUE, ddlResource.data);
return styled(style)(
@@ -47,8 +42,8 @@ export const DDLViewerTabPanel: NavNodeTransformViewComponent = observer(functio
bindings={{
autoCursor: false,
}}
- value={controller.metadata}
- dialect={controller.dialect}
+ value={ddlResource.data}
+ dialect={connectionDialectResource.data}
readonly
/>
diff --git a/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DdlResource.ts b/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DdlResource.ts
new file mode 100644
index 0000000000..d9f5a08ff9
--- /dev/null
+++ b/webapp/packages/plugin-ddl-viewer/src/DdlViewer/DdlResource.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 { injectable } from '@cloudbeaver/core-di';
+import { NavNodeInfoResource } from '@cloudbeaver/core-navigation-tree';
+import { CachedMapResource, ResourceKey, ResourceKeyUtils, isResourceAlias, GraphQLService } from '@cloudbeaver/core-sdk';
+
+@injectable()
+export class DdlResource extends CachedMapResource {
+ constructor(
+ private readonly graphQLService: GraphQLService,
+ private readonly navNodeInfoResource: NavNodeInfoResource,
+ ) {
+ super();
+
+ this.navNodeInfoResource.outdateResource(this);
+ this.navNodeInfoResource.deleteInResource(this);
+ }
+
+ protected async loader(key: ResourceKey): Promise