diff --git a/appview/db/issues.go b/appview/db/issues.go index 90350f1d..c8f8a029 100644 --- a/appview/db/issues.go +++ b/appview/db/issues.go @@ -30,6 +30,7 @@ type Issue struct { // optionally, populate this when querying for reverse mappings // like comment counts, parent repo etc. Comments []IssueComment + Labels LabelState Repo *Repo } @@ -371,11 +372,11 @@ func GetIssuesPaginated(e Execer, page pagination.Page, filters ...filter) ([]Is // collect comments issueAts := slices.Collect(maps.Keys(issueMap)) + comments, err := GetIssueComments(e, FilterIn("issue_at", issueAts)) if err != nil { return nil, fmt.Errorf("failed to query comments: %w", err) } - for i := range comments { issueAt := comments[i].IssueAt if issue, ok := issueMap[issueAt]; ok { @@ -383,6 +384,17 @@ func GetIssuesPaginated(e Execer, page pagination.Page, filters ...filter) ([]Is } } + // collect allLabels for each issue + allLabels, err := GetLabels(e, FilterIn("subject", issueAts)) + if err != nil { + return nil, fmt.Errorf("failed to query labels: %w", err) + } + for issueAt, labels := range allLabels { + if issue, ok := issueMap[issueAt.String()]; ok { + issue.Labels = labels + } + } + var issues []Issue for _, i := range issueMap { issues = append(issues, *i) diff --git a/appview/issues/issues.go b/appview/issues/issues.go index 37133a10..6aa23f86 100644 --- a/appview/issues/issues.go +++ b/appview/issues/issues.go @@ -92,6 +92,18 @@ func (rp *Issues) RepoSingleIssue(w http.ResponseWriter, r *http.Request) { userReactions = db.GetReactionStatusMap(rp.db, user.Did, issue.AtUri()) } + labelDefs, err := db.GetLabelDefinitions(rp.db, db.FilterIn("at_uri", f.Repo.Labels)) + if err != nil { + log.Println("failed to fetch labels", err) + rp.pages.Error503(w) + return + } + + defs := make(map[string]*db.LabelDefinition) + for _, l := range labelDefs { + defs[l.AtUri().String()] = &l + } + rp.pages.RepoSingleIssue(w, pages.RepoSingleIssueParams{ LoggedInUser: user, RepoInfo: f.RepoInfo(user), @@ -100,6 +112,7 @@ func (rp *Issues) RepoSingleIssue(w http.ResponseWriter, r *http.Request) { OrderedReactionKinds: db.OrderedReactionKinds, Reactions: reactionCountMap, UserReacted: userReactions, + LabelDefs: defs, }) } diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 727858d3..47fcb370 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -897,12 +897,12 @@ func (p *Pages) RepoIssues(w io.Writer, params RepoIssuesParams) error { } type RepoSingleIssueParams struct { - LoggedInUser *oauth.User - RepoInfo repoinfo.RepoInfo - Active string - Issue *db.Issue - CommentList []db.CommentListItem - IssueOwnerHandle string + LoggedInUser *oauth.User + RepoInfo repoinfo.RepoInfo + Active string + Issue *db.Issue + CommentList []db.CommentListItem + LabelDefs map[string]*db.LabelDefinition OrderedReactionKinds []db.ReactionKind Reactions map[db.ReactionKind]int diff --git a/appview/pages/templates/repo/fragments/addLabelModal.html b/appview/pages/templates/repo/fragments/addLabelModal.html new file mode 100644 index 00000000..d5787bc1 --- /dev/null +++ b/appview/pages/templates/repo/fragments/addLabelModal.html @@ -0,0 +1,119 @@ +{{ define "repo/fragments/addLabelModal" }} + {{ $root := .root }} + {{ $subject := .subject }} + {{ $state := .state }} + {{ with $root }} +
+ {{ end }} +{{ end }} + +{{ define "valueTypeInput" }} + {{ $valueType := .valueType }} + {{ $value := .value }} + {{ $key := .key }} + + {{ if $valueType.IsEnumType }} + {{ template "enumTypeInput" $ }} + {{ else if $valueType.IsBool }} + {{ template "boolTypeInput" $ }} + {{ else if $valueType.IsInt }} + {{ template "intTypeInput" $ }} + {{ else if $valueType.IsString }} + {{ template "stringTypeInput" $ }} + {{ else if $valueType.IsNull }} + {{ template "nullTypeInput" $ }} + {{ end }} +{{ end }} + +{{ define "enumTypeInput" }} + {{ $valueType := .valueType }} + {{ $value := .value }} + +{{ end }} + +{{ define "boolTypeInput" }} + {{ $value := .value }} + +{{ end }} + +{{ define "intTypeInput" }} + {{ $value := .value }} + +{{ end }} + +{{ define "stringTypeInput" }} + {{ $value := .value }} + +{{ end }} + +{{ define "nullTypeInput" }} + +{{ end }} diff --git a/appview/pages/templates/repo/issues/issue.html b/appview/pages/templates/repo/issues/issue.html index 84887d5b..7bd1640a 100644 --- a/appview/pages/templates/repo/issues/issue.html +++ b/appview/pages/templates/repo/issues/issue.html @@ -15,7 +15,10 @@ {{ if .Issue.Body }}