fix grid resizing interation with editor (#2427)

This commit is contained in:
Anthony Dresser
2018-09-05 17:32:58 -07:00
committed by GitHub
parent 534bbe9b9a
commit f147d799e0
7 changed files with 109 additions and 51 deletions

View File

@@ -97,6 +97,7 @@ export class GridPanel extends ViewletPanel {
private tables: GridTable<any>[] = [];
private tableDisposable: IDisposable[] = [];
private queryRunnerDisposables: IDisposable[] = [];
private currentHeight: number;
private runner: QueryRunner;
@@ -123,6 +124,11 @@ export class GridPanel extends ViewletPanel {
protected layoutBody(size: number): void {
this.splitView.layout(size);
// if the size hasn't change it won't layout our table so we have to do it manually
if (size === this.currentHeight) {
this.tables.map(e => e.layout());
}
this.currentHeight = size;
}
public set queryRunner(runner: QueryRunner) {
@@ -229,6 +235,7 @@ class GridTable<T> extends Disposable implements IView {
private container = document.createElement('div');
private selectionModel = new CellSelectionModel();
private styles: ITableStyles;
private currentHeight: number;
private columns: Slick.Column<T>[];
@@ -349,10 +356,15 @@ class GridTable<T> extends Disposable implements IView {
}
}
public layout(size: number): void {
public layout(size?: number): void {
if (!this.table) {
this.build();
}
if (!size) {
size = this.currentHeight;
} else {
this.currentHeight = size;
}
this.table.layout(
new Dimension(
getContentWidth(this.container) - ACTIONBAR_WIDTH,

View File

@@ -109,24 +109,14 @@ export class MessagePanel extends ViewletPanel {
this.queryRunnerDisposables = [];
this.reset();
this.queryRunnerDisposables.push(runner.onQueryStart(() => this.reset()));
this.queryRunnerDisposables.push(runner.onBatchStart(e => this.onBatchStart(e)));
this.queryRunnerDisposables.push(runner.onMessage(e => this.onMessage(e)));
this.queryRunnerDisposables.push(runner.onQueryEnd(e => this.onQueryEnd(e)));
}
private onMessage(message: IResultMessage | IResultMessage[]) {
if (isArray(message)) {
this.model.messages.push(...message.map(c => {
return <IMessagePanelMessage>{
isError: c.isError,
message: c.message
};
}));
this.model.messages.push(...message);
} else {
this.model.messages.push({
message: message.message,
isError: message.isError
});
this.model.messages.push(message);
}
const previousScrollPosition = this.tree.getScrollPosition();
this.tree.refresh(this.model).then(() => {
@@ -136,34 +126,6 @@ export class MessagePanel extends ViewletPanel {
});
}
private onBatchStart(batch: BatchSummary) {
this.model.messages.push({
message: localize('query.message.startQuery', 'Started executing query at Line {0}', batch.selection.startLine),
time: new Date(batch.executionStart).toLocaleTimeString(),
selection: batch.selection,
isError: false
});
const previousScrollPosition = this.tree.getScrollPosition();
this.tree.refresh(this.model).then(() => {
if (previousScrollPosition === 1) {
this.tree.setScrollPosition(1);
}
});
}
private onQueryEnd(elapsedTime: string) {
this.model.totalExecuteMessage = {
message: localize('query.message.executionTime', 'Total execution time: {0}', elapsedTime),
isError: false
};
const previousScrollPosition = this.tree.getScrollPosition();
this.tree.refresh(this.model).then(() => {
if (previousScrollPosition === 1) {
this.tree.setScrollPosition(1);
}
});
}
private reset() {
this.model.messages = [];
this.model.totalExecuteMessage = undefined;

View File

@@ -158,5 +158,8 @@ export class QueryResultsEditor extends BaseEditor {
public dispose(): void {
super.dispose();
if (this.resultsView) {
this.resultsView.dispose();
}
}
}

View File

@@ -24,6 +24,7 @@ class ResultsView implements IPanelView {
private gridPanel: GridPanel;
private messagePanel: MessagePanel;
private container = document.createElement('div');
private currentDimension: DOM.Dimension;
constructor(instantiationService: IInstantiationService) {
this.panelViewlet = instantiationService.createInstance(PanelViewlet, 'resultsView', { showHeaderInTitleWhenSingleView: false });
@@ -45,6 +46,11 @@ class ResultsView implements IPanelView {
layout(dimension: DOM.Dimension): void {
this.panelViewlet.layout(dimension);
// the grid won't be resize if the height has not changed so we need to do it manually
if (this.currentDimension && dimension.height === this.currentDimension.height) {
this.gridPanel.layout(dimension.height);
}
this.currentDimension = dimension;
}
remove(): void {
@@ -101,8 +107,13 @@ export class QueryResultsView {
let queryRunner = this.queryModelService._getQueryInfo(input.uri).queryRunner;
this.resultsTab.queryRunner = queryRunner;
this.chartTab.queryRunner = queryRunner;
if (!this._panelView.contains(this.resultsTab)) {
this._panelView.pushTab(this.resultsTab);
}
}
this._panelView.pushTab(this.resultsTab);
public dispose() {
this._panelView.dispose();
}
public get input(): QueryResultsInput {