Skip to content

Commit 39c5604

Browse files
committed
chore: dispoe correctly in lineage panel
1 parent 578d5ab commit 39c5604

1 file changed

Lines changed: 33 additions & 24 deletions

File tree

vscode/extension/src/webviews/lineagePanel.ts

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,42 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
1616

1717
private panel: WebviewView | undefined
1818
private lsp: LSPClient
19-
private _extensionUri: Uri
19+
private readonly extensionUri: Uri
20+
21+
private readonly disposeables: Disposable[] = []
2022

2123
public constructor(extensionUri: Uri, lsp: LSPClient) {
22-
this._extensionUri = extensionUri
24+
this.extensionUri = extensionUri
2325
this.lsp = lsp
2426

2527
if (this.panel) {
2628
this.panel.webview.html = this.getHTML(this.panel.webview)
2729
}
2830

29-
workspace.onDidSaveTextDocument(document => {
30-
this.panel?.webview.postMessage({
31-
key: 'vscode_send',
32-
payload: {
33-
key: 'savedFile',
34-
payload: { fileUri: document.uri.toString() },
35-
},
36-
})
37-
})
38-
39-
window.onDidChangeActiveTextEditor(editor => {
40-
if (editor) {
31+
this.disposeables.push(
32+
workspace.onDidSaveTextDocument(document => {
4133
this.panel?.webview.postMessage({
4234
key: 'vscode_send',
4335
payload: {
44-
key: 'changeFocusOnFile',
45-
payload: { path: editor.document.uri.toString() },
36+
key: 'savedFile',
37+
payload: { fileUri: document.uri.toString() },
4638
},
4739
})
48-
}
49-
})
40+
}),
41+
)
42+
this.disposeables.push(
43+
window.onDidChangeActiveTextEditor(editor => {
44+
if (editor) {
45+
this.panel?.webview.postMessage({
46+
key: 'vscode_send',
47+
payload: {
48+
key: 'changeFocusOnFile',
49+
payload: { path: editor.document.uri.toString() },
50+
},
51+
})
52+
}
53+
}),
54+
)
5055
}
5156

5257
public resolveWebviewView(webviewView: WebviewView) {
@@ -58,12 +63,12 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
5863
webviewView.webview.options = {
5964
// Allow scripts in the webview
6065
enableScripts: true,
61-
localResourceRoots: [this._extensionUri],
66+
localResourceRoots: [this.extensionUri],
6267
}
6368

6469
// Set content options for external URL access
6570
// Set up message listener for events from the iframe
66-
webviewView.webview.onDidReceiveMessage(
71+
const disposeable = webviewView.webview.onDidReceiveMessage(
6772
async request => {
6873
if (!request) {
6974
return
@@ -132,21 +137,22 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
132137
undefined,
133138
[],
134139
)
140+
this.disposeables.push(disposeable)
135141
webviewView.webview.html = this.getHTML(webviewView.webview)
136142
}
137143

138144
private getHTML(panel: Webview) {
139145
const cssUri = panel.asWebviewUri(
140-
Uri.joinPath(this._extensionUri, 'src_react', 'assets', 'index.css'),
146+
Uri.joinPath(this.extensionUri, 'src_react', 'assets', 'index.css'),
141147
)
142148
const jsUri = panel.asWebviewUri(
143-
Uri.joinPath(this._extensionUri, 'src_react', 'assets', 'index.js'),
149+
Uri.joinPath(this.extensionUri, 'src_react', 'assets', 'index.js'),
144150
)
145151
const faviconUri = panel.asWebviewUri(
146-
Uri.joinPath(this._extensionUri, 'src_react', 'favicon.ico'),
152+
Uri.joinPath(this.extensionUri, 'src_react', 'favicon.ico'),
147153
)
148154
const logoUri = panel.asWebviewUri(
149-
Uri.joinPath(this._extensionUri, 'src_react', 'logo192.png'),
155+
Uri.joinPath(this.extensionUri, 'src_react', 'logo192.png'),
150156
)
151157

152158
// Handle query requests from the React app
@@ -179,5 +185,8 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
179185
// WebviewView doesn't have a dispose method
180186
// We can clear references
181187
this.panel = undefined
188+
this.disposeables.forEach(disposable => {
189+
disposable.dispose()
190+
})
182191
}
183192
}

0 commit comments

Comments
 (0)