diff --git a/appview/db/repos.go b/appview/db/repos.go --- a/appview/db/repos.go +++ b/appview/db/repos.go @@ -22,6 +22,7 @@ Rkey string Created time.Time Description string Spindle string + Labels []string // optionally, populate this when querying for reverse mappings RepoStats *RepoStats @@ -155,6 +156,29 @@ i := 0 for _, r := range repoMap { args[i] = r.RepoAt() i++ + } + + // Get labels for all repos + labelsQuery := fmt.Sprintf( + `select repo_at, label_at from repo_labels where repo_at in (%s)`, + inClause, + ) + rows, err = e.Query(labelsQuery, args...) + if err != nil { + return nil, fmt.Errorf("failed to execute labels query: %w ", err) + } + for rows.Next() { + var repoat, labelat string + if err := rows.Scan(&repoat, &labelat); err != nil { + log.Println("err", "err", err) + continue + } + if r, ok := repoMap[syntax.ATURI(repoat)]; ok { + r.Labels = append(r.Labels, labelat) + } + } + if err = rows.Err(); err != nil { + return nil, fmt.Errorf("failed to execute labels query: %w ", err) } languageQuery := fmt.Sprintf( diff --git a/appview/pages/pages.go b/appview/pages/pages.go --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -840,6 +840,7 @@ type RepoGeneralSettingsParams struct { LoggedInUser *oauth.User RepoInfo repoinfo.RepoInfo + Labels []db.LabelDefinition Active string Tabs []map[string]any Tab string diff --git a/appview/pages/templates/repo/settings/fragments/labelListing.html b/appview/pages/templates/repo/settings/fragments/labelListing.html new file mode 100644 --- /dev/null +++ b/appview/pages/templates/repo/settings/fragments/labelListing.html @@ -0,0 +1,28 @@ +{{ define "repo/settings/fragments/labelListing" }} + {{ $root := index . 0 }} + {{ $label := index . 1 }} +
+
+ {{ template "labels/fragments/labelDef" $label }} +
+ {{ $label.ValueType.Type }} + {{ if $label.ValueType.IsEnumType }} + + {{ join $label.ValueType.Enum ", " }} + {{ end }} +
+
+ +
+{{ end }} diff --git a/appview/pages/templates/repo/settings/general.html b/appview/pages/templates/repo/settings/general.html --- a/appview/pages/templates/repo/settings/general.html +++ b/appview/pages/templates/repo/settings/general.html @@ -7,6 +7,7 @@ {{ template "repo/settings/fragments/sidebar" . }}
{{ template "branchSettings" . }} + {{ template "labelSettings" . }} {{ template "deleteRepo" . }}
@@ -42,6 +43,46 @@ {{ end }} +{{ define "labelSettings" }} +
+
+
+

Labels

+

+ Manage your issues and pulls by creating labels to categorize them. + Only repository owners may configure labels. +

+
+
+ +
+ {{ template "repo/settings/fragments/addLabelDefModal" . }} +
+
+
+
+ {{ range .Labels }} + {{ template "repo/settings/fragments/labelListing" (list $ .) }} + {{ else }} +
+ no labels added yet +
+ {{ end }} +
+
+
+{{ end }} + {{ define "deleteRepo" }} {{ if .RepoInfo.Roles.RepoDeleteAllowed }}
@@ -68,3 +109,4 @@
{{ end }} {{ end }} + diff --git a/appview/repo/repo.go b/appview/repo/repo.go --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -1391,10 +1391,18 @@ rp.pages.Error503(w) return } + labels, 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 + } + rp.pages.RepoGeneralSettings(w, pages.RepoGeneralSettingsParams{ LoggedInUser: user, RepoInfo: f.RepoInfo(user), Branches: result.Branches, + Labels: labels, Tabs: settingsTabs, Tab: "general", })