From 3e5b7fd3e6ef62cfcfe7723fb89cb3e1cf1101b3 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Sat, 2 May 2020 19:37:42 -0700 Subject: [PATCH] Fix errors in message panel (#10257) * fix errors in message panel * fix compile --- .../common/editor/query/messagePanelState.ts | 19 --------- .../common/editor/query/queryResultsInput.ts | 3 -- .../contrib/query/browser/messagePanel.ts | 42 +++++++++++-------- .../contrib/query/browser/queryResultsView.ts | 6 --- 4 files changed, 24 insertions(+), 46 deletions(-) delete mode 100644 src/sql/workbench/common/editor/query/messagePanelState.ts diff --git a/src/sql/workbench/common/editor/query/messagePanelState.ts b/src/sql/workbench/common/editor/query/messagePanelState.ts deleted file mode 100644 index b5a641159a..0000000000 --- a/src/sql/workbench/common/editor/query/messagePanelState.ts +++ /dev/null @@ -1,19 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the Source EULA. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -export interface IMessageTreeState { - readonly focus: string[]; - readonly selection: string[]; - readonly expanded: string[]; - readonly scrollTop: number; -} - -export class MessagePanelState { - public viewState?: IMessageTreeState; - - dispose() { - - } -} diff --git a/src/sql/workbench/common/editor/query/queryResultsInput.ts b/src/sql/workbench/common/editor/query/queryResultsInput.ts index 0369823815..44381638b4 100644 --- a/src/sql/workbench/common/editor/query/queryResultsInput.ts +++ b/src/sql/workbench/common/editor/query/queryResultsInput.ts @@ -9,14 +9,12 @@ import { EditorInput } from 'vs/workbench/common/editor'; import { TopOperationsState } from 'sql/workbench/common/editor/query/topOperationsState'; import { ChartState } from 'sql/workbench/common/editor/query/chartState'; import { QueryPlanState } from 'sql/workbench/common/editor/query/queryPlanState'; -import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState'; import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState'; import { QueryModelViewState } from 'sql/workbench/common/editor/query/modelViewState'; import { URI } from 'vs/base/common/uri'; export class ResultsViewState { public readonly gridPanelState: GridPanelState = new GridPanelState(); - public readonly messagePanelState: MessagePanelState = new MessagePanelState(); public readonly chartState: ChartState = new ChartState(); public readonly queryPlanState: QueryPlanState = new QueryPlanState(); public readonly topOperationsState = new TopOperationsState(); @@ -27,7 +25,6 @@ export class ResultsViewState { dispose() { this.gridPanelState.dispose(); - this.messagePanelState.dispose(); this.chartState.dispose(); this.queryPlanState.dispose(); this.dynamicModelViewTabsState.forEach((state: QueryModelViewState, identifier: string) => { diff --git a/src/sql/workbench/contrib/query/browser/messagePanel.ts b/src/sql/workbench/contrib/query/browser/messagePanel.ts index b1bd5e5e11..d5fd3bc7c3 100644 --- a/src/sql/workbench/contrib/query/browser/messagePanel.ts +++ b/src/sql/workbench/contrib/query/browser/messagePanel.ts @@ -18,8 +18,7 @@ import { isArray, isString } from 'vs/base/common/types'; import { Disposable, DisposableStore, dispose } from 'vs/base/common/lifecycle'; import { $, Dimension, createStyleSheet, addStandardDisposableGenericMouseDownListner } from 'vs/base/browser/dom'; import { resultsErrorColor } from 'sql/platform/theme/common/colors'; -import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState'; -import { CachedListVirtualDelegate } from 'vs/base/browser/ui/list/list'; +import { CachedListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list/list'; import { FuzzyScore } from 'vs/base/common/filters'; import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; import { localize } from 'vs/nls'; @@ -32,6 +31,7 @@ import { URI } from 'vs/base/common/uri'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { QueryEditor } from 'sql/workbench/contrib/query/browser/queryEditor'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { IDataTreeViewState } from 'vs/base/browser/ui/tree/dataTree'; export interface IResultMessageIntern { id?: string; @@ -40,6 +40,7 @@ export interface IResultMessageIntern { time?: string | Date; message: string; selection?: ISelectionData; + } export interface IMessagePanelMessage { @@ -79,13 +80,20 @@ export class AccessibilityProvider implements IListAccessibilityProvider { + getId(element: IResultMessageIntern): { toString(): string; } { + return () => element.id; + } +} + export class MessagePanel extends Disposable { private model = new Model(); private container = $('.message-tree'); private styleElement = createStyleSheet(this.container); private queryRunnerDisposables = this._register(new DisposableStore()); - private _state: MessagePanelState | undefined; + private _treeStates = new Map(); + private currenturi: string; private tree: WorkbenchDataTree; @@ -112,10 +120,10 @@ export class MessagePanel extends Disposable { accessibilityProvider: new AccessibilityProvider(), mouseSupport: false, setRowLineHeight: false, - supportDynamicHeights: true + supportDynamicHeights: true, + identityProvider: new IdentityProvider() }); this._register(this.tree.onContextMenu(e => this.onContextMenu(e))); - this._register(this.tree.onDidScroll(() => this.state.viewState = this.tree.getViewState())); this.tree.setInput(this.model); this.container.style.width = '100%'; this.container.style.height = '100%'; @@ -175,20 +183,28 @@ export class MessagePanel extends Disposable { } public set queryRunner(runner: QueryRunner) { + if (this.currenturi) { + this._treeStates.set(this.currenturi, this.tree.getViewState()); + } this.queryRunnerDisposables.clear(); this.reset(); + this.currenturi = runner.uri; this.queryRunnerDisposables.add(runner.onQueryStart(() => this.reset())); this.queryRunnerDisposables.add(runner.onMessage(e => this.onMessage(e))); - this.onMessage(runner.messages); + this.onMessage(runner.messages, true); } - private onMessage(message: IQueryMessage | IQueryMessage[]) { + private onMessage(message: IQueryMessage | IQueryMessage[], setInput: boolean = false) { if (isArray(message)) { this.model.messages.push(...message); } else { this.model.messages.push(message); } - this.tree.updateChildren(); + if (setInput) { + this.tree.setInput(this.model, this._treeStates.get(this.currenturi)); + } else { + this.tree.updateChildren(); + } } private applyStyles(theme: IColorTheme): void { @@ -206,20 +222,10 @@ export class MessagePanel extends Disposable { private reset() { this.model.messages = []; - this._state = undefined; this.model.totalExecuteMessage = undefined; this.tree.updateChildren(); } - public set state(val: MessagePanelState) { - this._state = val; - this.tree.setInput(this.model, val.viewState); - } - - public get state(): MessagePanelState { - return this._state; - } - public clear() { this.reset(); } diff --git a/src/sql/workbench/contrib/query/browser/queryResultsView.ts b/src/sql/workbench/contrib/query/browser/queryResultsView.ts index 69669f6735..d89aedff57 100644 --- a/src/sql/workbench/contrib/query/browser/queryResultsView.ts +++ b/src/sql/workbench/contrib/query/browser/queryResultsView.ts @@ -13,7 +13,6 @@ import { ChartTab } from 'sql/workbench/contrib/charts/browser/chartTab'; import { QueryPlanTab } from 'sql/workbench/contrib/queryPlan/browser/queryPlan'; import { TopOperationsTab } from 'sql/workbench/contrib/queryPlan/browser/topOperations'; import { QueryModelViewTab } from 'sql/workbench/contrib/query/browser/modelViewTab/queryModelViewTab'; -import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState'; import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState'; import * as nls from 'vs/nls'; @@ -61,10 +60,6 @@ class MessagesView extends Disposable implements IPanelView { public set queryRunner(runner: QueryRunner) { this.messagePanel.queryRunner = runner; } - - public set state(val: MessagePanelState) { - this.messagePanel.state = val; - } } class ResultsView extends Disposable implements IPanelView { @@ -305,7 +300,6 @@ export class QueryResultsView extends Disposable { this.dynamicModelViewTabs.forEach(t => t.clear()); this.resultsTab.view.state = this.input.state.gridPanelState; - this.messagesTab.view.state = this.input.state.messagePanelState; this.qpTab.view.state = this.input.state.queryPlanState; this.topOperationsTab.view.state = this.input.state.topOperationsState; this.chartTab.view.state = this.input.state.chartState;