diff --git a/samples/sample-databases/product.conf b/samples/sample-databases/product.conf index c99cadd3f5..7c1ad1db61 100644 --- a/samples/sample-databases/product.conf +++ b/samples/sample-databases/product.conf @@ -15,9 +15,12 @@ logBatchSize: 1000, maxLogRecords: 2000, maxFailedRequests: 3 - } + }, } }, + plugin_data_spreadsheet_new: { + hidden: true + }, // Notifications config core_events: { notificationsPool: 5 diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/DataGridSettingsService.ts b/webapp/packages/plugin-data-spreadsheet-new/src/DataGridSettingsService.ts new file mode 100644 index 0000000000..1aeb79be5c --- /dev/null +++ b/webapp/packages/plugin-data-spreadsheet-new/src/DataGridSettingsService.ts @@ -0,0 +1,23 @@ +/* + * 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 { PluginManagerService } from '@cloudbeaver/core-plugin'; + +const defaultSettings = { + hidden: true, +}; + +export type DataGridSettings = typeof defaultSettings; + +@injectable() +export class DataGridSettingsService { + readonly settings = this.pluginManagerService.getPluginSettings('plugin_data_spreadsheet_new', defaultSettings); + + constructor(private pluginManagerService: PluginManagerService) { } +} diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/SpreadsheetService.ts b/webapp/packages/plugin-data-spreadsheet-new/src/SpreadsheetService.ts index 01c4d64ded..170043de6f 100644 --- a/webapp/packages/plugin-data-spreadsheet-new/src/SpreadsheetService.ts +++ b/webapp/packages/plugin-data-spreadsheet-new/src/SpreadsheetService.ts @@ -11,12 +11,14 @@ import { ExceptionsCatcherService } from '@cloudbeaver/core-events'; import { ResultDataFormat } from '@cloudbeaver/core-sdk'; import { DataPresentationService } from '@cloudbeaver/plugin-data-viewer'; +import { DataGridSettingsService } from './DataGridSettingsService'; import { SpreadsheetGrid } from './SpreadsheetGrid'; @injectable() export class SpreadsheetService extends Bootstrap { constructor( private dataPresentationService: DataPresentationService, + private dataGridSettingsService: DataGridSettingsService, exceptionsCatcherService: ExceptionsCatcherService ) { super(); @@ -28,6 +30,7 @@ export class SpreadsheetService extends Bootstrap { id: 'spreadsheet_grid', dataFormat: ResultDataFormat.Resultset, getPresentationComponent: () => SpreadsheetGrid, + hidden: () => this.dataGridSettingsService.settings.getValue('hidden'), title: 'Grid', icon: '/icons/grid.png', }); diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/manifest.ts b/webapp/packages/plugin-data-spreadsheet-new/src/manifest.ts index 0befd75646..ebc3c0d519 100644 --- a/webapp/packages/plugin-data-spreadsheet-new/src/manifest.ts +++ b/webapp/packages/plugin-data-spreadsheet-new/src/manifest.ts @@ -8,9 +8,10 @@ import type { PluginManifest } from '@cloudbeaver/core-di'; +import { DataGridSettingsService } from './DataGridSettingsService'; import { SpreadsheetService } from './SpreadsheetService'; export const manifest: PluginManifest = { info: { name: 'New spreadsheet implementation' }, - providers: [SpreadsheetService], + providers: [SpreadsheetService, DataGridSettingsService], }; diff --git a/webapp/packages/plugin-data-viewer/src/DataPresentationService.ts b/webapp/packages/plugin-data-viewer/src/DataPresentationService.ts index f3d0cb6eae..b75ecae072 100644 --- a/webapp/packages/plugin-data-viewer/src/DataPresentationService.ts +++ b/webapp/packages/plugin-data-viewer/src/DataPresentationService.ts @@ -31,6 +31,7 @@ export interface DataPresentationOptions { dataFormat: ResultDataFormat; title?: string; icon?: string; + hidden?: () => boolean; getPresentationComponent: () => DataPresentationComponent; getTabComponent?: () => PresentationTabComponent; onActivate?: () => void; @@ -53,8 +54,13 @@ export class DataPresentationService { } getSupportedList(dataFormat: ResultDataFormat | ResultDataFormat[]): DataPresentationOptions[] { - return Array.from(this.dataPresentations.values()) - .filter(presentation => presentation.dataFormat === dataFormat || dataFormat.includes(presentation.dataFormat)); + return Array.from(this.dataPresentations.values()).filter(presentation => { + if (presentation.hidden?.()) { + return false; + } + + return presentation.dataFormat === dataFormat || dataFormat.includes(presentation.dataFormat); + }); } getSupported(dataFormat: ResultDataFormat, presentationId: string | undefined): DataPresentationOptions | null { diff --git a/webapp/packages/product-default/src/config.json5 b/webapp/packages/product-default/src/config.json5 index 8f9811bc0c..4e8d5c3fac 100644 --- a/webapp/packages/product-default/src/config.json5 +++ b/webapp/packages/product-default/src/config.json5 @@ -7,7 +7,7 @@ user: { defaultTheme: "light", defaultLanguage: "en" - }, + }, app: { // Log viewer config logViewer: { @@ -15,9 +15,12 @@ logBatchSize: 1000, maxLogRecords: 2000, maxFailedRequests: 3 - } + }, } }, + plugin_data_spreadsheet_new: { + hidden: true + }, // Notifications config core_events: { notificationsPool: 5