From 736a7fc7cd59ffc13cfc43b0832c68358b9d21db Mon Sep 17 00:00:00 2001 From: Wroud Date: Thu, 4 Feb 2021 22:45:55 +0300 Subject: [PATCH] feat: CB-694 disable active connection view --- .../NavigationTreeContextMenuService.ts | 22 ++++-- .../packages/core-bootstrap/src/manifest.ts | 2 - .../src/ConnectionInfoResource.ts | 16 +++++ .../src/ConnectionNavigatorViewSettings.ts | 4 +- .../src/ConnectionViewService.ts | 28 -------- webapp/packages/core-connections/src/index.ts | 1 - .../connections/getTemplateConnections.gql | 5 ++ .../connections/templateDataSourceList.gql | 16 ----- .../fragments/AllNavigatorSettings.gql | 9 +++ .../src/queries/fragments/UserConnection.gql | 4 ++ .../src/queries/session/serverConfig.gql | 8 +-- webapp/packages/core-sdk/src/sdk.ts | 72 ++++++++++--------- 12 files changed, 94 insertions(+), 93 deletions(-) delete mode 100644 webapp/packages/core-connections/src/ConnectionViewService.ts create mode 100644 webapp/packages/core-sdk/src/queries/connections/getTemplateConnections.gql delete mode 100644 webapp/packages/core-sdk/src/queries/connections/templateDataSourceList.gql create mode 100644 webapp/packages/core-sdk/src/queries/fragments/AllNavigatorSettings.gql diff --git a/webapp/packages/core-app/src/NavigationTree/NavigationTreeContextMenuService.ts b/webapp/packages/core-app/src/NavigationTree/NavigationTreeContextMenuService.ts index e8dba9aca7..7bf26430d7 100644 --- a/webapp/packages/core-app/src/NavigationTree/NavigationTreeContextMenuService.ts +++ b/webapp/packages/core-app/src/NavigationTree/NavigationTreeContextMenuService.ts @@ -6,7 +6,7 @@ * you may not use this file except in compliance with the License. */ -import { ConnectionViewService } from '@cloudbeaver/core-connections'; +import { ConnectionInfoResource, isSimpleNavigatorView } from '@cloudbeaver/core-connections'; import { injectable } from '@cloudbeaver/core-di'; import { ContextMenuService, IMenuPanel } from '@cloudbeaver/core-dialogs'; import { NotificationService } from '@cloudbeaver/core-events'; @@ -25,8 +25,8 @@ export class NavigationTreeContextMenuService { constructor( private contextMenuService: ContextMenuService, private navNodeManagerService: NavNodeManagerService, - private connectionViewService: ConnectionViewService, - private notificationService: NotificationService + private notificationService: NotificationService, + private connectionInfoResource: ConnectionInfoResource ) { } getMenuToken() { @@ -46,11 +46,23 @@ export class NavigationTreeContextMenuService { }); } + private isConnectionSimpleView(nodeId: string): boolean { + const connectionId = NodeManagerUtils.connectionNodeIdToConnectionId(nodeId); + + const connection = this.connectionInfoResource.get(connectionId); + + if (!connection) { + return false; + } + + return isSimpleNavigatorView(connection.navigatorSettings); + } + private async changeConnectionView(nodeId: string, simple: boolean) { const connectionId = NodeManagerUtils.connectionNodeIdToConnectionId(nodeId); try { - await this.connectionViewService.changeConnectionView(connectionId, simple); + await this.connectionInfoResource.changeConnectionView(connectionId, simple); await this.navNodeManagerService.refreshTree(nodeId); } catch (exception) { this.notificationService.logException(exception); @@ -76,6 +88,7 @@ export class NavigationTreeContextMenuService { { id: 'simple', title: 'app_navigationTree_connection_view_option_simple', + isDisabled: context => this.isConnectionSimpleView(context.data.id), isPresent(context) { return context.contextType === NavigationTreeContextMenuService.nodeContextType && context.data.objectFeatures.includes(EObjectFeature.dataSource); @@ -88,6 +101,7 @@ export class NavigationTreeContextMenuService { { id: 'advanced', title: 'app_navigationTree_connection_view_option_advanced', + isDisabled: context => !this.isConnectionSimpleView(context.data.id), isPresent(context) { return context.contextType === NavigationTreeContextMenuService.nodeContextType && context.data.objectFeatures.includes(EObjectFeature.dataSource); diff --git a/webapp/packages/core-bootstrap/src/manifest.ts b/webapp/packages/core-bootstrap/src/manifest.ts index 2dae57e296..5ec2f96633 100644 --- a/webapp/packages/core-bootstrap/src/manifest.ts +++ b/webapp/packages/core-bootstrap/src/manifest.ts @@ -56,7 +56,6 @@ import { NetworkHandlerResource, DatabaseAuthModelsResource, ConnectionAuthService, - ConnectionViewService, ConnectionsAdministrationService, ConnectionsResource, ConnectionsLocaleService, @@ -159,7 +158,6 @@ export const coreManifest: PluginManifest = { NavigationTabsService, DatabaseAuthModelsResource, ConnectionAuthService, - ConnectionViewService, ConnectionsAdministrationNavService, ConnectionManualService, ConnectionSearchService, diff --git a/webapp/packages/core-connections/src/ConnectionInfoResource.ts b/webapp/packages/core-connections/src/ConnectionInfoResource.ts index db00b5149f..c9c8605dd3 100644 --- a/webapp/packages/core-connections/src/ConnectionInfoResource.ts +++ b/webapp/packages/core-connections/src/ConnectionInfoResource.ts @@ -22,6 +22,7 @@ import { } from '@cloudbeaver/core-sdk'; import { ConnectionsResource } from './Administration/ConnectionsResource'; +import { CONNECTION_NAVIGATOR_VIEW_SETTINGS } from './ConnectionNavigatorViewSettings'; export type Connection = UserConnectionFragment & { authProperties?: UserConnectionAuthPropertiesFragment[] }; @@ -136,6 +137,21 @@ export class ConnectionInfoResource extends CachedMapResource { + await this.performUpdate(id, async () => { + const settings = simple ? CONNECTION_NAVIGATOR_VIEW_SETTINGS.simple : CONNECTION_NAVIGATOR_VIEW_SETTINGS.advanced; + + await this.graphQLService.sdk.setConnectionNavigatorSettings({ + id, + settings, + }); + }); + + await this.refresh(id); // TODO: setConnectionNavigatorSettings should return ConnectionInfo + + return this.get(id)!; + } + async close(connectionId: string): Promise { await this.performUpdate(connectionId, async () => { const connection = await this.closeConnection(connectionId); diff --git a/webapp/packages/core-connections/src/ConnectionNavigatorViewSettings.ts b/webapp/packages/core-connections/src/ConnectionNavigatorViewSettings.ts index e9adfe6311..b6c11117aa 100644 --- a/webapp/packages/core-connections/src/ConnectionNavigatorViewSettings.ts +++ b/webapp/packages/core-connections/src/ConnectionNavigatorViewSettings.ts @@ -32,5 +32,7 @@ export const CONNECTION_NAVIGATOR_VIEW_SETTINGS: Record settings[key as keyof NavigatorSettingsInput] !== simple[key as keyof NavigatorSettingsInput]); } diff --git a/webapp/packages/core-connections/src/ConnectionViewService.ts b/webapp/packages/core-connections/src/ConnectionViewService.ts deleted file mode 100644 index bf1ce8699d..0000000000 --- a/webapp/packages/core-connections/src/ConnectionViewService.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * cloudbeaver - Cloud Database Manager - * Copyright (C) 2020 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 { GraphQLService } from '@cloudbeaver/core-sdk'; - -import { CONNECTION_NAVIGATOR_VIEW_SETTINGS } from './ConnectionNavigatorViewSettings'; - -@injectable() -export class ConnectionViewService { - constructor( - private graphQLService: GraphQLService, - ) { } - - async changeConnectionView(connectionId: string, simple: boolean): Promise { - const settings = simple ? CONNECTION_NAVIGATOR_VIEW_SETTINGS.simple : CONNECTION_NAVIGATOR_VIEW_SETTINGS.advanced; - - await this.graphQLService.sdk.setConnectionNavigatorSettings({ - id: connectionId, - settings, - }); - } -} diff --git a/webapp/packages/core-connections/src/index.ts b/webapp/packages/core-connections/src/index.ts index a253b3fb3f..544976d1b2 100644 --- a/webapp/packages/core-connections/src/index.ts +++ b/webapp/packages/core-connections/src/index.ts @@ -14,7 +14,6 @@ export * from './extensions/IConnectionSetter'; export * from './ConnectionsManagerService'; export * from './ConnectionInfoResource'; export * from './ConnectionAuthService'; -export * from './ConnectionViewService'; export * from './DriverPropertiesService'; export * from './EConnectionFeature'; export * from './ContainerResource'; diff --git a/webapp/packages/core-sdk/src/queries/connections/getTemplateConnections.gql b/webapp/packages/core-sdk/src/queries/connections/getTemplateConnections.gql new file mode 100644 index 0000000000..4ff4c4df7d --- /dev/null +++ b/webapp/packages/core-sdk/src/queries/connections/getTemplateConnections.gql @@ -0,0 +1,5 @@ +query getTemplateConnections { + connections: templateConnections { + ...UserConnection + } +} \ No newline at end of file diff --git a/webapp/packages/core-sdk/src/queries/connections/templateDataSourceList.gql b/webapp/packages/core-sdk/src/queries/connections/templateDataSourceList.gql deleted file mode 100644 index 8bf3b98f24..0000000000 --- a/webapp/packages/core-sdk/src/queries/connections/templateDataSourceList.gql +++ /dev/null @@ -1,16 +0,0 @@ -query getTemplateConnections { - connections: templateConnections { - id - name - description - driverId - connected - readOnly - - authNeeded - authModel - - features - supportedDataFormats - } -} \ No newline at end of file diff --git a/webapp/packages/core-sdk/src/queries/fragments/AllNavigatorSettings.gql b/webapp/packages/core-sdk/src/queries/fragments/AllNavigatorSettings.gql new file mode 100644 index 0000000000..1f430eaa57 --- /dev/null +++ b/webapp/packages/core-sdk/src/queries/fragments/AllNavigatorSettings.gql @@ -0,0 +1,9 @@ +fragment AllNavigatorSettings on NavigatorSettings { + showSystemObjects + showUtilityObjects + showOnlyEntities + mergeEntities + hideFolders + hideSchemas + hideVirtualModel +} \ No newline at end of file diff --git a/webapp/packages/core-sdk/src/queries/fragments/UserConnection.gql b/webapp/packages/core-sdk/src/queries/fragments/UserConnection.gql index a7001099c4..71906f4829 100644 --- a/webapp/packages/core-sdk/src/queries/fragments/UserConnection.gql +++ b/webapp/packages/core-sdk/src/queries/fragments/UserConnection.gql @@ -11,4 +11,8 @@ fragment UserConnection on ConnectionInfo { features supportedDataFormats + + navigatorSettings { + ...AllNavigatorSettings + } } \ No newline at end of file diff --git a/webapp/packages/core-sdk/src/queries/session/serverConfig.gql b/webapp/packages/core-sdk/src/queries/session/serverConfig.gql index 3e40a5f917..ed31cafdb3 100644 --- a/webapp/packages/core-sdk/src/queries/session/serverConfig.gql +++ b/webapp/packages/core-sdk/src/queries/session/serverConfig.gql @@ -21,13 +21,7 @@ query serverConfig { } productConfiguration defaultNavigatorSettings { - showSystemObjects - showUtilityObjects - showOnlyEntities - mergeEntities - hideFolders - hideSchemas - hideVirtualModel + ...AllNavigatorSettings } } } diff --git a/webapp/packages/core-sdk/src/sdk.ts b/webapp/packages/core-sdk/src/sdk.ts index 3ebd9cf65c..8b20c5150c 100644 --- a/webapp/packages/core-sdk/src/sdk.ts +++ b/webapp/packages/core-sdk/src/sdk.ts @@ -1157,6 +1157,10 @@ export type GetDriverByIdQueryVariables = Exact<{ export interface GetDriverByIdQuery { driverList: Array> } +export type GetTemplateConnectionsQueryVariables = Exact<{ [key: string]: never }>; + +export interface GetTemplateConnectionsQuery { connections: UserConnectionFragment[] } + export type InitConnectionMutationVariables = Exact<{ id: Scalars['ID']; credentials?: Maybe; @@ -1176,10 +1180,6 @@ export type SetConnectionNavigatorSettingsMutationVariables = Exact<{ export type SetConnectionNavigatorSettingsMutation = Pick; -export type GetTemplateConnectionsQueryVariables = Exact<{ [key: string]: never }>; - -export interface GetTemplateConnectionsQuery { connections: Array> } - export type TestConnectionMutationVariables = Exact<{ config: ConnectionConfig; }>; @@ -1251,6 +1251,8 @@ export type AdminUserInfoFragment = ( & { origin: ObjectOriginInfoFragment } ); +export type AllNavigatorSettingsFragment = Pick; + export type NavNodeInfoFragment = ( Pick & { object?: Maybe>; nodeDetails?: Maybe } @@ -1262,7 +1264,10 @@ export type ObjectOriginInfoFragment = Pick; -export type UserConnectionFragment = Pick; +export type UserConnectionFragment = ( + Pick + & { navigatorSettings: AllNavigatorSettingsFragment } +); export type UserConnectionAuthPropertiesFragment = Pick; @@ -1480,7 +1485,7 @@ export type ServerConfigQueryVariables = Exact<{ [key: string]: never }>; export interface ServerConfigQuery { serverConfig: ( Pick - & { supportedLanguages: Array>; defaultNavigatorSettings: Pick } + & { supportedLanguages: Array>; defaultNavigatorSettings: AllNavigatorSettingsFragment } ); } @@ -1637,6 +1642,17 @@ export const SessionStateFragmentDoc = ` locale } `; +export const AllNavigatorSettingsFragmentDoc = ` + fragment AllNavigatorSettings on NavigatorSettings { + showSystemObjects + showUtilityObjects + showOnlyEntities + mergeEntities + hideFolders + hideSchemas + hideVirtualModel +} + `; export const UserConnectionFragmentDoc = ` fragment UserConnection on ConnectionInfo { id @@ -1649,8 +1665,11 @@ export const UserConnectionFragmentDoc = ` authModel features supportedDataFormats + navigatorSettings { + ...AllNavigatorSettings + } } - `; + ${AllNavigatorSettingsFragmentDoc}`; export const UserConnectionNetworkHandlerPropertiesFragmentDoc = ` fragment UserConnectionNetworkHandlerProperties on ObjectPropertyInfo { id @@ -2029,6 +2048,13 @@ export const GetDriverByIdDocument = ` } } `; +export const GetTemplateConnectionsDocument = ` + query getTemplateConnections { + connections: templateConnections { + ...UserConnection + } +} + ${UserConnectionFragmentDoc}`; export const InitConnectionDocument = ` mutation initConnection($id: ID!, $credentials: Object, $saveCredentials: Boolean) { connection: initConnection( @@ -2050,22 +2076,6 @@ export const SetConnectionNavigatorSettingsDocument = ` setConnectionNavigatorSettings(id: $id, settings: $settings) } `; -export const GetTemplateConnectionsDocument = ` - query getTemplateConnections { - connections: templateConnections { - id - name - description - driverId - connected - readOnly - authNeeded - authModel - features - supportedDataFormats - } -} - `; export const TestConnectionDocument = ` mutation testConnection($config: ConnectionConfig!) { testConnection(config: $config) { @@ -2469,17 +2479,11 @@ export const ServerConfigDocument = ` } productConfiguration defaultNavigatorSettings { - showSystemObjects - showUtilityObjects - showOnlyEntities - mergeEntities - hideFolders - hideSchemas - hideVirtualModel + ...AllNavigatorSettings } } } - `; + ${AllNavigatorSettingsFragmentDoc}`; export const SessionPermissionsDocument = ` query sessionPermissions { permissions: sessionPermissions @@ -2651,6 +2655,9 @@ export function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = getDriverById(variables: GetDriverByIdQueryVariables): Promise { return withWrapper(() => client.request(GetDriverByIdDocument, variables)); }, + getTemplateConnections(variables?: GetTemplateConnectionsQueryVariables): Promise { + return withWrapper(() => client.request(GetTemplateConnectionsDocument, variables)); + }, initConnection(variables: InitConnectionMutationVariables): Promise { return withWrapper(() => client.request(InitConnectionDocument, variables)); }, @@ -2660,9 +2667,6 @@ export function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = setConnectionNavigatorSettings(variables: SetConnectionNavigatorSettingsMutationVariables): Promise { return withWrapper(() => client.request(SetConnectionNavigatorSettingsDocument, variables)); }, - getTemplateConnections(variables?: GetTemplateConnectionsQueryVariables): Promise { - return withWrapper(() => client.request(GetTemplateConnectionsDocument, variables)); - }, testConnection(variables: TestConnectionMutationVariables): Promise { return withWrapper(() => client.request(TestConnectionDocument, variables)); },