mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-21 09:35:38 -05:00
Strict null pass on some base ui files (#4832)
* more strict null checks in base browser code * revert changes to radiobutton * fix some more minor things, enable strict null check in pipelines * formatting * fix compile errors * make null undefined * more null to undefined
This commit is contained in:
@@ -16,7 +16,7 @@ export interface IObservableCollection<T> {
|
||||
}
|
||||
|
||||
class DataWindow<T> {
|
||||
private _data: T[];
|
||||
private _data: T[] | undefined;
|
||||
private _length: number = 0;
|
||||
private _offsetFromDataSource: number = -1;
|
||||
|
||||
@@ -30,9 +30,6 @@ class DataWindow<T> {
|
||||
|
||||
dispose() {
|
||||
this._data = undefined;
|
||||
this.loadFunction = undefined;
|
||||
this.placeholderItemGenerator = undefined;
|
||||
this.loadCompleteCallback = undefined;
|
||||
this.cancellationToken.cancel();
|
||||
}
|
||||
|
||||
@@ -157,7 +154,7 @@ export class VirtualizedCollection<T extends Slick.SlickData> implements IObserv
|
||||
}
|
||||
|
||||
private getRangeFromCurrent(start: number, end: number): T[] {
|
||||
let currentData = [];
|
||||
const currentData: Array<T> = [];
|
||||
for (let i = 0; i < end - start; i++) {
|
||||
currentData.push(this.getDataFromCurrent(start + i));
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ export interface ITableStyles extends IListStyles {
|
||||
}
|
||||
|
||||
export interface ITableSorter<T> {
|
||||
sort(args: Slick.OnSortEventArgs<T>);
|
||||
(args: Slick.OnSortEventArgs<T>): void;
|
||||
}
|
||||
|
||||
export interface ITableConfiguration<T> {
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
import 'vs/css!./media/table';
|
||||
import { TableDataView } from './tableDataView';
|
||||
import { IDisposableDataProvider, ITableSorter, ITableMouseEvent, ITableConfiguration, ITableStyles } from 'sql/base/browser/ui/table/interfaces';
|
||||
import { $ } from 'sql/base/browser/builder';
|
||||
|
||||
import { IThemable } from 'vs/platform/theme/common/styler';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
@@ -94,7 +93,7 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
||||
if (configuration && configuration.sorter) {
|
||||
this._sorter = configuration.sorter;
|
||||
this._grid.onSort.subscribe((e, args) => {
|
||||
this._sorter.sort(args);
|
||||
this._sorter(args);
|
||||
this._grid.invalidate();
|
||||
this._grid.render();
|
||||
});
|
||||
@@ -121,7 +120,7 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
||||
}
|
||||
|
||||
public dispose() {
|
||||
$(this._container).dispose();
|
||||
this._container.remove();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -146,9 +145,9 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
||||
return this._grid;
|
||||
}
|
||||
|
||||
setData(data: Array<T>);
|
||||
setData(data: TableDataView<T>);
|
||||
setData(data: Array<T> | TableDataView<T>) {
|
||||
setData(data: Array<T>): void;
|
||||
setData(data: TableDataView<T>): void;
|
||||
setData(data: Array<T> | TableDataView<T>): void {
|
||||
if (data instanceof TableDataView) {
|
||||
this._data = data;
|
||||
} else {
|
||||
|
||||
@@ -16,22 +16,27 @@ export interface IFindPosition {
|
||||
row: number;
|
||||
}
|
||||
|
||||
function defaultSort<T>(args: Slick.OnSortEventArgs<T>, data: Array<T>): Array<T> {
|
||||
let field = args.sortCol.field;
|
||||
let sign = args.sortAsc ? 1 : -1;
|
||||
let comparer: (a, b) => number;
|
||||
function defaultSort<T extends { [key: string]: any }>(args: Slick.OnSortEventArgs<T>, data: Array<T>): Array<T> {
|
||||
if (!args.sortCol || !args.sortCol.field) {
|
||||
return data;
|
||||
}
|
||||
const field = args.sortCol.field;
|
||||
const sign = args.sortAsc ? 1 : -1;
|
||||
let comparer: (a: T, b: T) => number;
|
||||
if (types.isString(data[0][field])) {
|
||||
if (Number(data[0][field]) !== NaN) {
|
||||
comparer = (a: number, b: number) => {
|
||||
comparer = (a: T, b: T) => {
|
||||
let anum = Number(a[field]);
|
||||
let bnum = Number(b[field]);
|
||||
return anum === bnum ? 0 : anum > bnum ? 1 : -1;
|
||||
};
|
||||
} else {
|
||||
comparer = stringCompare;
|
||||
comparer = (a: T, b: T) => {
|
||||
return stringCompare(a[field], b[field]);
|
||||
};
|
||||
}
|
||||
} else {
|
||||
comparer = (a: number, b: number) => {
|
||||
comparer = (a: T, b: T) => {
|
||||
return a[field] === b[field] ? 0 : (a[field] > b[field] ? 1 : -1);
|
||||
};
|
||||
}
|
||||
@@ -44,7 +49,7 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
//Used when filtering is enabled, _allData holds the complete set of data.
|
||||
private _allData: Array<T>;
|
||||
private _findArray: Array<IFindPosition>;
|
||||
private _findObs: Observable<IFindPosition>;
|
||||
private _findObs: Observable<IFindPosition> | undefined;
|
||||
private _findIndex: number;
|
||||
private _filterEnabled: boolean;
|
||||
|
||||
@@ -57,11 +62,14 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
private _onFilterStateChange = new Emitter<void>();
|
||||
get onFilterStateChange(): Event<void> { return this._onFilterStateChange.event; }
|
||||
|
||||
private _filterFn: (data: Array<T>) => Array<T>;
|
||||
private _sortFn: (args: Slick.OnSortEventArgs<T>, data: Array<T>) => Array<T>;
|
||||
|
||||
constructor(
|
||||
data?: Array<T>,
|
||||
private _findFn?: (val: T, exp: string) => Array<number>,
|
||||
private _sortFn?: (args: Slick.OnSortEventArgs<T>, data: Array<T>) => Array<T>,
|
||||
private _filterFn?: (data: Array<T>) => Array<T>
|
||||
_sortFn?: (args: Slick.OnSortEventArgs<T>, data: Array<T>) => Array<T>,
|
||||
_filterFn?: (data: Array<T>) => Array<T>
|
||||
) {
|
||||
if (data) {
|
||||
this._data = data;
|
||||
@@ -69,13 +77,9 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
this._data = new Array<T>();
|
||||
}
|
||||
|
||||
if (!_sortFn) {
|
||||
this._sortFn = defaultSort;
|
||||
}
|
||||
this._sortFn = _sortFn ? _sortFn : defaultSort;
|
||||
|
||||
if (!_filterFn) {
|
||||
this._filterFn = (dataToFilter) => dataToFilter;
|
||||
}
|
||||
this._filterFn = _filterFn ? _filterFn : (dataToFilter) => dataToFilter;
|
||||
this._filterEnabled = false;
|
||||
}
|
||||
|
||||
@@ -119,9 +123,9 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
return this.filterEnabled ? this._allData.length : this._data.length;
|
||||
}
|
||||
|
||||
push(items: Array<T>);
|
||||
push(item: T);
|
||||
push(input: T | Array<T>) {
|
||||
push(items: Array<T>): void;
|
||||
push(item: T): void;
|
||||
push(input: T | Array<T>): void {
|
||||
let inputArray = new Array();
|
||||
if (Array.isArray(input)) {
|
||||
inputArray.push(...input);
|
||||
@@ -161,7 +165,7 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
this._findObs = Observable.create((observer: Observer<IFindPosition>) => {
|
||||
for (let i = 0; i < this._data.length; i++) {
|
||||
let item = this._data[i];
|
||||
let result = this._findFn(item, exp);
|
||||
let result = this._findFn!(item, exp);
|
||||
if (result) {
|
||||
result.forEach(pos => {
|
||||
let index = { col: pos, row: i };
|
||||
@@ -175,7 +179,7 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
}
|
||||
}
|
||||
});
|
||||
return this._findObs.take(1).toPromise().then(() => {
|
||||
return this._findObs!.take(1).toPromise().then(() => {
|
||||
return this._findArray[this._findIndex];
|
||||
});
|
||||
} else {
|
||||
@@ -234,9 +238,9 @@ export class TableDataView<T extends Slick.SlickData> implements IDisposableData
|
||||
}
|
||||
|
||||
dispose() {
|
||||
this._data = undefined;
|
||||
this._allData = undefined;
|
||||
this._findArray = undefined;
|
||||
this._data = [];
|
||||
this._allData = [];
|
||||
this._findArray = [];
|
||||
this._findObs = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user