From 7d17fe1f5567b4b9e8c565bd8d64cdd31a55f97f Mon Sep 17 00:00:00 2001 From: Naumov Alexey Date: Mon, 24 May 2021 14:17:00 +0300 Subject: [PATCH] feat(plugin-data-export): CB-997 added config option to disable data export --- .../src/DataExportMenuService.ts | 9 +++++--- .../src/DataExportMenuSettingsService.ts | 23 +++++++++++++++++++ .../plugin-data-export/src/manifest.ts | 2 ++ .../TableFooterMenu/TableFooterMenuItem.tsx | 11 ++++++--- .../packages/product-default/src/config.json5 | 3 +++ 5 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 webapp/packages/plugin-data-export/src/DataExportMenuSettingsService.ts diff --git a/webapp/packages/plugin-data-export/src/DataExportMenuService.ts b/webapp/packages/plugin-data-export/src/DataExportMenuService.ts index fb6eb2ade0..ada460b5e6 100644 --- a/webapp/packages/plugin-data-export/src/DataExportMenuService.ts +++ b/webapp/packages/plugin-data-export/src/DataExportMenuService.ts @@ -12,6 +12,7 @@ import { IMenuContext, CommonDialogService, ContextMenuService } from '@cloudbea import { TableFooterMenuService, ITableFooterMenuContext, IDatabaseDataSource, IDataContainerOptions } from '@cloudbeaver/plugin-data-viewer'; import type { IDataQueryOptions } from '@cloudbeaver/plugin-sql-editor'; +import { DataExportMenuSettingsService } from './DataExportMenuSettingsService'; import { DataExportDialog } from './Dialog/DataExportDialog'; @injectable() @@ -19,7 +20,8 @@ export class DataExportMenuService { constructor( private commonDialogService: CommonDialogService, private tableFooterMenuService: TableFooterMenuService, - private contextMenuService: ContextMenuService + private contextMenuService: ContextMenuService, + private dataExportMenuSettingsService: DataExportMenuSettingsService, ) { } register(): void { @@ -28,10 +30,11 @@ export class DataExportMenuService { isPresent(context) { return context.contextType === TableFooterMenuService.nodeContextType; }, + isHidden: () => this.dataExportMenuSettingsService.settings.getValue('disabled'), isDisabled(context) { return context.data.model.isLoading() - || context.data.model.isDisabled(context.data.resultIndex) - || !context.data.model.getResult(context.data.resultIndex); + || context.data.model.isDisabled(context.data.resultIndex) + || !context.data.model.getResult(context.data.resultIndex); }, order: 5, title: 'data_transfer_dialog_export', diff --git a/webapp/packages/plugin-data-export/src/DataExportMenuSettingsService.ts b/webapp/packages/plugin-data-export/src/DataExportMenuSettingsService.ts new file mode 100644 index 0000000000..0923dd17f7 --- /dev/null +++ b/webapp/packages/plugin-data-export/src/DataExportMenuSettingsService.ts @@ -0,0 +1,23 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2021 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 { PluginManagerService } from '@cloudbeaver/core-plugin'; + +const defaultSettings = { + disabled: false, +}; + +export type DataExportMenuSettings = typeof defaultSettings; + +@injectable() +export class DataExportMenuSettingsService { + readonly settings = this.pluginManagerService.getPluginSettings('plugin_data_export', defaultSettings); + + constructor(private pluginManagerService: PluginManagerService) { } +} diff --git a/webapp/packages/plugin-data-export/src/manifest.ts b/webapp/packages/plugin-data-export/src/manifest.ts index f5c7b27694..c2450b5966 100644 --- a/webapp/packages/plugin-data-export/src/manifest.ts +++ b/webapp/packages/plugin-data-export/src/manifest.ts @@ -10,6 +10,7 @@ import type { PluginManifest } from '@cloudbeaver/core-di'; import { Bootstrap } from './Bootstrap'; import { DataExportMenuService } from './DataExportMenuService'; +import { DataExportMenuSettingsService } from './DataExportMenuSettingsService'; import { DataExportProcessService } from './DataExportProcessService'; import { DataExportService } from './DataExportService'; import { DataTransferProcessorsResource } from './DataTransferProcessorsResource'; @@ -23,6 +24,7 @@ export const manifest: PluginManifest = { providers: [ Bootstrap, DataExportMenuService, + DataExportMenuSettingsService, DataExportService, DataExportProcessService, DataTransferProcessorsResource, diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooterMenu/TableFooterMenuItem.tsx b/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooterMenu/TableFooterMenuItem.tsx index 23846e0c63..d5d006f44e 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooterMenu/TableFooterMenuItem.tsx +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooterMenu/TableFooterMenuItem.tsx @@ -8,7 +8,7 @@ import { observer } from 'mobx-react-lite'; import type { ButtonHTMLAttributes } from 'react'; -import styled, { css } from 'reshadow'; +import styled, { css, use } from 'reshadow'; import { IconOrImage, ToolsAction } from '@cloudbeaver/core-blocks'; import { IMenuItem, MenuTrigger } from '@cloudbeaver/core-dialogs'; @@ -36,6 +36,9 @@ export const tableFooterMenuStyles = composes( align-items: center; cursor: pointer; } + ToolsAction[|hidden] { + display: none; + } menu-trigger-icon IconOrImage { display: block; width: 24px; @@ -57,15 +60,17 @@ export const TableFooterMenuItem = observer(function TableFooterMenuItem({ const styles = useStyles(tableFooterMenuStyles); if (!menuItem.panel) { - return ( + return styled(styles)( menuItem.onClick?.()} - >{translate(menuItem.title)} + > + {translate(menuItem.title)} ); } diff --git a/webapp/packages/product-default/src/config.json5 b/webapp/packages/product-default/src/config.json5 index 0307a2d66d..30531e5afc 100644 --- a/webapp/packages/product-default/src/config.json5 +++ b/webapp/packages/product-default/src/config.json5 @@ -21,6 +21,9 @@ plugin_data_spreadsheet_new: { hidden: false }, + plugin_data_export: { + disabled: false + }, // Notifications config core_events: { notificationsPool: 5