mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Hide tabs on reexecute (#2624)
* add logic to hide tabs when a query rerun is executed * remove double entry in the map
This commit is contained in:
committed by
Karl Burtram
parent
cdc07d9f08
commit
8004776eff
@@ -61,6 +61,8 @@ export class TabbedPanel extends Disposable implements IThemable {
|
|||||||
private _onTabChange = new Emitter<PanelTabIdentifier>();
|
private _onTabChange = new Emitter<PanelTabIdentifier>();
|
||||||
public onTabChange: Event<PanelTabIdentifier> = this._onTabChange.event;
|
public onTabChange: Event<PanelTabIdentifier> = this._onTabChange.event;
|
||||||
|
|
||||||
|
private tabHistory: string[] = [];
|
||||||
|
|
||||||
constructor(private container: HTMLElement, private options: IPanelOptions = defaultOptions) {
|
constructor(private container: HTMLElement, private options: IPanelOptions = defaultOptions) {
|
||||||
super();
|
super();
|
||||||
this.$parent = this._register($('.tabbedPanel'));
|
this.$parent = this._register($('.tabbedPanel'));
|
||||||
@@ -152,6 +154,7 @@ export class TabbedPanel extends Disposable implements IThemable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._shownTab = id;
|
this._shownTab = id;
|
||||||
|
this.tabHistory.push(id);
|
||||||
this.$body.clearChildren();
|
this.$body.clearChildren();
|
||||||
let tab = this._tabMap.get(this._shownTab);
|
let tab = this._tabMap.get(this._shownTab);
|
||||||
this.$body.attr('aria-labelledby', tab.identifier);
|
this.$body.attr('aria-labelledby', tab.identifier);
|
||||||
@@ -173,6 +176,26 @@ export class TabbedPanel extends Disposable implements IThemable {
|
|||||||
}
|
}
|
||||||
this._tabMap.get(tab).header.destroy();
|
this._tabMap.get(tab).header.destroy();
|
||||||
this._tabMap.delete(tab);
|
this._tabMap.delete(tab);
|
||||||
|
if (this._shownTab === tab) {
|
||||||
|
this._shownTab = undefined;
|
||||||
|
while (this._shownTab === undefined && this.tabHistory.length > 0) {
|
||||||
|
let lastTab = this.tabHistory.shift();
|
||||||
|
if (this._tabMap.get(lastTab)) {
|
||||||
|
this.showTab(lastTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// this shouldn't happen but just in case
|
||||||
|
if (this._shownTab === undefined && this._tabMap.size > 0) {
|
||||||
|
this.showTab(this._tabMap.keys().next().value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.options.showHeaderWhenSingleView && this._tabMap.size === 1 && this._headerVisible) {
|
||||||
|
this.$header.offDOM();
|
||||||
|
this._headerVisible = false;
|
||||||
|
this.layout(this._currentDimensions);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public style(styles: IPanelStyles): void {
|
public style(styles: IPanelStyles): void {
|
||||||
|
|||||||
@@ -223,5 +223,4 @@ export class ShowQueryPlanAction extends Action {
|
|||||||
return TPromise.as(false);
|
return TPromise.as(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import { PanelViewlet } from 'vs/workbench/browser/parts/views/panelViewlet';
|
|||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import * as DOM from 'vs/base/browser/dom';
|
import * as DOM from 'vs/base/browser/dom';
|
||||||
import { once, anyEvent } from 'vs/base/common/event';
|
import { once, anyEvent } from 'vs/base/common/event';
|
||||||
|
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||||
|
|
||||||
class ResultsView implements IPanelView {
|
class ResultsView implements IPanelView {
|
||||||
private panelViewlet: PanelViewlet;
|
private panelViewlet: PanelViewlet;
|
||||||
@@ -155,6 +156,8 @@ export class QueryResultsView {
|
|||||||
private chartTab: ChartTab;
|
private chartTab: ChartTab;
|
||||||
private qpTab: QueryPlanTab;
|
private qpTab: QueryPlanTab;
|
||||||
|
|
||||||
|
private runnerDisposables: IDisposable[];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
container: HTMLElement,
|
container: HTMLElement,
|
||||||
@IInstantiationService instantiationService: IInstantiationService,
|
@IInstantiationService instantiationService: IInstantiationService,
|
||||||
@@ -177,12 +180,20 @@ export class QueryResultsView {
|
|||||||
|
|
||||||
public set input(input: QueryResultsInput) {
|
public set input(input: QueryResultsInput) {
|
||||||
this._input = input;
|
this._input = input;
|
||||||
|
dispose(this.runnerDisposables);
|
||||||
|
this.runnerDisposables = [];
|
||||||
this.resultsTab.view.state = this.input.state;
|
this.resultsTab.view.state = this.input.state;
|
||||||
this.qpTab.view.state = this.input.state.queryPlanState;
|
this.qpTab.view.state = this.input.state.queryPlanState;
|
||||||
this.chartTab.view.state = this.input.state.chartState;
|
this.chartTab.view.state = this.input.state.chartState;
|
||||||
let queryRunner = this.queryModelService._getQueryInfo(input.uri).queryRunner;
|
let queryRunner = this.queryModelService._getQueryInfo(input.uri).queryRunner;
|
||||||
this.resultsTab.queryRunner = queryRunner;
|
this.resultsTab.queryRunner = queryRunner;
|
||||||
this.chartTab.queryRunner = queryRunner;
|
this.chartTab.queryRunner = queryRunner;
|
||||||
|
this.runnerDisposables.push(queryRunner.onQueryStart(e => {
|
||||||
|
this.hideChart();
|
||||||
|
this.hidePlan();
|
||||||
|
this.input.state.visibleTabs = new Set();
|
||||||
|
this.input.state.activeTab = this.resultsTab.identifier;
|
||||||
|
}));
|
||||||
if (this.input.state.visibleTabs.has(this.chartTab.identifier)) {
|
if (this.input.state.visibleTabs.has(this.chartTab.identifier)) {
|
||||||
if (!this._panelView.contains(this.chartTab)) {
|
if (!this._panelView.contains(this.chartTab)) {
|
||||||
this._panelView.pushTab(this.chartTab);
|
this._panelView.pushTab(this.chartTab);
|
||||||
@@ -220,6 +231,12 @@ export class QueryResultsView {
|
|||||||
this.chartTab.chart(dataId);
|
this.chartTab.chart(dataId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public hideChart() {
|
||||||
|
if (this._panelView.contains(this.chartTab)) {
|
||||||
|
this._panelView.removeTab(this.chartTab.identifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public showPlan(xml: string) {
|
public showPlan(xml: string) {
|
||||||
this.input.state.visibleTabs.add(this.qpTab.identifier);
|
this.input.state.visibleTabs.add(this.qpTab.identifier);
|
||||||
if (!this._panelView.contains(this.qpTab)) {
|
if (!this._panelView.contains(this.qpTab)) {
|
||||||
@@ -229,4 +246,10 @@ export class QueryResultsView {
|
|||||||
this._panelView.showTab(this.qpTab.identifier);
|
this._panelView.showTab(this.qpTab.identifier);
|
||||||
this.qpTab.view.showPlan(xml);
|
this.qpTab.view.showPlan(xml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public hidePlan() {
|
||||||
|
if (this._panelView.contains(this.qpTab)) {
|
||||||
|
this._panelView.removeTab(this.qpTab.identifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user