mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
fix filter not applied issue (#15186)
This commit is contained in:
@@ -10,7 +10,7 @@ import { escape } from 'sql/base/common/strings';
|
|||||||
import { addDisposableListener } from 'vs/base/browser/dom';
|
import { addDisposableListener } from 'vs/base/browser/dom';
|
||||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||||
import { withNullAsUndefined } from 'vs/base/common/types';
|
import { withNullAsUndefined } from 'vs/base/common/types';
|
||||||
import { IDisposableDataProvider } from 'sql/base/common/dataProvider';
|
import { instanceOfIDisposableDataProvider } from 'sql/base/common/dataProvider';
|
||||||
import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
|
import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
|
||||||
import { IInputBoxStyles, InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
import { IInputBoxStyles, InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||||
import { trapKeyboardNavigation } from 'sql/base/browser/dom';
|
import { trapKeyboardNavigation } from 'sql/base/browser/dom';
|
||||||
@@ -224,13 +224,13 @@ export class HeaderFilter<T extends Slick.SlickData> {
|
|||||||
|
|
||||||
let filterItems: Array<string>;
|
let filterItems: Array<string>;
|
||||||
|
|
||||||
const provider = this.grid.getData() as IDisposableDataProvider<T>;
|
const dataView = this.grid.getData() as Slick.DataProvider<T>;
|
||||||
|
|
||||||
if (provider.getColumnValues) {
|
if (instanceOfIDisposableDataProvider(dataView)) {
|
||||||
if (this.workingFilters.length === 0) {
|
if (this.workingFilters.length === 0) {
|
||||||
filterItems = await provider.getColumnValues(this.columnDef);
|
filterItems = await dataView.getColumnValues(this.columnDef);
|
||||||
} else {
|
} else {
|
||||||
filterItems = await provider.getFilteredColumnValues(this.columnDef);
|
filterItems = await dataView.getFilteredColumnValues(this.columnDef);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (this.workingFilters.length === 0) {
|
if (this.workingFilters.length === 0) {
|
||||||
@@ -287,7 +287,7 @@ export class HeaderFilter<T extends Slick.SlickData> {
|
|||||||
this.clearButton.label = localize('headerFilter.clear', "Clear");
|
this.clearButton.label = localize('headerFilter.clear', "Clear");
|
||||||
this.clearButton.title = localize('headerFilter.clear', "Clear");
|
this.clearButton.title = localize('headerFilter.clear', "Clear");
|
||||||
this.clearButton.element.id = 'filter-clear-button';
|
this.clearButton.element.id = 'filter-clear-button';
|
||||||
this.okButton.onDidClick(() => {
|
this.clearButton.onDidClick(() => {
|
||||||
this.columnDef.filterValues!.length = 0;
|
this.columnDef.filterValues!.length = 0;
|
||||||
this.setButtonImage($menuButton, false);
|
this.setButtonImage($menuButton, false);
|
||||||
this.handleApply(this.columnDef);
|
this.handleApply(this.columnDef);
|
||||||
@@ -378,10 +378,9 @@ export class HeaderFilter<T extends Slick.SlickData> {
|
|||||||
|
|
||||||
private handleApply(columnDef: Slick.Column<T>) {
|
private handleApply(columnDef: Slick.Column<T>) {
|
||||||
this.hideMenu();
|
this.hideMenu();
|
||||||
const provider = this.grid.getData() as IDisposableDataProvider<T>;
|
const dataView = this.grid.getData();
|
||||||
|
if (instanceOfIDisposableDataProvider(dataView)) {
|
||||||
if (provider.filter) {
|
dataView.filter(this.grid.getColumns());
|
||||||
provider.filter(this.grid.getColumns());
|
|
||||||
this.grid.invalidateAllRows();
|
this.grid.invalidateAllRows();
|
||||||
this.grid.updateRowCount();
|
this.grid.updateRowCount();
|
||||||
this.grid.render();
|
this.grid.render();
|
||||||
@@ -401,11 +400,11 @@ export class HeaderFilter<T extends Slick.SlickData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async getFilterValuesByInput(column: Slick.Column<T>, filter: string): Promise<Array<string>> {
|
private async getFilterValuesByInput(column: Slick.Column<T>, filter: string): Promise<Array<string>> {
|
||||||
const dataView = this.grid.getData() as IDisposableDataProvider<T>,
|
const dataView = this.grid.getData() as Slick.DataProvider<T>,
|
||||||
seen: Set<any> = new Set();
|
seen: Set<any> = new Set();
|
||||||
|
|
||||||
let columnValues: any[];
|
let columnValues: any[];
|
||||||
if (dataView.getColumnValues) {
|
if (instanceOfIDisposableDataProvider(dataView)) {
|
||||||
columnValues = await dataView.getColumnValues(this.columnDef);
|
columnValues = await dataView.getColumnValues(this.columnDef);
|
||||||
} else {
|
} else {
|
||||||
columnValues = dataView.getItems().map(item => item[column.field]);
|
columnValues = dataView.getItems().map(item => item[column.field]);
|
||||||
@@ -442,10 +441,9 @@ export class HeaderFilter<T extends Slick.SlickData> {
|
|||||||
|
|
||||||
private async handleMenuItemClick(command: HeaderFilterCommands, columnDef: Slick.Column<T>) {
|
private async handleMenuItemClick(command: HeaderFilterCommands, columnDef: Slick.Column<T>) {
|
||||||
this.hideMenu();
|
this.hideMenu();
|
||||||
const provider = this.grid.getData() as IDisposableDataProvider<T>;
|
const dataView = this.grid.getData();
|
||||||
|
if (instanceOfIDisposableDataProvider<T>(dataView) && (command === 'sort-asc' || command === 'sort-desc')) {
|
||||||
if (provider.sort && (command === 'sort-asc' || command === 'sort-desc')) {
|
await dataView.sort({
|
||||||
await provider.sort({
|
|
||||||
grid: this.grid,
|
grid: this.grid,
|
||||||
multiColumnSort: false,
|
multiColumnSort: false,
|
||||||
sortCol: this.columnDef,
|
sortCol: this.columnDef,
|
||||||
@@ -455,6 +453,7 @@ export class HeaderFilter<T extends Slick.SlickData> {
|
|||||||
this.grid.updateRowCount();
|
this.grid.updateRowCount();
|
||||||
this.grid.render();
|
this.grid.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onCommand.notify({
|
this.onCommand.notify({
|
||||||
grid: this.grid,
|
grid: this.grid,
|
||||||
column: columnDef,
|
column: columnDef,
|
||||||
|
|||||||
@@ -59,3 +59,11 @@ export interface IDisposableDataProvider<T> extends Slick.DataProvider<T> {
|
|||||||
*/
|
*/
|
||||||
readonly isDataInMemory: boolean;
|
readonly isDataInMemory: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the object is an instance of IDisposableDataProvider
|
||||||
|
*/
|
||||||
|
export function instanceOfIDisposableDataProvider<T>(obj: any): obj is IDisposableDataProvider<T> {
|
||||||
|
const provider = obj as IDisposableDataProvider<T>;
|
||||||
|
return obj && provider.dispose && provider.sort && provider.isDataInMemory !== undefined;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user