diff --git a/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts b/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts index f88718fa9b..4997973bcb 100644 --- a/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts +++ b/webapp/packages/plugin-data-viewer/src/ContainerDataSource.ts @@ -46,12 +46,12 @@ export class ContainerDataSource extends DatabaseDataSource { + cancel(): boolean { if (this.currentFetchTableProcess) { return this.currentFetchTableProcess.cancel(); } throw new Error('currentFetchTableProcess must be provided to run cancel method'); - }; + } async request( prevResults: IDataContainerResult[] diff --git a/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts b/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts index 87255dfce9..1cff8ab07d 100644 --- a/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts +++ b/webapp/packages/plugin-data-viewer/src/DataViewerTableService.ts @@ -21,13 +21,10 @@ import { TableViewerStorageService } from './TableViewer/TableViewerStorageServi @injectable() export class DataViewerTableService { - private source: ContainerDataSource; - constructor(private tableViewerStorageService: TableViewerStorageService, private connectionInfoResource: ConnectionInfoResource, private graphQLService: GraphQLService, private notificationService: NotificationService) { - this.source = new ContainerDataSource(graphQLService, notificationService); } has(tableId: string): boolean { @@ -57,6 +54,7 @@ export class DataViewerTableService { containerNodePath = '' ): Promise { const connectionInfo = await this.connectionInfoResource.load(connectionId); + const source = new ContainerDataSource(this.graphQLService, this.notificationService); return this.tableViewerStorageService.create( { @@ -64,10 +62,10 @@ export class DataViewerTableService { connectionId, containerNodePath, access: connectionInfo.readOnly ? DatabaseDataAccessMode.Readonly : DatabaseDataAccessMode.Default, - requestDataAsync: this.requestDataAsync.bind(this), + requestDataAsync: this.requestDataAsync.bind(this, source), saveChanges: this.saveChanges.bind(this), }, - this.source + source .setOptions({ connectionId, containerNodePath, @@ -127,6 +125,7 @@ export class DataViewerTableService { } private async requestDataAsync( + source: ContainerDataSource, model: TableViewerModel, offset: number, count: number, @@ -156,7 +155,7 @@ export class DataViewerTableService { }, ); - this.source.currentFetchTableProcess = fetchTableProcess; + source.currentFetchTableProcess = fetchTableProcess; const response = await fetchTableProcess.promise; const dataSet = response!.results[0].resultSet!; // we expect only one dataset for a table diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx b/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx index 11e35c3fed..95df2ce96c 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx @@ -104,7 +104,7 @@ export const TableViewer = observer(function TableViewer({ loading={dataModel.isLoading()} cancelDisabled={!dataModel.source.canCancel} overlay - onCancel={dataModel.source.cancel} + onCancel={() => dataModel.source.cancel()} /> );