Skip to content

Commit c653f6f

Browse files
authored
Details PR view in sidebar stuck in "Loading ..." (#4177)
Fixes #4161
1 parent b231f9d commit c653f6f

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/extension.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ async function init(
144144
context.subscriptions.push(changesTree);
145145

146146
const activePrViewCoordinator = new WebviewViewCoordinator(context);
147+
context.subscriptions.push(activePrViewCoordinator);
147148
const reviewManagers = folderManagers.map(
148149
folderManager => new ReviewManager(context, folderManager.repository, folderManager, telemetry, changesTree, showPRController, activePrViewCoordinator),
149150
);

src/view/webviewViewCoordinator.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,35 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as vscode from 'vscode';
7+
import { dispose } from '../common/utils';
78
import { PullRequestViewProvider } from '../github/activityBarViewProvider';
89
import { FolderRepositoryManager } from '../github/folderRepositoryManager';
910
import { PullRequestModel } from '../github/pullRequestModel';
1011
import { ReviewManager } from './reviewManager';
1112

12-
export class WebviewViewCoordinator {
13+
export class WebviewViewCoordinator implements vscode.Disposable {
1314
private _webviewViewProvider?: PullRequestViewProvider;
1415
private _pullRequestModel: Map<PullRequestModel, { folderRepositoryManager: FolderRepositoryManager, reviewManager: ReviewManager }> = new Map();
16+
private _disposables: vscode.Disposable[] = [];
1517

1618
constructor(private _context: vscode.ExtensionContext) { }
1719

20+
dispose() {
21+
dispose(this._disposables);
22+
this._disposables = [];
23+
this._webviewViewProvider?.dispose();
24+
this._webviewViewProvider = undefined;
25+
}
26+
1827
private create(pullRequestModel: PullRequestModel, folderRepositoryManager: FolderRepositoryManager, reviewManager: ReviewManager) {
1928
this._webviewViewProvider = new PullRequestViewProvider(this._context.extensionUri, folderRepositoryManager, reviewManager, pullRequestModel);
20-
this._context.subscriptions.push(
29+
this._disposables.push(
2130
vscode.window.registerWebviewViewProvider(
2231
this._webviewViewProvider.viewType,
2332
this._webviewViewProvider,
2433
),
2534
);
26-
this._context.subscriptions.push(
35+
this._disposables.push(
2736
vscode.commands.registerCommand('pr.refreshActivePullRequest', _ => {
2837
this._webviewViewProvider?.refresh();
2938
}),
@@ -38,6 +47,10 @@ export class WebviewViewCoordinator {
3847
private updatePullRequest() {
3948
const pullRequestModel = Array.from(this._pullRequestModel.keys())[0];
4049
if (!pullRequestModel) {
50+
this._webviewViewProvider?.dispose();
51+
this._webviewViewProvider = undefined;
52+
dispose(this._disposables);
53+
this._disposables = [];
4154
return;
4255
}
4356
const { folderRepositoryManager, reviewManager } = this._pullRequestModel.get(pullRequestModel)!;

0 commit comments

Comments
 (0)