From f0cb1a4d2fa42eeaeffcb14e9e49b9c820ac0438 Mon Sep 17 00:00:00 2001 From: Wroud Date: Tue, 25 Aug 2020 12:59:12 +0300 Subject: [PATCH] fix(plugin-data-spreadsheet): ag-grid refresh CB-255 --- .../src/AgGridTable/AgGridTable.tsx | 5 ++- .../src/AgGridTable/AgGridTableController.ts | 2 +- .../SqlResultPanel/SqlResultPanel.tsx | 30 +++++++------- .../SqlResultPanelController.ts | 39 +++++++++---------- .../src/SqlResultTabs/SqlResultTabs.tsx | 18 +++++---- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTable.tsx b/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTable.tsx index b2da7cab65..08f0aec3ed 100644 --- a/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTable.tsx +++ b/webapp/packages/plugin-data-spreadsheet/src/AgGridTable/AgGridTable.tsx @@ -7,7 +7,7 @@ */ import { observer, Observer } from 'mobx-react'; -import { PropsWithChildren } from 'react'; +import { PropsWithChildren, useMemo, useRef } from 'react'; import styled from 'reshadow'; import { AgGridReactProps } from '@ag-grid-community/react'; @@ -48,8 +48,11 @@ export const AgGridTable = observer(function AgGridTable({ className, ...rest }: AgGridTableProps) { + const refreshRef = useRef(0); const styles = useStyles(agGridStyles); const controller = useController(AgGridTableController, tableModel); + useMemo(() => refreshRef.current === controller.refreshId && controller.refresh(), [tableModel]); + refreshRef.current = controller.refreshId; return ( )} - {controller.state === EPanelState.MESSAGE_RESULT - && ( - - - {controller.executionResult} -
- - {controller.getQuery()} - -
-
- ) - } - {controller.state === EPanelState.TABLE_RESULT - && - } + {controller.state === EPanelState.MESSAGE_RESULT && ( + + + {controller.executionResult} +
+ + {controller.getQuery()} + +
+
+ )} + {controller.state === EPanelState.TABLE_RESULT && ( + + )} ); }); diff --git a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts index c2f7a4467a..90fd8786e2 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultPanel/SqlResultPanelController.ts @@ -97,28 +97,25 @@ implements IInitializableController, IDestructibleController { const connectionInfo = await this.connectionInfoResource.load(this.group.sqlQueryParams.connectionId); - let tableModel = this.tableViewerStorageService.get(this.getTableId()); - - if (!tableModel) { - tableModel = this.tableViewerStorageService.create({ - tableId: this.getTableId(), - connectionId: this.group.sqlQueryParams.connectionId, - executionContext: this.group.sqlQueryParams, - resultId: dataSet.resultSet.id, - sourceName: this.group.sqlQueryParams.query, - access: connectionInfo.readOnly ? AccessMode.Readonly : AccessMode.Default, - requestDataAsync: this.requestDataAsync.bind(this, sqlExecutionContext), - noLoaderWhileRequestingDataAsync: true, - saveChanges: this.saveChanges.bind(this), - }); - - tableModel.insertRows(0, initialState.rows, !initialState.isFullyLoaded); - tableModel.setColumns(initialState.columns); - tableModel.updateInfo(initialState.statusMessage, initialState.duration); - } else { - await this.updateTableInfo(tableModel, dataSet.resultSet.id); - tableModel.refresh(); + if (this.tableViewerStorageService.has(this.getTableId())) { + this.tableViewerStorageService.remove(this.getTableId()); } + + const tableModel = this.tableViewerStorageService.create({ + tableId: this.getTableId(), + connectionId: this.group.sqlQueryParams.connectionId, + executionContext: this.group.sqlQueryParams, + resultId: dataSet.resultSet.id, + sourceName: this.group.sqlQueryParams.query, + access: connectionInfo.readOnly ? AccessMode.Readonly : AccessMode.Default, + requestDataAsync: this.requestDataAsync.bind(this, sqlExecutionContext), + noLoaderWhileRequestingDataAsync: true, + saveChanges: this.saveChanges.bind(this), + }); + + tableModel.insertRows(0, initialState.rows, !initialState.isFullyLoaded); + tableModel.setColumns(initialState.columns); + tableModel.updateInfo(initialState.statusMessage, initialState.duration); } } catch (exception) { diff --git a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultTabs.tsx b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultTabs.tsx index 303d894ab7..7412fa7d63 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultTabs.tsx +++ b/webapp/packages/plugin-sql-editor/src/SqlResultTabs/SqlResultTabs.tsx @@ -55,16 +55,18 @@ export const SqlResultTabs = observer(function SqlDataResult({ tab }: SqlDataRes const orderedTabs = useMemo( () => computed( - () => tab.handlerState.resultTabs.sort((tabA, tabB) => { - if (tabA.groupId === tabB.groupId) { - return tabA.order - tabB.order; - } + () => tab.handlerState.resultTabs + .slice() + .sort((tabA, tabB) => { + if (tabA.groupId === tabB.groupId) { + return tabA.order - tabB.order; + } - const groupA = tab.handlerState.queryTabGroups.find(group => group.groupId === tabA.groupId)!; - const groupB = tab.handlerState.queryTabGroups.find(group => group.groupId === tabB.groupId)!; + const groupA = tab.handlerState.queryTabGroups.find(group => group.groupId === tabA.groupId)!; + const groupB = tab.handlerState.queryTabGroups.find(group => group.groupId === tabB.groupId)!; - return groupA.order - groupB.order; - }) + return groupA.order - groupB.order; + }) ), [tab] );