From ae44f0db1837fb2e26c5a8c8df3a12638a97b180 Mon Sep 17 00:00:00 2001 From: Patrick Dewey
Date: Tue, 21 Apr 2026 22:41:22 +0000 Subject: [PATCH] appview: add pagination to stars page Signed-off-by: Patrick Dewey
--- appview/db/star.go | 5 +++-- appview/pages/pages.go | 2 ++ appview/repo/repo.go | 16 +++++++++++++++- appview/repo/router.go | 2 +- appview/pages/templates/repo/stars.html | 11 ++++++++++- 5 file(s) changed, 31 insertion(s)(+), 5 deletion(s)(-) diff --git a/appview/db/star.go b/appview/db/star.go --- a/appview/db/star.go +++ b/appview/db/star.go @@ -52,14 +52,15 @@ return &star, nil } -func GetStars(e Execer, subjectAt syntax.ATURI) ([]models.Star, error) { +func GetStars(e Execer, subjectAt syntax.ATURI, page pagination.Page) ([]models.Star, error) { query := ` select did, subject_at, created, rkey from stars where subject_at = ? order by created desc + limit ? offset ? ` - rows, err := e.Query(query, subjectAt) + rows, err := e.Query(query, subjectAt, page.Limit, page.Offset) if err != nil { return nil, err } diff --git a/appview/pages/pages.go b/appview/pages/pages.go --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -1512,6 +1512,8 @@ RepoInfo repoinfo.RepoInfo Active string Starrers []models.Star + Page pagination.Page + TotalCount int } func (p *Pages) RepoStars(w io.Writer, params RepoStarsParams) error { diff --git a/appview/repo/repo.go b/appview/repo/repo.go --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -21,6 +21,7 @@ "tangled.org/core/appview/notify" "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" + "tangled.org/core/appview/pagination" "tangled.org/core/appview/reporesolver" "tangled.org/core/appview/validator" xrpcclient "tangled.org/core/appview/xrpcclient" @@ -1270,9 +1271,20 @@ return } - starrers, err := db.GetStars(rp.db, f.RepoAt()) + page := pagination.FromContext(r.Context()) + if page.Limit > 30 || page.Limit <= 0 { + page.Limit = 30 + } + + starrers, err := db.GetStars(rp.db, f.RepoAt(), page) if err != nil { l.Error("failed to fetch starrers", "err", err, "repoAt", f.RepoAt()) + return + } + + totalCount, err := db.GetStarCount(rp.db, f.RepoAt()) + if err != nil { + l.Error("failed to fetch star count", "err", err, "repoAt", f.RepoAt()) return } @@ -1280,6 +1292,8 @@ LoggedInUser: user, RepoInfo: rp.repoResolver.GetRepoInfo(r, user), Starrers: starrers, + Page: page, + TotalCount: totalCount, }) } diff --git a/appview/repo/router.go b/appview/repo/router.go --- a/appview/repo/router.go +++ b/appview/repo/router.go @@ -47,7 +47,7 @@ // a file path r.Get("/archive/{ref}", rp.DownloadArchive) - r.Get("/stars", rp.Stars) + r.With(middleware.Paginate).Get("/stars", rp.Stars) r.Route("/fork", func(r chi.Router) { r.Use(middleware.AuthMiddleware(rp.oauth)) diff --git a/appview/pages/templates/repo/stars.html b/appview/pages/templates/repo/stars.html --- a/appview/pages/templates/repo/stars.html +++ b/appview/pages/templates/repo/stars.html @@ -16,9 +16,18 @@ - {{ else }} + {{ end }} + {{ if eq .TotalCount 0 }}
No stars yet.
{{ end }} + {{ if gt .TotalCount .Page.Limit }} + {{ template "fragments/pagination" (dict + "Page" .Page + "TotalCount" .TotalCount + "BasePath" (printf "/%s/stars" .RepoInfo.FullName) + "QueryParams" (queryParams) + ) }} + {{ end }} {{ end }} -- tangled.sh