mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(plugin-data-viewer): CB-287 some additions and fixes
This commit is contained in:
@@ -25,11 +25,17 @@ export interface IDataContainerResult extends IDatabaseDataResult {
|
||||
}
|
||||
|
||||
export class ContainerDataSource extends DatabaseDataSource<IDataContainerOptions, IDataContainerResult> {
|
||||
canCancel: boolean;
|
||||
private executionContext: IExecutionContext | null;
|
||||
|
||||
constructor(private graphQLService: GraphQLService) {
|
||||
super();
|
||||
this.executionContext = null;
|
||||
this.canCancel = false;
|
||||
}
|
||||
|
||||
cancel(): Promise<boolean> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
async request(
|
||||
@@ -64,7 +70,9 @@ export class ContainerDataSource extends DatabaseDataSource<IDataContainerOption
|
||||
return readDataFromContainer.results.map<IDataContainerResult>(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,
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -52,6 +52,11 @@ implements IDatabaseDataModel<TOptions, TResult> {
|
||||
await this.requestData();
|
||||
}
|
||||
|
||||
setResults(results: TResult[]): this {
|
||||
this.results = results;
|
||||
return this;
|
||||
}
|
||||
|
||||
setCountGain(count: number): this {
|
||||
this.countGain = count;
|
||||
return this;
|
||||
|
||||
@@ -21,6 +21,7 @@ implements IDatabaseDataSource<TOptions, TResult> {
|
||||
@observable options: TOptions | null;
|
||||
@observable requestInfo: IRequestInfo;
|
||||
@observable supportedDataFormats: ResultDataFormat[];
|
||||
abstract canCancel: boolean;
|
||||
|
||||
@observable private activeRequest: Promise<TResult[]> | null;
|
||||
@observable private activeSave: Promise<TResult[]> | null;
|
||||
@@ -39,6 +40,8 @@ implements IDatabaseDataSource<TOptions, TResult> {
|
||||
};
|
||||
}
|
||||
|
||||
abstract cancel(): Promise<boolean>;
|
||||
|
||||
isLoading(): boolean {
|
||||
return !!this.activeRequest;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ export interface IDatabaseDataSource<TOptions, TResult extends IDatabaseDataResu
|
||||
readonly requestInfo: IRequestInfo;
|
||||
readonly dataFormat: ResultDataFormat;
|
||||
readonly supportedDataFormats: ResultDataFormat[];
|
||||
readonly canCancel: boolean;
|
||||
|
||||
isLoading(): boolean;
|
||||
setSlice(offset: number, count: number): this;
|
||||
@@ -47,4 +48,5 @@ export interface IDatabaseDataSource<TOptions, TResult extends IDatabaseDataResu
|
||||
prevResults: TResult[],
|
||||
data: DataUpdate
|
||||
): Promise<TResult[]> | TResult[];
|
||||
cancel(): Promise<boolean>;
|
||||
}
|
||||
|
||||
@@ -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<any> {
|
||||
}
|
||||
|
||||
isLoading(): boolean {
|
||||
return this.deprecatedModel.isLoaderVisible || this.source.isLoading();
|
||||
return !this.deprecatedModel.noLoaderWhileRequestingDataAsync && (
|
||||
this.deprecatedModel.isLoaderVisible || this.source.isLoading()
|
||||
);
|
||||
}
|
||||
|
||||
async reload(): Promise<void> {
|
||||
if(this.source.dataFormat === ResultDataFormat.Resultset) {
|
||||
await this.deprecatedModel.refresh();
|
||||
}
|
||||
this.setSlice(0, this.countGain);
|
||||
await this.requestData();
|
||||
}
|
||||
|
||||
async refresh(): Promise<void> {
|
||||
await this.deprecatedModel.refresh();
|
||||
if(this.source.dataFormat === ResultDataFormat.Resultset) {
|
||||
await this.deprecatedModel.refresh();
|
||||
return;
|
||||
}
|
||||
await this.requestData();
|
||||
}
|
||||
|
||||
|
||||
@@ -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({
|
||||
</SubmittingForm>
|
||||
</count>
|
||||
<TableFooterMenu model={model} />
|
||||
{model.deprecatedModel.requestStatusMessage.length > 0 && (
|
||||
{(model.source.dataFormat === ResultDataFormat.Resultset &&
|
||||
model.deprecatedModel.requestStatusMessage.length > 0) && (
|
||||
<time>
|
||||
{model.deprecatedModel.requestStatusMessage} - {model.deprecatedModel.queryDuration}ms
|
||||
</time>
|
||||
)}
|
||||
{(model.source.dataFormat !== ResultDataFormat.Resultset &&
|
||||
model.source.requestInfo.requestMessage.length > 0) && (
|
||||
<time>
|
||||
{model.source.requestInfo.requestMessage} - {model.source.requestInfo.requestDuration}ms
|
||||
</time>
|
||||
)}
|
||||
</table-footer>
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user