Project: show referenced PRs in issue cards (#14183)
Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
172229966c
commit
ef85bf84ee
4 changed files with 38 additions and 4 deletions
|
@ -256,6 +256,10 @@ func (b *ProjectBoard) LoadIssues() (IssueList, error) {
|
||||||
issueList = append(issueList, issues...)
|
issueList = append(issueList, issues...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := IssueList(issueList).LoadComments(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
b.Issues = issueList
|
b.Issues = issueList
|
||||||
return issueList, nil
|
return issueList, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -280,10 +280,32 @@ func ViewProject(ctx *context.Context) {
|
||||||
boards[0].Title = ctx.Tr("repo.projects.type.uncategorized")
|
boards[0].Title = ctx.Tr("repo.projects.type.uncategorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Data["Issues"], err = boards.LoadIssues(); err != nil {
|
issueList, err := boards.LoadIssues()
|
||||||
|
if err != nil {
|
||||||
ctx.ServerError("LoadIssuesOfBoards", err)
|
ctx.ServerError("LoadIssuesOfBoards", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
ctx.Data["Issues"] = issueList
|
||||||
|
|
||||||
|
linkedPrsMap := make(map[int64][]*models.Issue)
|
||||||
|
for _, issue := range issueList {
|
||||||
|
var referencedIds []int64
|
||||||
|
for _, comment := range issue.Comments {
|
||||||
|
if comment.RefIssueID != 0 && comment.RefIsPull {
|
||||||
|
referencedIds = append(referencedIds, comment.RefIssueID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(referencedIds) > 0 {
|
||||||
|
if linkedPrs, err := models.Issues(&models.IssuesOptions{
|
||||||
|
IssueIDs: referencedIds,
|
||||||
|
IsPull: util.OptionalBoolTrue,
|
||||||
|
}); err == nil {
|
||||||
|
linkedPrsMap[issue.ID] = linkedPrs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ctx.Data["LinkedPRs"] = linkedPrsMap
|
||||||
|
|
||||||
project.RenderedContent = string(markdown.Render([]byte(project.Description), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
|
project.RenderedContent = string(markdown.Render([]byte(project.Description), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
|
||||||
|
|
||||||
|
|
|
@ -166,13 +166,21 @@
|
||||||
</span>
|
</span>
|
||||||
<a class="project-board-title" href="{{$.RepoLink}}/issues/{{.Index}}">#{{.Index}} {{.Title}}</a>
|
<a class="project-board-title" href="{{$.RepoLink}}/issues/{{.Index}}">#{{.Index}} {{.Title}}</a>
|
||||||
</div>
|
</div>
|
||||||
|
{{- if .MilestoneID }}
|
||||||
<div class="meta">
|
<div class="meta">
|
||||||
{{ if .MilestoneID }}
|
|
||||||
<a class="milestone" href="{{$.RepoLink}}/milestone/{{ .MilestoneID}}">
|
<a class="milestone" href="{{$.RepoLink}}/milestone/{{ .MilestoneID}}">
|
||||||
{{svg "octicon-milestone"}} {{ .Milestone.Name }}
|
{{svg "octicon-milestone"}} {{ .Milestone.Name }}
|
||||||
</a>
|
</a>
|
||||||
{{ end }}
|
|
||||||
</div>
|
</div>
|
||||||
|
{{- end }}
|
||||||
|
{{- range index $.LinkedPRs .ID }}
|
||||||
|
<div class="meta">
|
||||||
|
<a href="{{$.RepoLink}}/pulls/{{ .ID }}">
|
||||||
|
<span class="{{if .PullRequest.HasMerged}}purple{{else if .IsClosed}}red{{else}}green{{end}}">{{svg "octicon-git-merge"}}</span>
|
||||||
|
{{ .Title}} (#{{ .ID }})
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{- end }}
|
||||||
</div>
|
</div>
|
||||||
<div class="extra content">
|
<div class="extra content">
|
||||||
{{ range .Labels }}
|
{{ range .Labels }}
|
||||||
|
|
|
@ -2921,7 +2921,7 @@ tbody.commit-list {
|
||||||
}
|
}
|
||||||
|
|
||||||
.board-card .content {
|
.board-card .content {
|
||||||
padding: 5px 8px !important;
|
padding: 8px 8px 5px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.board-card .extra.content {
|
.board-card .extra.content {
|
||||||
|
|
Reference in a new issue