diff --git a/extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts b/extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts index 1ed853dab9..5cd3f55d88 100644 --- a/extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts +++ b/extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts @@ -367,16 +367,20 @@ export class PostgresParametersPage extends DashboardPage { @debounce(500) private onSearchFilter(): void { if (!this.searchBox!.value) { - this.parametersTable.data = this._parameters.map(p => [p.parameterName, p.valueContainer, p.description, p.resetButton]); + this.parametersTable.setFilter(undefined); } else { this.filterParameters(this.searchBox!.value); } } private filterParameters(search: string): void { - this.parametersTable.data = this._parameters - .filter(p => p.parameterName?.search(search) !== -1 || p.description?.search(search) !== -1) - .map(p => [p.parameterName, p.valueContainer, p.description, p.resetButton]); + const filteredRowIndexes: number[] = []; + this.parametersTable.data?.forEach((row, index) => { + if (row[0]?.search(search) !== -1 || row[2]?.search(search) !== -1) { + filteredRowIndexes.push(index); + } + }); + this.parametersTable.setFilter(filteredRowIndexes); } private handleOnTextChanged(component: azdata.InputBoxComponent, currentValue: string | undefined): boolean { diff --git a/extensions/machine-learning/src/test/views/utils.ts b/extensions/machine-learning/src/test/views/utils.ts index 3620660470..2e758f0607 100644 --- a/extensions/machine-learning/src/test/views/utils.ts +++ b/extensions/machine-learning/src/test/views/utils.ts @@ -107,6 +107,7 @@ export function createViewContext(): ViewTestContext { let declarativeTable: () => azdata.DeclarativeTableComponent = () => Object.assign({}, componentBase, { onDataChanged: undefined!, onRowSelected: undefined!, + setFilter: undefined!, data: [], columns: [] }); diff --git a/extensions/notebook/src/test/common.ts b/extensions/notebook/src/test/common.ts index c5cf8b9a0e..55abefac6b 100644 --- a/extensions/notebook/src/test/common.ts +++ b/extensions/notebook/src/test/common.ts @@ -347,6 +347,7 @@ class TestDeclarativeTableComponent extends TestComponentBase implements azdata. } onDataChanged: vscode.Event = this.onClick.event; onRowSelected: vscode.Event = this.onClick.event; + setFilter: undefined; data: any[][]; columns: azdata.DeclarativeTableColumn[]; } diff --git a/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts b/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts index 20acf40931..34263d61ea 100644 --- a/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts +++ b/extensions/notebook/src/test/managePackages/managePackagesDialog.test.ts @@ -184,6 +184,7 @@ describe('Manage Package Dialog', () => { let declarativeTable: () => azdata.DeclarativeTableComponent = () => Object.assign({}, componentBase, { onDataChanged: undefined!, onRowSelected: undefined!, + setFilter: undefined!, data: [], columns: [] }); diff --git a/src/sql/azdata.proposed.d.ts b/src/sql/azdata.proposed.d.ts index 1ebc6dc3e2..5242c60220 100644 --- a/src/sql/azdata.proposed.d.ts +++ b/src/sql/azdata.proposed.d.ts @@ -300,6 +300,11 @@ declare module 'azdata' { export interface DeclarativeTableComponent extends Component, DeclarativeTableProperties { onRowSelected: vscode.Event; + /** + * Sets the filter currently applied to this table - only rows with index in the given array will be visible. undefined + * will clear the filter + */ + setFilter(rowIndexes: number[] | undefined): void; } /* diff --git a/src/sql/platform/dashboard/browser/interfaces.ts b/src/sql/platform/dashboard/browser/interfaces.ts index 55b3a7fd54..cc0ee8e08c 100644 --- a/src/sql/platform/dashboard/browser/interfaces.ts +++ b/src/sql/platform/dashboard/browser/interfaces.ts @@ -28,7 +28,8 @@ export enum ComponentEventType { */ export enum ModelViewAction { SelectTab = 'selectTab', - AppendData = 'appendData' + AppendData = 'appendData', + Filter = 'filter' } /** diff --git a/src/sql/workbench/api/common/extHostModelView.ts b/src/sql/workbench/api/common/extHostModelView.ts index e45a290cdb..01828266f0 100644 --- a/src/sql/workbench/api/common/extHostModelView.ts +++ b/src/sql/workbench/api/common/extHostModelView.ts @@ -1585,6 +1585,10 @@ class DeclarativeTableWrapper extends ComponentWrapper implements azdata.Declara this.setProperty('selectEffect', v); } + public setFilter(rowIndexes: number[]): void { + this._proxy.$doAction(this._handle, this._id, ModelViewAction.Filter, rowIndexes); + } + public toComponentShape(): IComponentShape { // Overridden to ensure we send the correct properties mapping. return { diff --git a/src/sql/workbench/api/common/sqlExtHostTypes.ts b/src/sql/workbench/api/common/sqlExtHostTypes.ts index 18ece7dc7b..e148c8dcd1 100644 --- a/src/sql/workbench/api/common/sqlExtHostTypes.ts +++ b/src/sql/workbench/api/common/sqlExtHostTypes.ts @@ -183,7 +183,8 @@ export enum ModelComponentTypes { export enum ModelViewAction { SelectTab = 'selectTab', - AppendData = 'appendData' + AppendData = 'appendData', + Filter = 'filter' } export enum ColumnSizingMode { diff --git a/src/sql/workbench/browser/modelComponents/declarativeTable.component.html b/src/sql/workbench/browser/modelComponents/declarativeTable.component.html index 97d85418b4..a2db933823 100644 --- a/src/sql/workbench/browser/modelComponents/declarativeTable.component.html +++ b/src/sql/workbench/browser/modelComponents/declarativeTable.component.html @@ -16,7 +16,7 @@ - +