Monorepo for Tangled

appview: update tab counts to reflect search filters

When searching issues or pulls with filters, the open/closed tab counts
were showing unfiltered repo totals. Run per-state count queries when a
search is active and update RepoInfo.Stats before rendering.

Based on a fix by Patrick Dewey (pdewey.com) for issue #400.

Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>

authored by

Thomas Karpiniec and committed by tangled.org 2dc39aff b162fea0

+35 -1
+15 -1
appview/issues/issues.go
··· 892 totalIssues = f.RepoStats.IssueCount.Closed 893 } 894 895 var issues []models.Issue 896 897 if searchOpts.HasSearchFilters() { ··· 902 } 903 l.Debug("searched issues with indexer", "count", len(res.Hits)) 904 totalIssues = int(res.Total) 905 906 if len(res.Hits) > 0 { 907 issues, err = db.GetIssues( ··· 964 965 rp.pages.RepoIssues(w, pages.RepoIssuesParams{ 966 LoggedInUser: rp.oauth.GetMultiAccountUser(r), 967 - RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 968 Issues: issues, 969 IssueCount: totalIssues, 970 LabelDefs: defs,
··· 892 totalIssues = f.RepoStats.IssueCount.Closed 893 } 894 895 + repoInfo := rp.repoResolver.GetRepoInfo(r, user) 896 + 897 var issues []models.Issue 898 899 if searchOpts.HasSearchFilters() { ··· 904 } 905 l.Debug("searched issues with indexer", "count", len(res.Hits)) 906 totalIssues = int(res.Total) 907 + 908 + // update tab counts to reflect filtered results 909 + countOpts := searchOpts 910 + countOpts.Page = pagination.Page{Limit: 1} 911 + countOpts.IsOpen = ptrBool(true) 912 + if openRes, err := rp.indexer.Search(r.Context(), countOpts); err == nil { 913 + repoInfo.Stats.IssueCount.Open = int(openRes.Total) 914 + } 915 + countOpts.IsOpen = ptrBool(false) 916 + if closedRes, err := rp.indexer.Search(r.Context(), countOpts); err == nil { 917 + repoInfo.Stats.IssueCount.Closed = int(closedRes.Total) 918 + } 919 920 if len(res.Hits) > 0 { 921 issues, err = db.GetIssues( ··· 978 979 rp.pages.RepoIssues(w, pages.RepoIssuesParams{ 980 LoggedInUser: rp.oauth.GetMultiAccountUser(r), 981 + RepoInfo: repoInfo, 982 Issues: issues, 983 IssueCount: totalIssues, 984 LabelDefs: defs,
+20
appview/pulls/pulls.go
··· 643 totalPulls = int(res.Total) 644 l.Debug("searched pulls with indexer", "count", len(res.Hits)) 645 646 if len(res.Hits) > 0 { 647 pulls, err = db.GetPulls( 648 s.db,
··· 643 totalPulls = int(res.Total) 644 l.Debug("searched pulls with indexer", "count", len(res.Hits)) 645 646 + // update tab counts to reflect filtered results 647 + countOpts := searchOpts 648 + countOpts.Page = pagination.Page{Limit: 1} 649 + for _, ps := range []models.PullState{models.PullOpen, models.PullMerged, models.PullClosed} { 650 + ps := ps 651 + countOpts.State = &ps 652 + countRes, err := s.indexer.Search(r.Context(), countOpts) 653 + if err != nil { 654 + continue 655 + } 656 + switch ps { 657 + case models.PullOpen: 658 + repoInfo.Stats.PullCount.Open = int(countRes.Total) 659 + case models.PullMerged: 660 + repoInfo.Stats.PullCount.Merged = int(countRes.Total) 661 + case models.PullClosed: 662 + repoInfo.Stats.PullCount.Closed = int(countRes.Total) 663 + } 664 + } 665 + 666 if len(res.Hits) > 0 { 667 pulls, err = db.GetPulls( 668 s.db,