Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 600da5e

Browse files
Functionality to perform the edit
1 parent d8150cc commit 600da5e

File tree

11 files changed

+128
-15
lines changed

11 files changed

+128
-15
lines changed

src/GitHub.App/Api/ApiClient.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ public IObservable<PullRequestReviewComment> CreatePullRequestReviewComment(
110110
return gitHubClient.PullRequest.ReviewComment.CreateReply(owner, name, number, comment);
111111
}
112112

113+
public IObservable<PullRequestReviewComment> EditPullRequestReviewComment(
114+
string owner,
115+
string name,
116+
int number,
117+
string body)
118+
{
119+
var pullRequestReviewCommentEdit = new PullRequestReviewCommentEdit(body);
120+
return gitHubClient.PullRequest.ReviewComment.Edit(owner, name, number, pullRequestReviewCommentEdit);
121+
}
122+
113123
public IObservable<Unit> DeletePullRequestReviewComment(
114124
string owner,
115125
string name,

src/GitHub.Exports.Reactive/Api/IApiClient.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,33 @@ IObservable<PullRequestReviewComment> CreatePullRequestReviewComment(
9090
/// <returns></returns>
9191
IObservable<PullRequestReviewComment> CreatePullRequestReviewComment(string owner, string name, int number, string body, int inReplyTo);
9292

93-
IObservable<Branch> GetBranches(string owner, string repo);
94-
IObservable<Repository> GetRepositories();
95-
IObservable<Repository> GetRepository(string owner, string repo);
96-
IObservable<RepositoryContent> GetFileContents(string owner, string name, string reference, string path);
97-
93+
/// <summary>
94+
/// Delete a PR review comment.
95+
/// </summary>
96+
/// <param name="owner">The repository owner.</param>
97+
/// <param name="name">The repository name.</param>
98+
/// <param name="number">The pull request comment number.</param>
9899
IObservable<Unit> DeletePullRequestReviewComment(
99100
string owner,
100101
string name,
101102
int number);
103+
104+
/// <summary>
105+
/// Edits a PR review comment.
106+
/// </summary>
107+
/// <param name="owner">The repository owner.</param>
108+
/// <param name="name">The repository name.</param>
109+
/// <param name="number">The pull request comment number.</param>
110+
/// <param name="body">The replacement comment body.</param>
111+
IObservable<PullRequestReviewComment> EditPullRequestReviewComment(
112+
string owner,
113+
string name,
114+
int number,
115+
string body);
116+
117+
IObservable<Branch> GetBranches(string owner, string repo);
118+
IObservable<Repository> GetRepositories();
119+
IObservable<Repository> GetRepository(string owner, string repo);
120+
IObservable<RepositoryContent> GetFileContents(string owner, string name, string reference, string path);
102121
}
103122
}

src/GitHub.Exports.Reactive/Services/IPullRequestSession.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ Task<IPullRequestReviewCommentModel> PostReviewComment(
111111
/// <param name="body">The comment body.</param>
112112
/// <param name="inReplyTo">The REST ID of the comment to reply to.</param>
113113
/// <param name="inReplyToNodeId">The GraphQL ID of the comment to reply to.</param>
114-
/// <returns></returns>
114+
/// <returns>A comment model.</returns>
115115
Task<IPullRequestReviewCommentModel> PostReviewComment(
116116
string body,
117117
int inReplyTo,
@@ -152,5 +152,13 @@ Task<IPullRequestReviewCommentModel> PostReviewComment(
152152
/// <param name="number">The number of the pull request comment to delete</param>
153153
/// <returns>A task which completes when the session has completed updating.</returns>
154154
Task DeleteComment(int number);
155+
156+
/// <summary>
157+
/// Edit a PR review comment reply.
158+
/// </summary>
159+
/// <param name="number">The number of the pull request comment</param>
160+
/// <param name="body">The replacement comment body.</param>
161+
/// <returns>A comment model.</returns>
162+
Task<IPullRequestReviewCommentModel> EditComment(int number, string body);
155163
}
156164
}

src/GitHub.Exports/Models/UsageModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class MeasuresModel
6565
public int NumberOfPRReviewDiffViewInlineCommentOpen { get; set; }
6666
public int NumberOfPRReviewDiffViewInlineCommentPost { get; set; }
6767
public int NumberOfPRReviewDiffViewInlineCommentDelete { get; set; }
68+
public int NumberOfPRReviewDiffViewInlineCommentEdit { get; set; }
6869
public int NumberOfPRReviewDiffViewInlineCommentStartReview { get; set; }
6970
public int NumberOfPRReviewPosts { get; set; }
7071
public int NumberOfShowCurrentPullRequest { get; set; }

src/GitHub.InlineReviews/Services/IPullRequestSessionService.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,5 +313,20 @@ Task DeleteComment(
313313
string remoteRepositoryOwner,
314314
IAccount user,
315315
int number);
316+
317+
/// <summary>
318+
/// Edit a PR review comment.
319+
/// </summary>
320+
/// <param name="localRepository">The local repository.</param>
321+
/// <param name="remoteRepositoryOwner">The owner of the repository fork to delete from.</param>
322+
/// <param name="user">The user deleting the comment.</param>
323+
/// <param name="number">The pull request comment number.</param>
324+
/// <param name="body">The replacement comment body.</param>
325+
/// <returns>A model representing the edited comment.</returns>
326+
Task<PullRequestReviewCommentModel> EditComment(ILocalRepositoryModel localRepository,
327+
string remoteRepositoryOwner,
328+
IAccount user,
329+
int number,
330+
string body);
316331
}
317332
}

src/GitHub.InlineReviews/Services/PullRequestSession.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,20 @@ await service.DeleteComment(
175175
number);
176176
}
177177

178+
/// <inheritdoc/>
179+
public async Task<IPullRequestReviewCommentModel> EditComment(
180+
int number, string body)
181+
{
182+
var model = await service.EditComment(
183+
LocalRepository,
184+
RepositoryOwner,
185+
User,
186+
number,
187+
body);
188+
189+
return model;
190+
}
191+
178192
/// <inheritdoc/>
179193
public async Task<IPullRequestReviewCommentModel> PostReviewComment(
180194
string body,

src/GitHub.InlineReviews/Services/PullRequestSessionService.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,7 @@ public async Task<IPullRequestReviewCommentModel> PostStandaloneReviewCommentRep
600600
};
601601
}
602602

603+
/// <inheritdoc/>
603604
public async Task DeleteComment(
604605
ILocalRepositoryModel localRepository,
605606
string remoteRepositoryOwner,
@@ -617,6 +618,39 @@ await apiClient.DeletePullRequestReviewComment(
617618
await usageTracker.IncrementCounter(x => x.NumberOfPRReviewDiffViewInlineCommentDelete);
618619
}
619620

621+
/// <inheritdoc/>
622+
public async Task<PullRequestReviewCommentModel> EditComment(ILocalRepositoryModel localRepository,
623+
string remoteRepositoryOwner,
624+
IAccount user,
625+
int number,
626+
string body)
627+
{
628+
var address = HostAddress.Create(localRepository.CloneUrl.Host);
629+
var apiClient = await apiClientFactory.Create(address);
630+
631+
var result = await apiClient.EditPullRequestReviewComment(
632+
remoteRepositoryOwner,
633+
localRepository.Name,
634+
number,
635+
body);
636+
637+
await usageTracker.IncrementCounter(x => x.NumberOfPRReviewDiffViewInlineCommentEdit);
638+
639+
return new PullRequestReviewCommentModel
640+
{
641+
Body = result.Body,
642+
CommitId = result.CommitId,
643+
DiffHunk = result.DiffHunk,
644+
Id = result.Id,
645+
OriginalCommitId = result.OriginalCommitId,
646+
OriginalPosition = result.OriginalPosition,
647+
Path = result.Path,
648+
Position = result.Position,
649+
CreatedAt = result.CreatedAt,
650+
User = user,
651+
};
652+
}
653+
620654
int GetUpdatedLineNumber(IInlineCommentThreadModel thread, IEnumerable<DiffChunk> diff)
621655
{
622656
var line = DiffUtilities.Match(diff, thread.DiffMatch);

src/GitHub.InlineReviews/ViewModels/CommentViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ async Task DoCommitEdit(object unused)
224224
ErrorMessage = null;
225225
IsSubmitting = true;
226226

227-
var model = await Thread.EditComment.ExecuteAsyncTask(Body);
227+
var model = await Thread.EditComment.ExecuteAsyncTask(new Tuple<int, string>(Id, Body));
228228
Id = model.Id;
229229
NodeId = model.NodeId;
230230
EditState = CommentEditState.None;

src/GitHub.InlineReviews/ViewModels/InlineCommentPeekViewModel.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,7 @@ async Task UpdateThread()
175175
}
176176
else
177177
{
178-
var newThread = new NewInlineCommentThreadViewModel(session, file, lineNumber, leftBuffer);
179-
Thread = newThread;
178+
Thread = new NewInlineCommentThreadViewModel(session, file, lineNumber, leftBuffer);
180179
}
181180

182181
if (!string.IsNullOrWhiteSpace(placeholderBody))
@@ -189,6 +188,14 @@ async Task UpdateThread()
189188
placeholder.Body = placeholderBody;
190189
}
191190
}
191+
192+
threadSubscription = Thread
193+
.WhenAnyValue(model => model.EditComment, model => model.DeleteComment)
194+
.Skip(1)
195+
.Subscribe(_ =>
196+
{
197+
198+
});
192199
}
193200

194201
async Task SessionChanged(IPullRequestSession pullRequestSession)

src/GitHub.InlineReviews/ViewModels/InlineCommentThreadViewModel.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,12 @@ async Task<ICommentModel> DoPostComment(object parameter)
7777
return await Session.PostReviewComment(body, replyId, nodeId);
7878
}
7979

80-
Task<ICommentModel> DoEditComment(object parameter)
80+
async Task<ICommentModel> DoEditComment(object parameter)
8181
{
8282
Guard.ArgumentNotNull(parameter, nameof(parameter));
8383

84-
var body = (string)parameter;
85-
var replyId = Comments[0].Id;
86-
var nodeId = Comments[0].NodeId;
87-
88-
throw new NotImplementedException();
84+
var item = (Tuple<int, string>)parameter;
85+
return await Session.EditComment(item.Item1, item.Item2);
8986
}
9087

9188
async Task<object> DoDeleteComment(object parameter)

0 commit comments

Comments
 (0)