Move mostRecentlyActiveView variable to DataExtensionsEditorModule
This commit is contained in:
@@ -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();
|
||||
},
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user