Cleanup and fixes for resource viewer and filter plugin (#12154)

* Cleanup and fixes for resource viewer and filter plugin

* fix strict nulls
This commit is contained in:
Charles Gagnon
2020-09-04 19:10:26 -07:00
committed by GitHub
parent fa5bfee0cf
commit b8d0e2a9e3
10 changed files with 191 additions and 134 deletions

View File

@@ -7,38 +7,32 @@ import * as nls from 'vs/nls';
import { EditorInput } from 'vs/workbench/common/editor';
import { Event, Emitter } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri';
import { ResourceViewerState } from 'sql/workbench/common/editor/resourceViewer/resourceViewerState';
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
import { IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService';
import { onUnexpectedError } from 'vs/base/common/errors';
import { getDataGridFormatter } from 'sql/workbench/services/dataGridProvider/browser/dataGridProviderUtils';
export interface ColumnDefinition extends Slick.Column<Slick.SlickData> {
name: string;
filterable?: boolean;
}
export class ResourceViewerInput extends EditorInput {
public static ID: string = 'workbench.editorInput.resourceViewerInput';
private _data: TableDataView<Slick.SlickData>;
private _columns: string[] = [];
private _state: ResourceViewerState;
private _data: Slick.SlickData[] = [];
private _columns: ColumnDefinition[] = [];
private _onColumnsChanged = new Emitter<Slick.Column<Slick.SlickData>[]>();
public onColumnsChanged: Event<Slick.Column<Slick.SlickData>[]> = this._onColumnsChanged.event;
constructor() {
super();
this._state = new ResourceViewerState();
let searchFn = (val: { [x: string]: string }, exp: string): Array<number> => {
let ret = new Array<number>();
for (let i = 0; i < this._columns.length; i++) {
let colVal = val[this._columns[i]];
if (colVal && colVal.toLocaleLowerCase().indexOf(exp.toLocaleLowerCase()) > -1) {
ret.push(i);
}
}
return ret;
};
private _onDataChanged = new Emitter<void>();
public onDataChanged: Event<void> = this._onDataChanged.event;
constructor(private _providerId: string, @IDataGridProviderService private _dataGridProvider: IDataGridProviderService) {
super();
this.fetchColumns();
this.fetchItems();
this._data = new TableDataView<Slick.SlickData>(undefined, searchFn, undefined, undefined);
}
public getTypeId(): string {
@@ -49,39 +43,49 @@ export class ResourceViewerInput extends EditorInput {
return nls.localize('resourceViewerInput.resourceViewer', "Resource Viewer");
}
public get data(): TableDataView<Slick.SlickData> {
public get data(): Slick.SlickData[] {
return this._data;
}
public get columnDefinitions(): ColumnDefinition[] {
if (this._columns) {
return this._columns.map(i => {
return {
id: i,
field: i,
name: i,
sortable: true
};
});
} else {
return [];
}
}
public set columns(columns: Array<string>) {
public set columns(columns: ColumnDefinition[]) {
this._columns = columns;
this._onColumnsChanged.fire(this.columnDefinitions);
this._onColumnsChanged.fire(this._columns);
}
public get state(): ResourceViewerState {
return this._state;
public get columns(): ColumnDefinition[] {
return this._columns;
}
isDirty(): boolean {
return false; // TODO chgagnon implement
return false;
}
public get resource(): URI | undefined {
return undefined;
}
private fetchColumns(): void {
this._dataGridProvider.getDataGridColumns(this._providerId).then(columns => {
this.columns = columns.map(col => {
return {
name: col.name,
field: col.field,
id: col.id,
formatter: getDataGridFormatter(col.type),
sortable: col.sortable ?? true,
filterable: col.filterable ?? true,
resizable: col.resizable ?? true,
tooltip: col.tooltip,
width: col.width
};
});
}).catch(err => onUnexpectedError(err));
}
private fetchItems(): void {
this._dataGridProvider.getDataGridItems(this._providerId).then(items => {
this._data = items;
this._onDataChanged.fire();
}).catch(err => onUnexpectedError(err));
}
}