Skip to content

Commit af712b9

Browse files
authored
Comment text remains in webview input box after submitting a comment (#6938)
Fixes #6934
1 parent 343bda1 commit af712b9

7 files changed

Lines changed: 51 additions & 44 deletions

File tree

src/github/activityBarViewProvider.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import * as vscode from 'vscode';
77
import { openPullRequestOnGitHub } from '../commands';
88
import { IComment } from '../common/comment';
99
import { disposeAll } from '../common/lifecycle';
10-
import { ReviewEvent as CommonReviewEvent } from '../common/timelineEvent';
10+
import { ReviewEvent } from '../common/timelineEvent';
1111
import { formatError } from '../common/utils';
1212
import { getNonce, IRequestMessage, WebviewViewBase } from '../common/webview';
1313
import { ReviewManager } from '../view/reviewManager';
1414
import { FolderRepositoryManager } from './folderRepositoryManager';
15-
import { GithubItemStateEnum, IAccount, isTeam, ITeam, PullRequestMergeability, reviewerId, ReviewEvent, ReviewState } from './interface';
15+
import { GithubItemStateEnum, IAccount, isTeam, ITeam, PullRequestMergeability, reviewerId, ReviewEventEnum, ReviewState } from './interface';
1616
import { PullRequestModel } from './pullRequestModel';
1717
import { getDefaultMergeMethod } from './pullRequestOverview';
1818
import { PullRequestView } from './pullRequestOverviewCommon';
@@ -337,7 +337,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
337337
});
338338
}
339339

340-
private updateReviewers(review?: CommonReviewEvent): void {
340+
private updateReviewers(review?: ReviewEvent): void {
341341
if (review && review.state) {
342342
const existingReviewer = this._existingReviewers.find(
343343
reviewer => review.user.login === reviewerId(reviewer.reviewer),
@@ -353,7 +353,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
353353
}
354354
}
355355

356-
private async doReviewCommand(context: { body: string }, reviewType: ReviewType, action: (body: string) => Promise<CommonReviewEvent>) {
356+
private async doReviewCommand(context: { body: string }, reviewType: ReviewType, action: (body: string) => Promise<ReviewEvent>) {
357357
const submittingMessage = {
358358
command: 'pr.submitting-review',
359359
lastReviewType: reviewType
@@ -375,7 +375,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
375375
}
376376
}
377377

378-
private async doReviewMessage(message: IRequestMessage<string>, action: (body) => Promise<CommonReviewEvent>) {
378+
private async doReviewMessage(message: IRequestMessage<string>, action: (body) => Promise<ReviewEvent>) {
379379
try {
380380
const review = await action(message.args);
381381
this.updateReviewers(review);
@@ -389,7 +389,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
389389
}
390390
}
391391

392-
private approvePullRequest(body: string): Promise<CommonReviewEvent> {
392+
private approvePullRequest(body: string): Promise<ReviewEvent> {
393393
return this._item.approve(this._folderRepositoryManager.repository, body);
394394
}
395395

@@ -401,7 +401,7 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
401401
return this.doReviewCommand(context, ReviewType.Approve, (body) => this.approvePullRequest(body));
402402
}
403403

404-
private requestChanges(body: string): Promise<CommonReviewEvent> {
404+
private requestChanges(body: string): Promise<ReviewEvent> {
405405
return this._item.requestChanges(body);
406406
}
407407

@@ -413,8 +413,8 @@ export class PullRequestViewProvider extends WebviewViewBase implements vscode.W
413413
return this.doReviewMessage(message, (body) => this.requestChanges(body));
414414
}
415415

416-
private submitReview(body: string): Promise<CommonReviewEvent> {
417-
return this._item.submitReview(ReviewEvent.Comment, body);
416+
private submitReview(body: string): Promise<ReviewEvent> {
417+
return this._item.submitReview(ReviewEventEnum.Comment, body);
418418
}
419419

420420
private submitReviewCommand(context: { body: string }) {

src/github/interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export enum PRType {
1212
LocalPullRequest,
1313
}
1414

15-
export enum ReviewEvent {
15+
export enum ReviewEventEnum {
1616
Approve = 'APPROVE',
1717
RequestChanges = 'REQUEST_CHANGES',
1818
Comment = 'COMMENT',

src/github/issueOverview.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
152152

153153
protected onDidChangeViewState(e: vscode.WebviewPanelOnDidChangeViewStateEvent): void {
154154
if (e.webviewPanel.visible) {
155-
this.pollForUpdates(true);
155+
this.pollForUpdates(!!this._item);
156156
}
157157
}
158158

src/github/pullRequestModel.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { GitHubRef } from '../common/githubRef';
1616
import Logger from '../common/logger';
1717
import { Remote } from '../common/remote';
1818
import { ITelemetry } from '../common/telemetry';
19-
import { ClosedEvent, ReviewEvent as CommonReviewEvent, EventType, TimelineEvent } from '../common/timelineEvent';
19+
import { ClosedEvent, EventType, ReviewEvent, TimelineEvent } from '../common/timelineEvent';
2020
import { resolvePath, Schemes, toPRUri, toReviewUri } from '../common/uri';
2121
import { formatError, isDescendant } from '../common/utils';
2222
import { InMemFileChangeModel, RemoteFileChangeModel } from '../view/fileChangeModel';
@@ -66,7 +66,7 @@ import {
6666
PullRequestMergeability,
6767
PullRequestReviewRequirement,
6868
ReadyForReview,
69-
ReviewEvent,
69+
ReviewEventEnum,
7070
} from './interface';
7171
import { IssueModel } from './issueModel';
7272
import { compareCommits } from './loggingOctokit';
@@ -321,7 +321,7 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
321321
* Approve the pull request.
322322
* @param message Optional approval comment text.
323323
*/
324-
async approve(repository: Repository, message?: string): Promise<CommonReviewEvent> {
324+
async approve(repository: Repository, message?: string): Promise<ReviewEvent> {
325325
// Check that the remote head of the PR branch matches the local head of the PR branch
326326
let remoteHead: string | undefined;
327327
let localHead: string | undefined;
@@ -340,9 +340,9 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
340340
return Promise.reject(rejectMessage);
341341
}
342342

343-
const action: Promise<CommonReviewEvent> = (await this.getPendingReviewId())
344-
? this.submitReview(ReviewEvent.Approve, message)
345-
: this.createReview(ReviewEvent.Approve, message);
343+
const action: Promise<ReviewEvent> = (await this.getPendingReviewId())
344+
? this.submitReview(ReviewEventEnum.Approve, message)
345+
: this.createReview(ReviewEventEnum.Approve, message);
346346

347347
return action.then(x => {
348348
/* __GDPR__
@@ -358,10 +358,10 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
358358
* Request changes on the pull request.
359359
* @param message Optional comment text to leave with the review.
360360
*/
361-
async requestChanges(message?: string): Promise<CommonReviewEvent> {
362-
const action: Promise<CommonReviewEvent> = (await this.getPendingReviewId())
363-
? this.submitReview(ReviewEvent.RequestChanges, message)
364-
: this.createReview(ReviewEvent.RequestChanges, message);
361+
async requestChanges(message?: string): Promise<ReviewEvent> {
362+
const action: Promise<ReviewEvent> = (await this.getPendingReviewId())
363+
? this.submitReview(ReviewEventEnum.RequestChanges, message)
364+
: this.createReview(ReviewEventEnum.RequestChanges, message);
365365

366366
return action.then(x => {
367367
/* __GDPR__
@@ -410,7 +410,7 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
410410
* @param event The type of review to create, an approval, request for changes, or comment.
411411
* @param message The summary comment text.
412412
*/
413-
private async createReview(event: ReviewEvent, message?: string): Promise<CommonReviewEvent> {
413+
private async createReview(event: ReviewEventEnum, message?: string): Promise<ReviewEvent> {
414414
const { octokit, remote } = await this.githubRepository.ensure();
415415

416416
const { data } = await octokit.call(octokit.api.pulls.createReview, {
@@ -429,11 +429,11 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
429429
* @param event The type of review to create, an approval, request for changes, or comment.
430430
* @param body The summary comment text.
431431
*/
432-
async submitReview(event?: ReviewEvent, body?: string): Promise<CommonReviewEvent> {
432+
async submitReview(event?: ReviewEventEnum, body?: string): Promise<ReviewEvent> {
433433
let pendingReviewId = await this.getPendingReviewId();
434434
const { mutate, schema } = await this.githubRepository.ensure();
435435

436-
if (!pendingReviewId && (event === ReviewEvent.Comment)) {
436+
if (!pendingReviewId && (event === ReviewEventEnum.Comment)) {
437437
// Create a new review so that we can comment on it.
438438
pendingReviewId = await this.startReview();
439439
}
@@ -443,7 +443,7 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
443443
mutation: schema.SubmitReview,
444444
variables: {
445445
id: pendingReviewId,
446-
event: event || ReviewEvent.Comment,
446+
event: event || ReviewEventEnum.Comment,
447447
body,
448448
},
449449
});
@@ -1203,14 +1203,14 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
12031203
childComments?: CommentNode[];
12041204
}
12051205

1206-
const reviewEvents = events.filter((e): e is CommonReviewEvent => e.event === EventType.Reviewed);
1206+
const reviewEvents = events.filter((e): e is ReviewEvent => e.event === EventType.Reviewed);
12071207
const reviewComments = reviewThreads.reduce((previous, current) => (previous as IComment[]).concat(current.comments), []);
12081208

12091209
const reviewEventsById = reviewEvents.reduce((index, evt) => {
12101210
index[evt.id] = evt;
12111211
evt.comments = [];
12121212
return index;
1213-
}, {} as { [key: number]: CommonReviewEvent });
1213+
}, {} as { [key: number]: ReviewEvent });
12141214

12151215
const commentsById = reviewComments.reduce((index, evt) => {
12161216
index[evt.id] = evt;

src/github/pullRequestOverview.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { disposeAll } from '../common/lifecycle';
1212
import Logger from '../common/logger';
1313
import { DEFAULT_MERGE_METHOD, PR_SETTINGS_NAMESPACE } from '../common/settingKeys';
1414
import { ITelemetry } from '../common/telemetry';
15-
import { ReviewEvent as CommonReviewEvent } from '../common/timelineEvent';
15+
import { ReviewEvent } from '../common/timelineEvent';
1616
import { asPromise, formatError } from '../common/utils';
1717
import { IRequestMessage, PULL_REQUEST_OVERVIEW_VIEW_TYPE } from '../common/webview';
1818
import { FolderRepositoryManager } from './folderRepositoryManager';
@@ -25,15 +25,15 @@ import {
2525
MergeMethodsAvailability,
2626
PullRequestMergeability,
2727
reviewerId,
28-
ReviewEvent,
28+
ReviewEventEnum,
2929
ReviewState,
3030
} from './interface';
3131
import { IssueOverviewPanel } from './issueOverview';
3232
import { PullRequestModel } from './pullRequestModel';
3333
import { PullRequestView } from './pullRequestOverviewCommon';
3434
import { pickEmail, reviewersQuickPick } from './quickPicks';
3535
import { parseReviewers } from './utils';
36-
import { MergeArguments, MergeResult, PullRequest, ReviewType } from './views';
36+
import { MergeArguments, MergeResult, PullRequest, ReviewType, SubmitReviewReply } from './views';
3737

3838
export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestModel> {
3939
public static override ID: string = 'PullRequestOverviewPanel';
@@ -549,7 +549,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
549549
}
550550
}
551551

552-
private updateReviewers(review?: CommonReviewEvent): void {
552+
private updateReviewers(review?: ReviewEvent): void {
553553
if (review && review.state) {
554554
const existingReviewer = this._existingReviewers.find(
555555
reviewer => review.user.login === (reviewer.reviewer as IAccount).login,
@@ -565,7 +565,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
565565
}
566566
}
567567

568-
private async doReviewCommand(context: { body: string }, reviewType: ReviewType, action: (body: string) => Promise<CommonReviewEvent>) {
568+
private async doReviewCommand(context: { body: string }, reviewType: ReviewType, action: (body: string) => Promise<ReviewEvent>) {
569569
const submittingMessage = {
570570
command: 'pr.submitting-review',
571571
lastReviewType: reviewType
@@ -588,21 +588,22 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
588588
}
589589
}
590590

591-
private async doReviewMessage(message: IRequestMessage<string>, action: (body) => Promise<CommonReviewEvent>) {
591+
private async doReviewMessage(message: IRequestMessage<string>, action: (body) => Promise<ReviewEvent>) {
592592
try {
593593
const review = await action(message.args);
594594
this.updateReviewers(review);
595-
this._replyMessage(message, {
596-
review: review,
595+
const reply: SubmitReviewReply = {
596+
event: review,
597597
reviewers: this._existingReviewers,
598-
});
598+
};
599+
this._replyMessage(message, reply);
599600
} catch (e) {
600601
vscode.window.showErrorMessage(vscode.l10n.t('Submitting review failed. {0}', formatError(e)));
601602
this._throwError(message, `${formatError(e)}`);
602603
}
603604
}
604605

605-
private approvePullRequest(body: string): Promise<CommonReviewEvent> {
606+
private approvePullRequest(body: string): Promise<ReviewEvent> {
606607
return this._item.approve(this._folderRepositoryManager.repository, body);
607608
}
608609

@@ -614,7 +615,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
614615
return this.doReviewCommand(context, ReviewType.Approve, (body) => this.approvePullRequest(body));
615616
}
616617

617-
private requestChanges(body: string): Promise<CommonReviewEvent> {
618+
private requestChanges(body: string): Promise<ReviewEvent> {
618619
return this._item.requestChanges(body);
619620
}
620621

@@ -626,8 +627,8 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
626627
return this.doReviewMessage(message, (body) => this.requestChanges(body));
627628
}
628629

629-
private submitReview(body: string): Promise<CommonReviewEvent> {
630-
return this._item.submitReview(ReviewEvent.Comment, body);
630+
private submitReview(body: string): Promise<ReviewEvent> {
631+
return this._item.submitReview(ReviewEventEnum.Comment, body);
631632
}
632633

633634
private submitReviewCommand(context: { body: string }) {

src/github/views.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { TimelineEvent } from '../common/timelineEvent';
6+
import { ReviewEvent, TimelineEvent } from '../common/timelineEvent';
77
import {
88
GithubItemStateEnum,
99
IAccount,
@@ -109,6 +109,11 @@ export interface ChangeAssigneesReply {
109109
events: TimelineEvent[];
110110
}
111111

112+
export interface SubmitReviewReply {
113+
event?: ReviewEvent | TimelineEvent;
114+
reviewers?: ReviewState[];
115+
}
116+
112117
export interface MergeArguments {
113118
title: string | undefined;
114119
description: string | undefined;

webviews/common/context.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import { createContext } from 'react';
77
import { CloseResult } from '../../common/views';
88
import { IComment } from '../../src/common/comment';
99
import { EventType, ReviewEvent, TimelineEvent } from '../../src/common/timelineEvent';
10-
import { IProjectItem, MergeMethod, ReadyForReview, ReviewState } from '../../src/github/interface';
11-
import { ChangeAssigneesReply, MergeArguments, MergeResult, ProjectItemsReply, PullRequest } from '../../src/github/views';
10+
import { IProjectItem, MergeMethod, ReadyForReview } from '../../src/github/interface';
11+
import { ChangeAssigneesReply, MergeArguments, MergeResult, ProjectItemsReply, PullRequest, SubmitReviewReply } from '../../src/github/views';
1212
import { getState, setState, updateState } from './cache';
1313
import { getMessageHandler, MessageHandler } from './message';
1414

@@ -165,7 +165,8 @@ export class PRContext {
165165
this.postMessage({ command: 'pr.apply-patch', args: { comment } });
166166
};
167167

168-
private appendReview({ event, reviewers }: { event?: ReviewEvent | TimelineEvent, reviewers?: ReviewState[] }) {
168+
private appendReview(reply: SubmitReviewReply) {
169+
const { event, reviewers } = reply;
169170
const state = this.pr;
170171
state.busy = false;
171172
if (!event) {

0 commit comments

Comments
 (0)