diff --git a/webapp/packages/plugin-data-viewer/src/DataViewerSettingsService.ts b/webapp/packages/plugin-data-viewer/src/DataViewerSettingsService.ts index 1bba55ad64..e27ddbf840 100644 --- a/webapp/packages/plugin-data-viewer/src/DataViewerSettingsService.ts +++ b/webapp/packages/plugin-data-viewer/src/DataViewerSettingsService.ts @@ -11,6 +11,9 @@ import { PluginManagerService, PluginSettings } from '@cloudbeaver/core-plugin'; const defaultSettings = { disableEdit: false, + fetchMin: 100, + fetchMax: 5000, + fetchDefault: 200, }; export type DataViewerSettings = typeof defaultSettings; @@ -25,4 +28,16 @@ export class DataViewerSettingsService { this.settings = this.pluginManagerService.getPluginSettings('data-viewer', defaultSettings); this.deprecatedSettings = this.pluginManagerService.getDeprecatedPluginSettings('core.app.dataViewer', defaultSettings); } + + getDefaultRowsCount(count?: number): number { + if (typeof count === 'number' && Number.isNaN(count)) { + count = 0; + } + return count !== undefined + ? Math.max( + this.settings.getValue('fetchMin'), + Math.min(count, this.settings.getValue('fetchMax')) + ) + : this.settings.getValue('fetchDefault'); + } } \ No newline at end of file diff --git a/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts b/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts index 1e54e98f8c..e943d4bbcb 100644 --- a/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts +++ b/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts @@ -17,7 +17,7 @@ import type { IDatabaseDataModel } from './DatabaseDataModel/IDatabaseDataModel' import { DatabaseDataAccessMode } from './DatabaseDataModel/IDatabaseDataSource'; import type { IDatabaseResultSet } from './DatabaseDataModel/IDatabaseResultSet'; import { DataViewerService } from './DataViewerService'; -import { getDefaultRowsCount } from './getDefaultRowsCount'; +import { DataViewerSettingsService } from './DataViewerSettingsService'; import { TableViewerStorageService } from './TableViewer/TableViewerStorageService'; @injectable() @@ -29,6 +29,7 @@ export class DataViewerTableService { private readonly asyncTaskInfoService: AsyncTaskInfoService, private readonly connectionExecutionContextService: ConnectionExecutionContextService, private readonly dataViewerService: DataViewerService, + private readonly dataViewerSettingsService: DataViewerSettingsService, ) { } has(tableId: string): boolean { @@ -71,7 +72,7 @@ export class DataViewerTableService { const editable = this.dataViewerService.isDataEditable(connection); const dataModel = this.tableViewerStorageService.add(new DatabaseDataModel(source)) - .setCountGain(getDefaultRowsCount()) + .setCountGain(this.dataViewerSettingsService.getDefaultRowsCount()) .setSlice(0) .setAccess(editable ? DatabaseDataAccessMode.Default : DatabaseDataAccessMode.Readonly); diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooter.tsx b/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooter.tsx index 435b2242ac..e25ec2d7e7 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooter.tsx +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooter.tsx @@ -11,10 +11,11 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import styled, { css, use } from 'reshadow'; import { SubmittingForm, ToolsPanel } from '@cloudbeaver/core-blocks'; +import { useService } from '@cloudbeaver/core-di'; import { useStyles } from '@cloudbeaver/core-theming'; import type { IDatabaseDataModel } from '../../DatabaseDataModel/IDatabaseDataModel'; -import { getDefaultRowsCount } from '../../getDefaultRowsCount'; +import { DataViewerSettingsService } from '../../DataViewerSettingsService'; import { AutoRefreshButton } from './AutoRefresh/AutoRefreshButton'; import { TableFooterMenu } from './TableFooterMenu/TableFooterMenu'; @@ -78,6 +79,7 @@ export const TableFooter = observer(function TableFooter({ }) { const ref = useRef(null); const [limit, setLimit] = useState(model.countGain + ''); + const dataViewerSettingsService = useService(DataViewerSettingsService); const handleChange = useCallback( async () => { @@ -85,7 +87,7 @@ export const TableFooter = observer(function TableFooter({ return; } - const value = getDefaultRowsCount(parseInt(ref.current.value, 10)); + const value = dataViewerSettingsService.getDefaultRowsCount(parseInt(ref.current.value, 10)); setLimit(value + ''); if (model.countGain !== value) { diff --git a/webapp/packages/plugin-data-viewer/src/getDefaultRowsCount.ts b/webapp/packages/plugin-data-viewer/src/getDefaultRowsCount.ts deleted file mode 100644 index 5e361eb0c2..0000000000 --- a/webapp/packages/plugin-data-viewer/src/getDefaultRowsCount.ts +++ /dev/null @@ -1,25 +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. - */ - -const fetchingSettings = { - fetchMin: 100, - fetchMax: 5000, - fetchDefault: 200, -}; - -export function getDefaultRowsCount(count?: number): number { - if (typeof count === 'number' && Number.isNaN(count)) { - count = 0; - } - return count !== undefined - ? Math.max( - fetchingSettings.fetchMin, - Math.min(count, fetchingSettings.fetchMax) - ) - : fetchingSettings.fetchDefault; -} diff --git a/webapp/packages/plugin-data-viewer/src/index.ts b/webapp/packages/plugin-data-viewer/src/index.ts index c39f33cd8b..96b7123bc7 100644 --- a/webapp/packages/plugin-data-viewer/src/index.ts +++ b/webapp/packages/plugin-data-viewer/src/index.ts @@ -52,6 +52,6 @@ export * from './TableViewer/TableFooter/TableFooterMenu/TableFooterMenuService' export * from './ContainerDataSource'; export * from './DataPresentationService'; export * from './DataViewerDataChangeConfirmationService'; -export * from './getDefaultRowsCount'; export * from './useDataModel'; export * from './ValuePanelPresentation/BooleanValue/isBooleanValuePresentationAvailable'; +export * from './DataViewerSettingsService'; \ No newline at end of file diff --git a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts index 6a385f1911..e4498a3313 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlQueryService.ts @@ -14,7 +14,8 @@ import { NotificationService } from '@cloudbeaver/core-events'; import { AsyncTaskInfoService, GraphQLService } from '@cloudbeaver/core-sdk'; import { DatabaseDataAccessMode, DatabaseDataModel, DatabaseEditAction, DataViewerDataChangeConfirmationService, - getDefaultRowsCount, IDatabaseDataModel, IDatabaseResultSet, DataViewerService, TableViewerStorageService + IDatabaseDataModel, IDatabaseResultSet, DataViewerService, TableViewerStorageService, + DataViewerSettingsService } from '@cloudbeaver/plugin-data-viewer'; import type { IResultGroup, ISqlEditorTabState } from '../ISqlEditorTabState'; @@ -50,7 +51,8 @@ export class SqlQueryService { private readonly asyncTaskInfoService: AsyncTaskInfoService, private readonly dataViewerDataChangeConfirmationService: DataViewerDataChangeConfirmationService, private readonly dataViewerService: DataViewerService, - private readonly sqlDataSourceService: SqlDataSourceService + private readonly sqlDataSourceService: SqlDataSourceService, + private readonly dataViewerSettingsService: DataViewerSettingsService ) { this.statisticsMap = new Map(); @@ -121,7 +123,7 @@ export class SqlQueryService { try { await model - .setCountGain(getDefaultRowsCount()) + .setCountGain(this.dataViewerSettingsService.getDefaultRowsCount()) .setSlice(0) .request(); @@ -209,7 +211,7 @@ export class SqlQueryService { try { await model - .setCountGain(getDefaultRowsCount()) + .setCountGain(this.dataViewerSettingsService.getDefaultRowsCount()) .setSlice(0) .request();