Add close method to ModelView dashboards (#14812)

* Add close method to ModelView dashboards

* fix closing

* remove accessors

* Update errors
This commit is contained in:
Charles Gagnon
2021-03-22 10:17:16 -07:00
committed by GitHub
parent 98ba49304e
commit 72295d46c2
24 changed files with 95 additions and 51 deletions

View File

@@ -19,6 +19,7 @@ import * as azdata from 'azdata';
import { assign } from 'vs/base/common/objects';
import { TelemetryView, TelemetryAction } from 'sql/platform/telemetry/common/telemetryKeys';
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
@extHostNamedCustomer(SqlMainContext.MainThreadModelViewDialog)
export class MainThreadModelViewDialog implements MainThreadModelViewDialogShape {
@@ -30,6 +31,7 @@ export class MainThreadModelViewDialog implements MainThreadModelViewDialogShape
private readonly _wizardPageHandles = new Map<WizardPage, number>();
private readonly _wizards = new Map<number, Wizard>();
private readonly _editorInputModels = new Map<number, ModelViewInputModel>();
private readonly _editors = new Map<number, { pane: IEditorPane, input: IEditorInput }>();
private _dialogService: CustomDialogService;
constructor(
@@ -58,8 +60,15 @@ export class MainThreadModelViewDialog implements MainThreadModelViewDialogShape
this._telemetryService.createActionEvent(TelemetryView.Shell, TelemetryAction.ModelViewDashboardOpened)
.withAdditionalProperties({ name: name })
.send();
this._editorService.openEditor(input, editorOptions, position as any).then((editor) => {
this._editorService.openEditor(input, editorOptions, position as any).then((editorPane) => {
this._editorInputModels.set(handle, model);
this._editors.set(handle, { pane: editorPane, input: editorPane.input });
const disposable = this._editorService.onDidCloseEditor(e => {
if (e.editor === input) {
this._editors.delete(handle);
disposable.dispose();
}
});
resolve();
}, error => {
reject(error);
@@ -67,6 +76,18 @@ export class MainThreadModelViewDialog implements MainThreadModelViewDialogShape
});
}
public $closeEditor(handle: number): Thenable<void> {
return new Promise<void>((resolve, reject) => {
const editor = this._editors.get(handle);
if (editor) {
editor.pane.group.closeEditor(editor.input).then(() => {
resolve();
}).catch(e => reject(e));
}
reject(new Error(`Could not find editor with handle ${handle}`));
});
}
private handleSave(handle: number): Thenable<boolean> {
return this._proxy.$handleSave(handle);
}

View File

@@ -23,7 +23,7 @@ const PREVIOUS_LABEL = nls.localize('dialogPreviousLabel', "Previous");
class ModelViewPanelImpl implements azdata.window.ModelViewPanel {
private _modelView: azdata.ModelView;
private _handle: number;
public handle: number;
protected _modelViewId: string;
protected _valid: boolean = true;
protected _onValidityChanged: vscode.Event<boolean>;
@@ -38,7 +38,7 @@ class ModelViewPanelImpl implements azdata.window.ModelViewPanel {
public registerContent(handler: (view: azdata.ModelView) => Thenable<void>): void {
if (!this._modelViewId) {
let viewId = this._viewType + this._handle;
let viewId = this._viewType + this.handle;
this.setModelViewId(viewId);
this._extHostModelView.$registerProvider(viewId, modelView => {
this._modelView = modelView;
@@ -47,10 +47,6 @@ class ModelViewPanelImpl implements azdata.window.ModelViewPanel {
}
}
public set handle(value: number) {
this._handle = value;
}
public setModelViewId(value: string) {
this._modelViewId = value;
}
@@ -93,6 +89,10 @@ class ModelViewEditorImpl extends ModelViewPanelImpl implements azdata.workspace
return this._proxy.$openEditor(this.handle, this._modelViewId, this._title, this._name, this._options, position);
}
public closeEditor(): Thenable<void> {
return this._proxy.$closeEditor(this.handle);
}
public get isDirty(): boolean {
return this._isDirty;
}
@@ -568,6 +568,10 @@ class ModelViewDashboardImpl implements azdata.window.ModelViewDashboard {
return this._editor.openEditor();
}
close(): Thenable<void> {
return this._editor.closeEditor();
}
createTab(tab: azdata.DashboardTab, view: azdata.ModelView): azdata.Tab {
if (tab.toolbar) {
const flexContainer = view.modelBuilder.flexContainer().withLayout({ flexFlow: 'column' }).component();

View File

@@ -820,6 +820,7 @@ export interface ExtHostModelViewDialogShape {
export interface MainThreadModelViewDialogShape extends IDisposable {
$openEditor(handle: number, modelViewId: string, title: string, name?: string, options?: azdata.ModelViewEditorOptions, position?: vscode.ViewColumn): Thenable<void>;
$closeEditor(handle: number): Thenable<void>;
$openDialog(handle: number, dialogName?: string): Thenable<void>;
$closeDialog(handle: number): Thenable<void>;
$setDialogDetails(handle: number, details: IModelViewDialogDetails): Thenable<void>;