@@ -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 disposables : 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 . disposables . 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 . disposables . 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 disposable = webviewView . webview . onDidReceiveMessage (
6772 async request => {
6873 if ( ! request ) {
6974 return
@@ -99,7 +104,7 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
99104 result : response ,
100105 } ,
101106 }
102- webviewView . webview . postMessage ( responseCallback )
107+ await webviewView . webview . postMessage ( responseCallback )
103108 break
104109 }
105110 case 'get_active_file' : {
@@ -113,7 +118,7 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
113118 } ,
114119 } ,
115120 }
116- webviewView . webview . postMessage ( responseCallback )
121+ await webviewView . webview . postMessage ( responseCallback )
117122 break
118123 }
119124 default : {
@@ -132,21 +137,22 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
132137 undefined ,
133138 [ ] ,
134139 )
140+ this . disposables . push ( disposable )
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,9 @@ 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 . disposables . forEach ( disposable => {
189+ disposable . dispose ( )
190+ } )
191+ this . disposables = [ ]
182192 }
183193}
0 commit comments