mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Fix for table resizing (#9117)
* some optimization * check for table * fix table resizing * Fix for sash crash * Removed space * small optimization * small change in message * small change * changed wording * removed timeout for onResize * Removed onGridRendered * fix isCellOnScreen * small spacing fixes * removed timeout in gridParentComponent * fix for indexing * reduced instances of "self" * minor fixes for self and this
This commit is contained in:
@@ -31,7 +31,7 @@ import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
|||||||
import { EditUpdateCellResult } from 'azdata';
|
import { EditUpdateCellResult } from 'azdata';
|
||||||
import { ILogService } from 'vs/platform/log/common/log';
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
import { deepClone, assign } from 'vs/base/common/objects';
|
import { deepClone, assign } from 'vs/base/common/objects';
|
||||||
import { Emitter, Event } from 'vs/base/common/event';
|
import { Event } from 'vs/base/common/event';
|
||||||
import { equals } from 'vs/base/common/arrays';
|
import { equals } from 'vs/base/common/arrays';
|
||||||
import * as DOM from 'vs/base/browser/dom';
|
import * as DOM from 'vs/base/browser/dom';
|
||||||
|
|
||||||
@@ -50,6 +50,7 @@ export class EditDataGridPanel extends GridParentComponent {
|
|||||||
// FIELDS
|
// FIELDS
|
||||||
// All datasets
|
// All datasets
|
||||||
private gridDataProvider: AsyncDataProvider<any>;
|
private gridDataProvider: AsyncDataProvider<any>;
|
||||||
|
//main dataset to work on.
|
||||||
private dataSet: IGridDataSet;
|
private dataSet: IGridDataSet;
|
||||||
private oldDataRows: VirtualizedCollection<any>;
|
private oldDataRows: VirtualizedCollection<any>;
|
||||||
private firstRender = true;
|
private firstRender = true;
|
||||||
@@ -392,7 +393,6 @@ export class EditDataGridPanel extends GridParentComponent {
|
|||||||
let undefinedDataSet = deepClone(dataSet);
|
let undefinedDataSet = deepClone(dataSet);
|
||||||
undefinedDataSet.columnDefinitions = dataSet.columnDefinitions;
|
undefinedDataSet.columnDefinitions = dataSet.columnDefinitions;
|
||||||
undefinedDataSet.dataRows = undefined;
|
undefinedDataSet.dataRows = undefined;
|
||||||
undefinedDataSet.resized = new Emitter();
|
|
||||||
self.placeHolderDataSets.push(undefinedDataSet);
|
self.placeHolderDataSets.push(undefinedDataSet);
|
||||||
if (self.placeHolderDataSets[0]) {
|
if (self.placeHolderDataSets[0]) {
|
||||||
this.refreshDatasets();
|
this.refreshDatasets();
|
||||||
@@ -425,35 +425,37 @@ export class EditDataGridPanel extends GridParentComponent {
|
|||||||
|
|
||||||
private refreshGrid(): Thenable<void> {
|
private refreshGrid(): Thenable<void> {
|
||||||
return new Promise<void>(async (resolve, reject) => {
|
return new Promise<void>(async (resolve, reject) => {
|
||||||
const self = this;
|
|
||||||
clearTimeout(self.refreshGridTimeoutHandle);
|
clearTimeout(this.refreshGridTimeoutHandle);
|
||||||
|
|
||||||
this.refreshGridTimeoutHandle = setTimeout(() => {
|
this.refreshGridTimeoutHandle = setTimeout(() => {
|
||||||
|
|
||||||
if (self.dataSet && self.placeHolderDataSets[0].resized) {
|
if (this.dataSet) {
|
||||||
self.placeHolderDataSets[0].dataRows = self.dataSet.dataRows;
|
this.placeHolderDataSets[0].dataRows = this.dataSet.dataRows;
|
||||||
self.placeHolderDataSets[0].resized.fire();
|
this.onResize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (self.oldDataRows !== self.placeHolderDataSets[0].dataRows) {
|
if (this.oldDataRows !== this.placeHolderDataSets[0].dataRows) {
|
||||||
self.detectChange();
|
this.detectChange();
|
||||||
self.oldDataRows = self.placeHolderDataSets[0].dataRows;
|
this.oldDataRows = this.placeHolderDataSets[0].dataRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.firstRender) {
|
if (this.firstRender) {
|
||||||
let setActive = function () {
|
setTimeout(() => this.setActive());
|
||||||
if (self.firstRender && self.table) {
|
|
||||||
self.table.setActive();
|
|
||||||
self.firstRender = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
setTimeout(() => setActive());
|
|
||||||
}
|
}
|
||||||
resolve();
|
resolve();
|
||||||
}, self.refreshGridTimeoutInMs);
|
}, this.refreshGridTimeoutInMs);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setActive() {
|
||||||
|
if (this.firstRender && this.table) {
|
||||||
|
this.table.setActive();
|
||||||
|
this.firstRender = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected detectChange(): void {
|
protected detectChange(): void {
|
||||||
if (this.firstLoad) {
|
if (this.firstLoad) {
|
||||||
this.handleChanges({
|
this.handleChanges({
|
||||||
@@ -754,7 +756,7 @@ export class EditDataGridPanel extends GridParentComponent {
|
|||||||
let cellBox = grid.getCellNodeBox(row, column);
|
let cellBox = grid.getCellNodeBox(row, column);
|
||||||
return viewport && cellBox
|
return viewport && cellBox
|
||||||
&& viewport.leftPx <= cellBox.left && viewport.rightPx >= cellBox.right
|
&& viewport.leftPx <= cellBox.left && viewport.rightPx >= cellBox.right
|
||||||
&& viewport.top <= row && viewport.bottom >= row;
|
&& viewport.top < row + 1 && viewport.bottom > row + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private resetCurrentCell() {
|
private resetCurrentCell() {
|
||||||
@@ -1002,9 +1004,6 @@ export class EditDataGridPanel extends GridParentComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private setupEvents(): void {
|
private setupEvents(): void {
|
||||||
this.table.grid.onScroll.subscribe((e, args) => {
|
|
||||||
this.onScroll(args);
|
|
||||||
});
|
|
||||||
this.table.grid.onCellChange.subscribe((e, args) => {
|
this.table.grid.onCellChange.subscribe((e, args) => {
|
||||||
this.onCellEditEnd(args);
|
this.onCellEditEnd(args);
|
||||||
});
|
});
|
||||||
@@ -1037,27 +1036,15 @@ export class EditDataGridPanel extends GridParentComponent {
|
|||||||
// handleInitializeTable() will be called *after* the first time handleChanges() is called
|
// handleInitializeTable() will be called *after* the first time handleChanges() is called
|
||||||
// so, grid must be there already
|
// so, grid must be there already
|
||||||
|
|
||||||
if (this.dataSet.dataRows && this.dataSet.dataRows.getLength() > 0) {
|
if (this.placeHolderDataSets[0].dataRows && this.placeHolderDataSets[0].dataRows.getLength() > 0) {
|
||||||
this.table.grid.scrollRowToTop(0);
|
this.table.grid.scrollRowToTop(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.dataSet.resized) {
|
|
||||||
// Re-rendering the grid is expensive. Throttle so we only do so every 100ms.
|
|
||||||
this.dataSet.resized.throttleTime(100)
|
|
||||||
.subscribe(() => this.onResize());
|
|
||||||
}
|
|
||||||
|
|
||||||
// subscribe to slick events
|
// subscribe to slick events
|
||||||
// https://github.com/mleibman/SlickGrid/wiki/Grid-Events
|
// https://github.com/mleibman/SlickGrid/wiki/Grid-Events
|
||||||
this.setupEvents();
|
this.setupEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
private onResize(): void {
|
|
||||||
if (this.table.grid !== undefined) {
|
|
||||||
// this will make sure the grid header and body to be re-rendered
|
|
||||||
this.table.grid.resizeCanvas();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Formatter for Column*/
|
/*Formatter for Column*/
|
||||||
private getColumnFormatter(row: number | undefined, cell: any | undefined, value: any, columnDef: any | undefined, dataContext: any | undefined): string {
|
private getColumnFormatter(row: number | undefined, cell: any | undefined, value: any, columnDef: any | undefined, dataContext: any | undefined): string {
|
||||||
|
|||||||
@@ -499,14 +499,15 @@ export abstract class GridParentComponent extends Disposable {
|
|||||||
protected abstract tryHandleKeyEvent(e: StandardKeyboardEvent): boolean;
|
protected abstract tryHandleKeyEvent(e: StandardKeyboardEvent): boolean;
|
||||||
|
|
||||||
resizeGrids(): void {
|
resizeGrids(): void {
|
||||||
const self = this;
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
for (let grid of self.renderedDataSets) {
|
this.onResize();
|
||||||
grid.resized.fire();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected onResize() {
|
||||||
|
this.table?.resizeCanvas();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* used to render the native element into the container.
|
* used to render the native element into the container.
|
||||||
* */
|
* */
|
||||||
|
|||||||
Reference in New Issue
Block a user