Fix panel sending multiple prompts

This commit is contained in:
andrepimenta
2025-07-14 20:47:16 +01:00
parent 6e9893e3f3
commit 5b671485a1

View File

@@ -86,6 +86,7 @@ class ClaudeChatProvider {
private _webview: vscode.Webview | undefined;
private _webviewView: vscode.WebviewView | undefined;
private _disposables: vscode.Disposable[] = [];
private _messageHandlerDisposable: vscode.Disposable | undefined;
private _totalCost: number = 0;
private _totalTokensInput: number = 0;
private _totalTokensOutput: number = 0;
@@ -299,7 +300,13 @@ class ClaudeChatProvider {
}
private _setupWebviewMessageHandler(webview: vscode.Webview) {
webview.onDidReceiveMessage(
// Dispose of any existing message handler
if (this._messageHandlerDisposable) {
this._messageHandlerDisposable.dispose();
}
// Set up new message handler
this._messageHandlerDisposable = webview.onDidReceiveMessage(
message => this._handleWebviewMessage(message),
null,
this._disposables
@@ -351,6 +358,7 @@ class ClaudeChatProvider {
// Only reinitialize if we have a webview (sidebar)
if (this._webview) {
this._initializeWebview();
// Set up message handler for the webview
this._setupWebviewMessageHandler(this._webview);
}
}
@@ -2160,6 +2168,12 @@ class ClaudeChatProvider {
this._panel = undefined;
}
// Dispose message handler if it exists
if (this._messageHandlerDisposable) {
this._messageHandlerDisposable.dispose();
this._messageHandlerDisposable = undefined;
}
while (this._disposables.length) {
const disposable = this._disposables.pop();
if (disposable) {