diff --git a/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts b/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts index 26afb13037..82b0a30f87 100644 --- a/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts +++ b/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts @@ -25,11 +25,17 @@ export interface IDataContainerResult extends IDatabaseDataResult { } export class ContainerDataSource extends DatabaseDataSource { + canCancel: boolean; private executionContext: IExecutionContext | null; constructor(private graphQLService: GraphQLService) { super(); this.executionContext = null; + this.canCancel = false; + } + + cancel(): Promise { + throw new Error('Method not implemented.'); } async request( @@ -64,7 +70,9 @@ export class ContainerDataSource extends DatabaseDataSource(result => ({ id: result.resultSet?.id || '0', dataFormat: result.dataFormat!, - loadedFully: (result.resultSet?.rows?.length || 0) < this.count || !result.resultSet?.hasMoreData, + loadedFully: (result.resultSet?.rows?.length || 0) < this.count, + // allays returns false + // || !result.resultSet?.hasMoreData, data: result.resultSet, })); } diff --git a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataModel.ts b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataModel.ts index d1da69a4bd..312b88ce77 100644 --- a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataModel.ts +++ b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataModel.ts @@ -52,6 +52,11 @@ implements IDatabaseDataModel { await this.requestData(); } + setResults(results: TResult[]): this { + this.results = results; + return this; + } + setCountGain(count: number): this { this.countGain = count; return this; diff --git a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataSource.ts b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataSource.ts index 95ded8f0f1..eb7fd3c4d8 100644 --- a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataSource.ts +++ b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/DatabaseDataSource.ts @@ -21,6 +21,7 @@ implements IDatabaseDataSource { @observable options: TOptions | null; @observable requestInfo: IRequestInfo; @observable supportedDataFormats: ResultDataFormat[]; + abstract canCancel: boolean; @observable private activeRequest: Promise | null; @observable private activeSave: Promise | null; @@ -39,6 +40,8 @@ implements IDatabaseDataSource { }; } + abstract cancel(): Promise; + isLoading(): boolean { return !!this.activeRequest; } diff --git a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/IDatabaseDataSource.ts b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/IDatabaseDataSource.ts index 4df3365bbd..5f1b67062f 100644 --- a/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/IDatabaseDataSource.ts +++ b/webapp/packages/plugin-data-viewer/src/DatabaseDataModel/IDatabaseDataSource.ts @@ -34,6 +34,7 @@ export interface IDatabaseDataSource | TResult[]; + cancel(): Promise; } diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/DataModelWrapper.ts b/webapp/packages/plugin-data-viewer/src/TableViewer/DataModelWrapper.ts index f7f36f8152..d1170149cd 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/DataModelWrapper.ts +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/DataModelWrapper.ts @@ -7,6 +7,7 @@ */ import { CommonDialogService } from '@cloudbeaver/core-dialogs'; +import { ResultDataFormat } from '@cloudbeaver/core-sdk'; import { DatabaseDataModel } from '../DatabaseDataModel/DatabaseDataModel'; import { DatabaseDataAccessMode } from '../DatabaseDataModel/IDatabaseDataModel'; @@ -39,11 +40,24 @@ export class DataModelWrapper extends DatabaseDataModel { } isLoading(): boolean { - return this.deprecatedModel.isLoaderVisible || this.source.isLoading(); + return !this.deprecatedModel.noLoaderWhileRequestingDataAsync && ( + this.deprecatedModel.isLoaderVisible || this.source.isLoading() + ); + } + + async reload(): Promise { + if(this.source.dataFormat === ResultDataFormat.Resultset) { + await this.deprecatedModel.refresh(); + } + this.setSlice(0, this.countGain); + await this.requestData(); } async refresh(): Promise { - await this.deprecatedModel.refresh(); + if(this.source.dataFormat === ResultDataFormat.Resultset) { + await this.deprecatedModel.refresh(); + return; + } await this.requestData(); } 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 8b52d53b92..065df4a451 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooter.tsx +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableFooter/TableFooter.tsx @@ -11,6 +11,7 @@ import { useCallback, useRef } from 'react'; import styled, { css, use } from 'reshadow'; import { IconButton, SubmittingForm } from '@cloudbeaver/core-blocks'; +import { ResultDataFormat } from '@cloudbeaver/core-sdk'; import { composes, useStyles } from '@cloudbeaver/core-theming'; import { DataModelWrapper } from '../DataModelWrapper'; @@ -82,7 +83,8 @@ export const TableFooter = observer(function TableFooter({ const value = parseInt(ref.current.value, 10); if (model.countGain !== value) { - model.setCountGain(value); + model.setCountGain(value) + .reload(); } }, [model] @@ -99,11 +101,18 @@ export const TableFooter = observer(function TableFooter({ - {model.deprecatedModel.requestStatusMessage.length > 0 && ( + {(model.source.dataFormat === ResultDataFormat.Resultset && + model.deprecatedModel.requestStatusMessage.length > 0) && ( )} + {(model.source.dataFormat !== ResultDataFormat.Resultset && + model.source.requestInfo.requestMessage.length > 0) && ( + + )} ); }); diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx b/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx index 6a9e14bbc3..05679cd995 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx @@ -64,7 +64,7 @@ export const TableViewer = observer(function TableViewer({ const handlePresentationChange = useCallback((id: string) => { const presentation = dataPresentationService.get(id); - if (presentation) { + if (presentation && presentation.dataFormat !== dataModel?.source.dataFormat) { dataModel?.setDataFormat(presentation.dataFormat) .reload(); onPresentationChange(id);