Monorepo for Tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

appview: add pagination to stars page

Signed-off-by: Patrick Dewey <p@pdewey.com>

authored by

Patrick Dewey and committed by
Tangled
ae44f0db 37ca76dd

+31 -5
+3 -2
appview/db/star.go
··· 52 52 return &star, nil 53 53 } 54 54 55 - func GetStars(e Execer, subjectAt syntax.ATURI) ([]models.Star, error) { 55 + func GetStars(e Execer, subjectAt syntax.ATURI, page pagination.Page) ([]models.Star, error) { 56 56 query := ` 57 57 select did, subject_at, created, rkey 58 58 from stars 59 59 where subject_at = ? 60 60 order by created desc 61 + limit ? offset ? 61 62 ` 62 - rows, err := e.Query(query, subjectAt) 63 + rows, err := e.Query(query, subjectAt, page.Limit, page.Offset) 63 64 if err != nil { 64 65 return nil, err 65 66 }
+2
appview/pages/pages.go
··· 1512 1512 RepoInfo repoinfo.RepoInfo 1513 1513 Active string 1514 1514 Starrers []models.Star 1515 + Page pagination.Page 1516 + TotalCount int 1515 1517 } 1516 1518 1517 1519 func (p *Pages) RepoStars(w io.Writer, params RepoStarsParams) error {
+10 -1
appview/pages/templates/repo/stars.html
··· 16 16 </div> 17 17 </div> 18 18 </div> 19 - {{ else }} 19 + {{ end }} 20 + {{ if eq .TotalCount 0 }} 20 21 <p class="text-gray-500 dark:text-gray-400 col-span-3">No stars yet.</p> 21 22 {{ end }} 22 23 </div> 24 + {{ if gt .TotalCount .Page.Limit }} 25 + {{ template "fragments/pagination" (dict 26 + "Page" .Page 27 + "TotalCount" .TotalCount 28 + "BasePath" (printf "/%s/stars" .RepoInfo.FullName) 29 + "QueryParams" (queryParams) 30 + ) }} 31 + {{ end }} 23 32 </div> 24 33 {{ end }}
+15 -1
appview/repo/repo.go
··· 21 21 "tangled.org/core/appview/notify" 22 22 "tangled.org/core/appview/oauth" 23 23 "tangled.org/core/appview/pages" 24 + "tangled.org/core/appview/pagination" 24 25 "tangled.org/core/appview/reporesolver" 25 26 "tangled.org/core/appview/validator" 26 27 xrpcclient "tangled.org/core/appview/xrpcclient" ··· 1270 1271 return 1271 1272 } 1272 1273 1273 - starrers, err := db.GetStars(rp.db, f.RepoAt()) 1274 + page := pagination.FromContext(r.Context()) 1275 + if page.Limit > 30 || page.Limit <= 0 { 1276 + page.Limit = 30 1277 + } 1278 + 1279 + starrers, err := db.GetStars(rp.db, f.RepoAt(), page) 1274 1280 if err != nil { 1275 1281 l.Error("failed to fetch starrers", "err", err, "repoAt", f.RepoAt()) 1276 1282 return 1277 1283 } 1278 1284 1285 + totalCount, err := db.GetStarCount(rp.db, f.RepoAt()) 1286 + if err != nil { 1287 + l.Error("failed to fetch star count", "err", err, "repoAt", f.RepoAt()) 1288 + return 1289 + } 1290 + 1279 1291 rp.pages.RepoStars(w, pages.RepoStarsParams{ 1280 1292 LoggedInUser: user, 1281 1293 RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 1282 1294 Starrers: starrers, 1295 + Page: page, 1296 + TotalCount: totalCount, 1283 1297 }) 1284 1298 } 1285 1299
+1 -1
appview/repo/router.go
··· 47 47 // a file path 48 48 r.Get("/archive/{ref}", rp.DownloadArchive) 49 49 50 - r.Get("/stars", rp.Stars) 50 + r.With(middleware.Paginate).Get("/stars", rp.Stars) 51 51 52 52 r.Route("/fork", func(r chi.Router) { 53 53 r.Use(middleware.AuthMiddleware(rp.oauth))