Monorepo for Tangled

appview/pulls: add pagination to pull requests listing

Add offset-based pagination to the pulls page, matching the issues behavior

moshyfawn.dev 746f8902 f3cb8576

verified
+28 -2
+2
appview/pages/pages.go
··· 1069 1069 Stacks map[string]models.Stack 1070 1070 Pipelines map[string]models.Pipeline 1071 1071 LabelDefs map[string]*models.LabelDefinition 1072 + Page pagination.Page 1073 + PullCount int 1072 1074 } 1073 1075 1074 1076 func (p *Pages) RepoPulls(w io.Writer, params RepoPullsParams) error {
+8
appview/pages/templates/repo/pulls/pulls.html
··· 170 170 </div> 171 171 {{ end }} 172 172 </div> 173 + {{if gt .PullCount .Page.Limit }} 174 + {{ template "fragments/pagination" (dict 175 + "Page" .Page 176 + "TotalCount" .PullCount 177 + "BasePath" (printf "/%s/pulls" .RepoInfo.FullName) 178 + "QueryParams" (printf "state=%s&q=%s" .FilteringBy.String .FilterQuery) 179 + ) }} 180 + {{ end }} 173 181 {{ end }} 174 182 175 183 {{ define "stackedPullList" }}
+17 -1
appview/pulls/pulls.go
··· 26 26 "tangled.org/core/appview/pages" 27 27 "tangled.org/core/appview/pages/markup" 28 28 "tangled.org/core/appview/pages/repoinfo" 29 + "tangled.org/core/appview/pagination" 29 30 "tangled.org/core/appview/reporesolver" 30 31 "tangled.org/core/appview/validator" 31 32 "tangled.org/core/appview/xrpcclient" ··· 563 564 state = models.PullMerged 564 565 } 565 566 567 + page := pagination.FromContext(r.Context()) 568 + 566 569 f, err := s.repoResolver.Resolve(r) 567 570 if err != nil { 568 571 log.Println("failed to get repo and knot", err) 569 572 return 570 573 } 571 574 575 + var totalPulls int 576 + switch state { 577 + case models.PullOpen: 578 + totalPulls = f.RepoStats.PullCount.Open 579 + case models.PullMerged: 580 + totalPulls = f.RepoStats.PullCount.Merged 581 + case models.PullClosed: 582 + totalPulls = f.RepoStats.PullCount.Closed 583 + } 584 + 572 585 keyword := params.Get("q") 573 586 574 587 var ids []int64 ··· 576 589 Keyword: keyword, 577 590 RepoAt: f.RepoAt().String(), 578 591 State: state, 579 - // Page: page, 592 + Page: page, 580 593 } 581 594 l.Debug("searching with", "searchOpts", searchOpts) 582 595 if keyword != "" { ··· 586 599 return 587 600 } 588 601 ids = res.Hits 602 + totalPulls = int(res.Total) 589 603 l.Debug("searched pulls with indexer", "count", len(ids)) 590 604 } else { 591 605 ids, err = db.GetPullIDs(s.db, searchOpts) ··· 688 702 FilterQuery: keyword, 689 703 Stacks: stacks, 690 704 Pipelines: m, 705 + Page: page, 706 + PullCount: totalPulls, 691 707 }) 692 708 } 693 709
+1 -1
appview/pulls/router.go
··· 9 9 10 10 func (s *Pulls) Router(mw *middleware.Middleware) http.Handler { 11 11 r := chi.NewRouter() 12 - r.Get("/", s.RepoPulls) 12 + r.With(middleware.Paginate).Get("/", s.RepoPulls) 13 13 r.With(middleware.AuthMiddleware(s.oauth)).Route("/new", func(r chi.Router) { 14 14 r.Get("/", s.NewPull) 15 15 r.Get("/patch-upload", s.PatchUploadFragment)