4
4
*--------------------------------------------------------------------------------------------*/
5
5
6
6
import * as vscode from 'vscode' ;
7
+ import { dispose } from '../common/utils' ;
7
8
import { PullRequestViewProvider } from '../github/activityBarViewProvider' ;
8
9
import { FolderRepositoryManager } from '../github/folderRepositoryManager' ;
9
10
import { PullRequestModel } from '../github/pullRequestModel' ;
10
11
import { ReviewManager } from './reviewManager' ;
11
12
12
- export class WebviewViewCoordinator {
13
+ export class WebviewViewCoordinator implements vscode . Disposable {
13
14
private _webviewViewProvider ?: PullRequestViewProvider ;
14
15
private _pullRequestModel : Map < PullRequestModel , { folderRepositoryManager : FolderRepositoryManager , reviewManager : ReviewManager } > = new Map ( ) ;
16
+ private _disposables : vscode . Disposable [ ] = [ ] ;
15
17
16
18
constructor ( private _context : vscode . ExtensionContext ) { }
17
19
20
+ dispose ( ) {
21
+ dispose ( this . _disposables ) ;
22
+ this . _disposables = [ ] ;
23
+ this . _webviewViewProvider ?. dispose ( ) ;
24
+ this . _webviewViewProvider = undefined ;
25
+ }
26
+
18
27
private create ( pullRequestModel : PullRequestModel , folderRepositoryManager : FolderRepositoryManager , reviewManager : ReviewManager ) {
19
28
this . _webviewViewProvider = new PullRequestViewProvider ( this . _context . extensionUri , folderRepositoryManager , reviewManager , pullRequestModel ) ;
20
- this . _context . subscriptions . push (
29
+ this . _disposables . push (
21
30
vscode . window . registerWebviewViewProvider (
22
31
this . _webviewViewProvider . viewType ,
23
32
this . _webviewViewProvider ,
24
33
) ,
25
34
) ;
26
- this . _context . subscriptions . push (
35
+ this . _disposables . push (
27
36
vscode . commands . registerCommand ( 'pr.refreshActivePullRequest' , _ => {
28
37
this . _webviewViewProvider ?. refresh ( ) ;
29
38
} ) ,
@@ -38,6 +47,10 @@ export class WebviewViewCoordinator {
38
47
private updatePullRequest ( ) {
39
48
const pullRequestModel = Array . from ( this . _pullRequestModel . keys ( ) ) [ 0 ] ;
40
49
if ( ! pullRequestModel ) {
50
+ this . _webviewViewProvider ?. dispose ( ) ;
51
+ this . _webviewViewProvider = undefined ;
52
+ dispose ( this . _disposables ) ;
53
+ this . _disposables = [ ] ;
41
54
return ;
42
55
}
43
56
const { folderRepositoryManager, reviewManager } = this . _pullRequestModel . get ( pullRequestModel ) ! ;
0 commit comments