diff --git a/appview/pages/pages.go b/appview/pages/pages.go
index 511f2609..541f34ef 100644
--- a/appview/pages/pages.go
+++ b/appview/pages/pages.go
@@ -757,6 +757,7 @@ type StarBtnFragmentParams struct {
IsStarred bool
SubjectAt syntax.ATURI
StarCount int
+ RepoName string
HxSwapOob bool
}
@@ -1483,6 +1484,18 @@ func (p *Pages) EditLabelPanel(w io.Writer, params EditLabelPanelParams) error {
return p.executePlain("repo/fragments/editLabelPanel", w, params)
}
+type RepoStarsParams struct {
+ LoggedInUser *oauth.MultiAccountUser
+ RepoInfo repoinfo.RepoInfo
+ Active string
+ Starrers []models.Star
+}
+
+func (p *Pages) RepoStars(w io.Writer, params RepoStarsParams) error {
+ params.Active = "overview"
+ return p.executeRepo("repo/stars", w, params)
+}
+
type PipelinesParams struct {
LoggedInUser *oauth.MultiAccountUser
RepoInfo repoinfo.RepoInfo
diff --git a/appview/pages/templates/repo/stars.html b/appview/pages/templates/repo/stars.html
new file mode 100644
index 00000000..927ca60d
--- /dev/null
+++ b/appview/pages/templates/repo/stars.html
@@ -0,0 +1,24 @@
+{{ define "title" }}stars ยท {{ .RepoInfo.FullName }}{{ end }}
+ {{ define "repoContent" }}
+
+
Starred by
+
+ {{ range .Starrers }}
+ {{ $handle := resolve .Did }}
+
+
+ {{ template "user/fragments/picLink" (list .Did "size-10") }}
+
+
+
+ {{ else }}
+
No stars yet.
+ {{ end }}
+
+
+{{ end }}
diff --git a/appview/repo/repo.go b/appview/repo/repo.go
index 606898ea..a3ca4d55 100644
--- a/appview/repo/repo.go
+++ b/appview/repo/repo.go
@@ -1257,6 +1257,29 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) {
}
}
+func (rp *Repo) Stars(w http.ResponseWriter, r *http.Request) {
+ l := rp.logger.With("handler", "Stars")
+
+ user := rp.oauth.GetMultiAccountUser(r)
+ f, err := rp.repoResolver.Resolve(r)
+ if err != nil {
+ l.Error("failed to resolve source repo", "err", err)
+ return
+ }
+
+ starrers, err := db.GetStars(rp.db, f.RepoAt())
+ if err != nil {
+ l.Error("failed to fetch starrers", "err", err, "repoAt", f.RepoAt())
+ return
+ }
+
+ rp.pages.RepoStars(w, pages.RepoStarsParams{
+ LoggedInUser: user,
+ RepoInfo: rp.repoResolver.GetRepoInfo(r, user),
+ Starrers: starrers,
+ })
+}
+
// this is used to rollback changes made to the PDS
//
// it is a no-op if the provided ATURI is empty
diff --git a/appview/repo/router.go b/appview/repo/router.go
index f40a22c3..843ca34b 100644
--- a/appview/repo/router.go
+++ b/appview/repo/router.go
@@ -47,6 +47,8 @@ func (rp *Repo) Router(mw *middleware.Middleware) http.Handler {
// a file path
r.Get("/archive/{ref}", rp.DownloadArchive)
+ r.Get("/stars", rp.Stars)
+
r.Route("/fork", func(r chi.Router) {
r.Use(middleware.AuthMiddleware(rp.oauth))
r.Get("/", rp.ForkRepo)
diff --git a/appview/state/star.go b/appview/state/star.go
index 78dea43d..b5a42948 100644
--- a/appview/state/star.go
+++ b/appview/state/star.go
@@ -37,6 +37,8 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) {
return
}
+ repoName := r.URL.Query().Get("repoName")
+
switch r.Method {
case http.MethodPost:
createdAt := time.Now().Format(time.RFC3339)
@@ -87,6 +89,7 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) {
IsStarred: true,
SubjectAt: subjectUri,
StarCount: starCount,
+ RepoName: repoName,
})
return
@@ -127,9 +130,11 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) {
IsStarred: false,
SubjectAt: subjectUri,
StarCount: starCount,
+ RepoName: repoName,
})
return
}
}
+