diff options
author | Jimmy Praet <jimmy.praet@telenet.be> | 2021-01-08 22:49:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-08 23:49:55 +0200 |
commit | bcb7f352215be12368de937fc0faa91cdb3d639a (patch) | |
tree | fa981e5c0110df8a094d7f3e3ba0ffdf2469c194 /routers | |
parent | ce43d38b4ffa40255cc8f859c5b31f59351f827c (diff) | |
download | gitea-bcb7f352215be12368de937fc0faa91cdb3d639a.tar.gz gitea-bcb7f352215be12368de937fc0faa91cdb3d639a.zip |
Do not reload page after adding comments in Pull Request reviews (#13877)
Fixed #8861
* use ajax on PR review page
* handle review comments
* extract duplicate code
FetchCodeCommentsByLine was initially more or less copied from fetchCodeCommentsByReview. Now they both use a common findCodeComments function instead
* use the Engine that was passed into the method
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'routers')
-rw-r--r-- | routers/repo/pull_review.go | 62 | ||||
-rw-r--r-- | routers/routes/macaron.go | 1 |
2 files changed, 63 insertions, 0 deletions
diff --git a/routers/repo/pull_review.go b/routers/repo/pull_review.go index 730074b7f3..0bacc68232 100644 --- a/routers/repo/pull_review.go +++ b/routers/repo/pull_review.go @@ -9,11 +9,40 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" + "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" pull_service "code.gitea.io/gitea/services/pull" ) +const ( + tplConversation base.TplName = "repo/diff/conversation" + tplNewComment base.TplName = "repo/diff/new_comment" +) + +// RenderNewCodeCommentForm will render the form for creating a new review comment +func RenderNewCodeCommentForm(ctx *context.Context) { + issue := GetActionIssue(ctx) + if !issue.IsPull { + return + } + currentReview, err := models.GetCurrentReview(ctx.User, issue) + if err != nil && !models.IsErrReviewNotExist(err) { + ctx.ServerError("GetCurrentReview", err) + return + } + ctx.Data["PageIsPullFiles"] = true + ctx.Data["Issue"] = issue + ctx.Data["CurrentReview"] = currentReview + pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(issue.PullRequest.GetGitRefName()) + if err != nil { + ctx.ServerError("GetRefCommitID", err) + return + } + ctx.Data["AfterCommitID"] = pullHeadCommitID + ctx.HTML(200, tplNewComment) +} + // CreateCodeComment will create a code comment including an pending review if required func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) { issue := GetActionIssue(ctx) @@ -58,11 +87,17 @@ func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) { } log.Trace("Comment created: %-v #%d[%d] Comment[%d]", ctx.Repo.Repository, issue.Index, issue.ID, comment.ID) + + if form.Origin == "diff" { + renderConversation(ctx, comment) + return + } ctx.Redirect(comment.HTMLURL()) } // UpdateResolveConversation add or remove an Conversation resolved mark func UpdateResolveConversation(ctx *context.Context) { + origin := ctx.Query("origin") action := ctx.Query("action") commentID := ctx.QueryInt64("comment_id") @@ -103,11 +138,38 @@ func UpdateResolveConversation(ctx *context.Context) { return } + if origin == "diff" { + renderConversation(ctx, comment) + return + } ctx.JSON(200, map[string]interface{}{ "ok": true, }) } +func renderConversation(ctx *context.Context, comment *models.Comment) { + comments, err := models.FetchCodeCommentsByLine(comment.Issue, ctx.User, comment.TreePath, comment.Line) + if err != nil { + ctx.ServerError("FetchCodeCommentsByLine", err) + return + } + ctx.Data["PageIsPullFiles"] = true + ctx.Data["comments"] = comments + ctx.Data["CanMarkConversation"] = true + ctx.Data["Issue"] = comment.Issue + if err = comment.Issue.LoadPullRequest(); err != nil { + ctx.ServerError("comment.Issue.LoadPullRequest", err) + return + } + pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(comment.Issue.PullRequest.GetGitRefName()) + if err != nil { + ctx.ServerError("GetRefCommitID", err) + return + } + ctx.Data["AfterCommitID"] = pullHeadCommitID + ctx.HTML(200, tplConversation) +} + // SubmitReview creates a review out of the existing pending review or creates a new one if no pending review exist func SubmitReview(ctx *context.Context, form auth.SubmitReviewForm) { issue := GetActionIssue(ctx) diff --git a/routers/routes/macaron.go b/routers/routes/macaron.go index ca3599b7a0..d54cd580d3 100644 --- a/routers/routes/macaron.go +++ b/routers/routes/macaron.go @@ -856,6 +856,7 @@ func RegisterMacaronRoutes(m *macaron.Macaron) { m.Group("/files", func() { m.Get("", context.RepoRef(), repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.ViewPullFiles) m.Group("/reviews", func() { + m.Get("/new_comment", repo.RenderNewCodeCommentForm) m.Post("/comments", bindIgnErr(auth.CodeCommentForm{}), repo.CreateCodeComment) m.Post("/submit", bindIgnErr(auth.SubmitReviewForm{}), repo.SubmitReview) }, context.RepoMustNotBeArchived()) |