Monorepo for Tangled — https://tangled.org

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>

+38 -2
+15 -1
appview/issues/issues.go
··· 892 892 totalIssues = f.RepoStats.IssueCount.Closed 893 893 } 894 894 895 + repoInfo := rp.repoResolver.GetRepoInfo(r, user) 896 + 895 897 var issues []models.Issue 896 898 897 899 if searchOpts.HasSearchFilters() { ··· 902 904 } 903 905 l.Debug("searched issues with indexer", "count", len(res.Hits)) 904 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 + } 905 919 906 920 if len(res.Hits) > 0 { 907 921 issues, err = db.GetIssues( ··· 964 978 965 979 rp.pages.RepoIssues(w, pages.RepoIssuesParams{ 966 980 LoggedInUser: rp.oauth.GetMultiAccountUser(r), 967 - RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 981 + RepoInfo: repoInfo, 968 982 Issues: issues, 969 983 IssueCount: totalIssues, 970 984 LabelDefs: defs,
+23 -1
appview/pulls/pulls.go
··· 630 630 } 631 631 } 632 632 633 + repoInfo := s.repoResolver.GetRepoInfo(r, user) 634 + 633 635 var pulls []*models.Pull 634 636 635 637 if searchOpts.HasSearchFilters() { ··· 640 642 } 641 643 totalPulls = int(res.Total) 642 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 + } 643 665 644 666 if len(res.Hits) > 0 { 645 667 pulls, err = db.GetPulls( ··· 751 773 752 774 s.pages.RepoPulls(w, pages.RepoPullsParams{ 753 775 LoggedInUser: s.oauth.GetMultiAccountUser(r), 754 - RepoInfo: s.repoResolver.GetRepoInfo(r, user), 776 + RepoInfo: repoInfo, 755 777 Pulls: pulls, 756 778 LabelDefs: defs, 757 779 FilterState: filterState,