Move mostRecentlyActiveView variable to DataExtensionsEditorModule

This commit is contained in:
Robert
2023-08-15 15:36:14 +01:00
parent ee78df683a
commit 87754a9ec9
2 changed files with 35 additions and 23 deletions

View File

@@ -32,6 +32,9 @@ export class DataExtensionsEditorModule extends DisposableObject {
private readonly queryStorageDir: string;
private readonly modelDetailsPanel: ModelDetailsPanel;
private mostRecentlyActiveView: DataExtensionsEditorView | undefined =
undefined;
private constructor(
private readonly ctx: ExtensionContext,
private readonly app: App,
@@ -48,6 +51,20 @@ export class DataExtensionsEditorModule extends DisposableObject {
this.modelDetailsPanel = this.push(new ModelDetailsPanel(cliServer));
}
private handleViewBecameActive(view: DataExtensionsEditorView): void {
this.mostRecentlyActiveView = view;
}
private handleViewWasDisposed(view: DataExtensionsEditorView): void {
if (this.mostRecentlyActiveView === view) {
this.mostRecentlyActiveView = undefined;
}
}
private isMostRecentlyActiveView(view: DataExtensionsEditorView): boolean {
return this.mostRecentlyActiveView === view;
}
public static async initialize(
ctx: ExtensionContext,
app: App,
@@ -149,6 +166,9 @@ export class DataExtensionsEditorModule extends DisposableObject {
Mode.Application,
this.modelDetailsPanel.setState.bind(this.modelDetailsPanel),
this.modelDetailsPanel.revealItem.bind(this.modelDetailsPanel),
this.handleViewBecameActive.bind(this),
this.handleViewWasDisposed.bind(this),
this.isMostRecentlyActiveView.bind(this),
);
await view.openView();
},

View File

@@ -3,7 +3,6 @@ import {
ExtensionContext,
Uri,
ViewColumn,
WebviewPanel,
window,
} from "vscode";
import {
@@ -49,8 +48,6 @@ export class DataExtensionsEditorView extends AbstractWebview<
ToDataExtensionsEditorMessage,
FromDataExtensionsEditorMessage
> {
private static mostRecentlyActivePanel: WebviewPanel | undefined = undefined;
private readonly autoModeler: AutoModeler;
private externalApiUsages: ExternalApiUsage[];
@@ -71,6 +68,15 @@ export class DataExtensionsEditorView extends AbstractWebview<
databaseItem: DatabaseItem,
) => Promise<void>,
private readonly revealItemInDetailsPanel: (usage: Usage) => Promise<void>,
private readonly handleViewBecameActive: (
view: DataExtensionsEditorView,
) => void,
private readonly handleViewWasDisposed: (
view: DataExtensionsEditorView,
) => void,
private readonly isMostRecentlyActiveView: (
view: DataExtensionsEditorView,
) => boolean,
) {
super(ctx);
@@ -100,7 +106,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
panel.onDidChangeViewState(async () => {
if (panel.active) {
await this.onPanelBecameActive();
this.handleViewBecameActive(this);
await this.updateModelDetailsPanelState(
this.externalApiUsages,
this.databaseItem,
@@ -109,29 +115,12 @@ export class DataExtensionsEditorView extends AbstractWebview<
});
panel.onDidDispose(async () => {
await this.onPanelWasDisposed();
this.handleViewWasDisposed(this);
});
await this.waitForPanelLoaded();
}
private async onPanelBecameActive(): Promise<void> {
const panel = await this.getPanel();
DataExtensionsEditorView.mostRecentlyActivePanel = panel;
}
private async onPanelWasDisposed(): Promise<void> {
const panel = await this.getPanel();
if (panel === DataExtensionsEditorView.mostRecentlyActivePanel) {
DataExtensionsEditorView.mostRecentlyActivePanel = undefined;
}
}
private async isTheMostRecentlyActivePanel(): Promise<boolean> {
const panel = await this.getPanel();
return panel === DataExtensionsEditorView.mostRecentlyActivePanel;
}
protected async getPanelConfig(): Promise<WebviewPanelConfig> {
return {
viewId: "data-extensions-editor",
@@ -323,7 +312,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
t: "setExternalApiUsages",
externalApiUsages: this.externalApiUsages,
});
if (await this.isTheMostRecentlyActivePanel()) {
if (this.isMostRecentlyActiveView(this)) {
await this.updateModelDetailsPanelState(
this.externalApiUsages,
this.databaseItem,
@@ -448,6 +437,9 @@ export class DataExtensionsEditorView extends AbstractWebview<
Mode.Framework,
this.updateModelDetailsPanelState,
this.revealItemInDetailsPanel,
this.handleViewBecameActive,
this.handleViewWasDisposed,
this.isMostRecentlyActiveView,
);
await view.openView();
});