Skip to content

Commit 1db58f2

Browse files
Copilotbamurtaugh
andcommitted
Add Cancel Review functionality to webview and backend
Co-authored-by: bamurtaugh <25310137+bamurtaugh@users.noreply.github.com>
1 parent 2d379a9 commit 1db58f2

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

src/github/pullRequestOverview.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,8 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
387387
return this.cancelCodingAgent(message);
388388
case 'pr.openCommitChanges':
389389
return this.openCommitChanges(message);
390+
case 'pr.delete-review':
391+
return this.deleteReview(message);
390392
}
391393
}
392394

@@ -850,6 +852,17 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
850852
return this._item.deleteReviewComment(comment.id.toString());
851853
}
852854

855+
private async deleteReview(message: IRequestMessage<void>) {
856+
try {
857+
const result = await this._item.deleteReview();
858+
await this._replyMessage(message, result);
859+
} catch (e) {
860+
Logger.error(formatError(e), PullRequestOverviewPanel.ID);
861+
vscode.window.showErrorMessage(vscode.l10n.t('Deleting review failed. {0}', formatError(e)));
862+
this._throwError(message, `${formatError(e)}`);
863+
}
864+
}
865+
853866
override dispose() {
854867
super.dispose();
855868
disposeAll(this._prListeners);

webviews/common/context.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,25 @@ export class PRContext {
145145

146146
public submit = (body: string) => this.submitReviewCommand('pr.submit', body);
147147

148+
public deleteReview = async () => {
149+
try {
150+
const result: { deletedReviewId: number; deletedReviewComments: IComment[] } = await this.postMessage({ command: 'pr.delete-review' });
151+
// Update the PR state to reflect the deleted review
152+
const state = this.pr;
153+
state.busy = false;
154+
state.pendingCommentText = '';
155+
state.pendingCommentDrafts = {};
156+
// Remove the deleted review from events
157+
state.events = state.events.filter(event =>
158+
!(event.event === EventType.Reviewed && event.id === result.deletedReviewId)
159+
);
160+
this.updatePR(state);
161+
return result;
162+
} catch (error) {
163+
return this.updatePR({ busy: false });
164+
}
165+
};
166+
148167
public close = async (body?: string) => {
149168
try {
150169
const result: CloseResult = await this.postMessage({ command: 'pr.close', args: body });

webviews/components/timeline.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ function CommentThread({ thread, event }: { thread: IComment[]; event: ReviewEve
267267
}
268268

269269
function AddReviewSummaryComment() {
270-
const { requestChanges, approve, submit, pr } = useContext(PullRequestContext);
270+
const { requestChanges, approve, submit, deleteReview, pr } = useContext(PullRequestContext);
271271
const { isAuthor } = pr;
272272
const comment = useRef<HTMLTextAreaElement>();
273273
const [isBusy, setBusy] = useState(false);
@@ -289,6 +289,13 @@ function AddReviewSummaryComment() {
289289
setBusy(false);
290290
}
291291

292+
async function cancelReview(event: React.MouseEvent): Promise<void> {
293+
event.preventDefault();
294+
setBusy(true);
295+
await deleteReview();
296+
setBusy(false);
297+
}
298+
292299
const onKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
293300
if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {
294301
submitAction(event, ReviewType.Comment);
@@ -304,6 +311,14 @@ function AddReviewSummaryComment() {
304311
onKeyDown={onKeyDown}
305312
></textarea>
306313
<div className="form-actions">
314+
<button
315+
id="cancel-review"
316+
className='secondary'
317+
disabled={isBusy || pr.busy}
318+
onClick={cancelReview}
319+
>
320+
Cancel Review
321+
</button>
307322
{isAuthor ? null : (
308323
<button
309324
id="request-changes"

0 commit comments

Comments
 (0)