From 0c03921fa9eeecbb63dd13fef2d666e6a496bdf5 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Mon, 23 Feb 2026 10:16:29 +0100 Subject: [PATCH 1/2] Fix opening the windown --- src/backend/configPanel.ts | 4 ++++ src/backend/facade.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/configPanel.ts b/src/backend/configPanel.ts index 87cac60..c03741e 100644 --- a/src/backend/configPanel.ts +++ b/src/backend/configPanel.ts @@ -33,6 +33,10 @@ export class BackendConfigPanel implements vscode.Disposable { constructor(private readonly extensionUri: vscode.Uri, private readonly callbacks: BackendConfigPanelCallbacks) {} + public isDisposed(): boolean { + return this.disposed; + } + public async show(): Promise { const state = await this.callbacks.getState(); if (!this.panel) { diff --git a/src/backend/facade.ts b/src/backend/facade.ts index 2ed6366..c931c52 100644 --- a/src/backend/facade.ts +++ b/src/backend/facade.ts @@ -443,7 +443,8 @@ export class BackendFacade { vscode.window.showErrorMessage('Extension context is unavailable; cannot open backend configuration.'); return; } - if (!this.configPanel) { + // Create a new panel if we don't have one or if it was disposed + if (!this.configPanel || this.configPanel.isDisposed()) { this.configPanel = new BackendConfigPanel(this.deps.context.extensionUri, { getState: () => this.getConfigPanelState(), onSave: async (draft) => this.saveDraft(draft), From deb462967a6dd8fe68d01d05b27d845d22630fa1 Mon Sep 17 00:00:00 2001 From: Rob Bos Date: Mon, 23 Feb 2026 10:30:12 +0100 Subject: [PATCH 2/2] Fixing config panels --- src/backend/configPanel.ts | 38 +++++++++++++++---- .../backend-configPanel-webview.test.ts | 8 +++- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/backend/configPanel.ts b/src/backend/configPanel.ts index c03741e..f1311fc 100644 --- a/src/backend/configPanel.ts +++ b/src/backend/configPanel.ts @@ -458,10 +458,17 @@ export class BackendConfigPanel implements vscode.Disposable { - `; diff --git a/src/test-node/backend-configPanel-webview.test.ts b/src/test-node/backend-configPanel-webview.test.ts index 1ed1b43..8caf231 100644 --- a/src/test-node/backend-configPanel-webview.test.ts +++ b/src/test-node/backend-configPanel-webview.test.ts @@ -46,7 +46,7 @@ suite('Backend Config Panel Webview Integration Tests', () => { return renderBackendConfigHtml(webview as any, initialState); } - setup(() => { + setup(async () => { const html = createPanelHtml(); dom = new JSDOM(html, { runScripts: 'dangerously', @@ -60,10 +60,16 @@ suite('Backend Config Panel Webview Integration Tests', () => { getState: () => ({}), setState: (state: any) => {} }); + + // Set toolkit ready flag immediately (JSDOM doesn't run module scripts properly) + (window as any).__toolkitReady = true; } }); window = dom.window as unknown as Window; document = window.document; + + // Wait briefly for init() to run + await new Promise(resolve => setTimeout(resolve, 50)); }); teardown(() => {