feat(plugin-data-viewer): CB-287 some additions and fixes

This commit is contained in:
Wroud
2020-10-06 23:42:52 +03:00
parent f64f64053b
commit cfec6c2f65
7 changed files with 47 additions and 6 deletions
@@ -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);