From aeda95bb7035bebb43fdcf616cd52f6b0f9d794c Mon Sep 17 00:00:00 2001 From: Alan Ren Date: Fri, 18 Jun 2021 11:40:19 -0700 Subject: [PATCH] fix race condition in declarative table (#15801) --- extensions/machine-learning/src/test/views/utils.ts | 3 ++- extensions/notebook/src/test/common.ts | 1 + .../test/managePackages/managePackagesDialog.test.ts | 3 ++- src/sql/azdata.proposed.d.ts | 9 ++++++++- src/sql/workbench/api/common/extHostModelView.ts | 5 +++++ .../modelComponents/declarativeTable.component.ts | 11 ++++++----- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/extensions/machine-learning/src/test/views/utils.ts b/extensions/machine-learning/src/test/views/utils.ts index b9fadfa8f8..dd23bdf796 100644 --- a/extensions/machine-learning/src/test/views/utils.ts +++ b/extensions/machine-learning/src/test/views/utils.ts @@ -109,7 +109,8 @@ export function createViewContext(): ViewTestContext { onRowSelected: undefined!, setFilter: undefined!, data: [], - columns: [] + columns: [], + setDataValues: undefined! }); let loadingComponent: () => azdata.LoadingComponent = () => Object.assign({}, componentBase, { diff --git a/extensions/notebook/src/test/common.ts b/extensions/notebook/src/test/common.ts index d355fec1e8..f70a86a1a0 100644 --- a/extensions/notebook/src/test/common.ts +++ b/extensions/notebook/src/test/common.ts @@ -350,6 +350,7 @@ class TestDeclarativeTableComponent extends TestComponentBase implements azdata. setFilter: undefined; data: any[][]; columns: azdata.DeclarativeTableColumn[]; + setDataValues: undefined; } class TestButtonComponent extends TestComponentBase implements azdata.ButtonComponent { diff --git a/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts b/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts index b1f587d866..4ac738a662 100644 --- a/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts +++ b/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts @@ -186,7 +186,8 @@ describe('Manage Package Dialog', () => { onRowSelected: undefined!, setFilter: undefined!, data: [], - columns: [] + columns: [], + setDataValues: undefined! }); let loadingComponent: () => azdata.LoadingComponent = () => Object.assign({}, componentBase, { diff --git a/src/sql/azdata.proposed.d.ts b/src/sql/azdata.proposed.d.ts index 8c7e5926ee..e3ae03aff9 100644 --- a/src/sql/azdata.proposed.d.ts +++ b/src/sql/azdata.proposed.d.ts @@ -274,6 +274,12 @@ declare module 'azdata' { * will clear the filter */ setFilter(rowIndexes: number[] | undefined): void; + + /** + * Sets the data values. + * @param v The new data values + */ + setDataValues(v: DeclarativeTableCellValue[][]): Promise; } /* @@ -372,7 +378,8 @@ declare module 'azdata' { export interface DeclarativeTableProperties { /** - * dataValues will only be used if data is an empty array + * dataValues will only be used if data is an empty array. + * To set the dataValues, it is recommended to use the setDataValues method that returns a promise. */ dataValues?: DeclarativeTableCellValue[][]; diff --git a/src/sql/workbench/api/common/extHostModelView.ts b/src/sql/workbench/api/common/extHostModelView.ts index 0b46f884f6..bf7b1ff5b9 100644 --- a/src/sql/workbench/api/common/extHostModelView.ts +++ b/src/sql/workbench/api/common/extHostModelView.ts @@ -1568,6 +1568,11 @@ class DeclarativeTableWrapper extends ComponentWrapper implements azdata.Declara }); } + async setDataValues(v: azdata.DeclarativeTableCellValue[][]): Promise { + await this.clearItems(); + await this.setProperty('dataValues', v); + } + public get columns(): azdata.DeclarativeTableColumn[] { return this.properties['columns']; } diff --git a/src/sql/workbench/browser/modelComponents/declarativeTable.component.ts b/src/sql/workbench/browser/modelComponents/declarativeTable.component.ts index 4d5b207b1d..ed613102d0 100644 --- a/src/sql/workbench/browser/modelComponents/declarativeTable.component.ts +++ b/src/sql/workbench/browser/modelComponents/declarativeTable.component.ts @@ -298,17 +298,18 @@ export default class DeclarativeTableComponent extends ContainerBase