diff --git a/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts b/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts index 0767b68177..1ae60e9adf 100644 --- a/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts @@ -37,7 +37,7 @@ export class HeaderFilter { private columnDef!: FilterableColumn; private buttonStyles?: IButtonStyles; private disposableStore = new DisposableStore(); - public enabled: boolean = true; + private _enabled: boolean = true; constructor() { } @@ -435,4 +435,18 @@ export class HeaderFilter { e.preventDefault(); e.stopPropagation(); } + + public get enabled(): boolean { + return this._enabled; + } + + public set enabled(value: boolean) { + if (this._enabled !== value) { + this._enabled = value; + // force the table header to redraw. + this.grid.getColumns().forEach((column) => { + this.grid.updateColumnHeader(column.id); + }); + } + } } diff --git a/src/sql/workbench/contrib/query/browser/gridPanel.ts b/src/sql/workbench/contrib/query/browser/gridPanel.ts index baa6d91e49..cf71179c89 100644 --- a/src/sql/workbench/contrib/query/browser/gridPanel.ts +++ b/src/sql/workbench/contrib/query/browser/gridPanel.ts @@ -430,6 +430,7 @@ export abstract class GridTableBase extends Disposable implements IView { this.renderGridDataRowsRange(startIndex, count); }); this.dataProvider.dataRows = collection; + this.setFilterState(); this.table.updateRowCount(); await this.setupState(); } @@ -525,7 +526,7 @@ export abstract class GridTableBase extends Disposable implements IView { }; this.table.rerenderGrid(); })); - if (this.configurationService.getValue('workbench')['enablePreviewFeatures']) { + if (this.enableFilteringFeature) { this.filterPlugin = new HeaderFilter(); attachButtonStyler(this.filterPlugin, this.themeService); this.table.registerPlugin(this.filterPlugin); @@ -686,15 +687,25 @@ export abstract class GridTableBase extends Disposable implements IView { public updateResult(resultSet: ResultSetSummary) { this._resultSet = resultSet; if (this.table && this.visible) { - if (this.configurationService.getValue('workbench')['enablePreviewFeatures'] && this.options.inMemoryDataProcessing && this.options.inMemoryDataCountThreshold < resultSet.rowCount) { - this.filterPlugin.enabled = false; - } this.dataProvider.length = resultSet.rowCount; + this.setFilterState(); this.table.updateRowCount(); } this._onDidChange.fire(undefined); } + private get enableFilteringFeature(): boolean { + return this.configurationService.getValue('workbench')['enablePreviewFeatures']; + } + + private setFilterState(): void { + if (this.enableFilteringFeature) { + const rowCount = this.table.getData().getLength(); + this.filterPlugin.enabled = this.options.inMemoryDataProcessing + && (this.options.inMemoryDataCountThreshold === undefined || this.options.inMemoryDataCountThreshold >= rowCount); + } + } + private generateContext(cell?: Slick.Cell): IGridActionContext { const selection = this.selectionModel.getSelectedRanges(); return {