diff --git a/src/pages/WatchlistPage.tsx b/src/pages/WatchlistPage.tsx index fe91a4c7..2d218cb0 100644 --- a/src/pages/WatchlistPage.tsx +++ b/src/pages/WatchlistPage.tsx @@ -4213,6 +4213,12 @@ const IssuesList: React.FC<{ minerIds: string[] }> = ({ minerIds }) => { const isLoading = issueQueries.some((q) => q.isLoading); + const { + active: issueActiveSources, + toggle: toggleIssueSource, + isAllOn: issueSourcesAllOn, + } = usePrSourceFilter(); + const [searchQuery, setSearchQuery] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); const [viewMode, setViewMode] = useWatchlistViewMode(); @@ -4229,7 +4235,14 @@ const IssuesList: React.FC<{ minerIds: string[] }> = ({ minerIds }) => { useEffect(() => { setPage(0); - }, [statusFilter, searchQuery, sortField, sortOrder, viewMode]); + }, [ + statusFilter, + searchQuery, + sortField, + sortOrder, + viewMode, + issueActiveSources, + ]); const handleSort = (field: IssueSortKey) => { if (sortField === field) { @@ -4241,11 +4254,28 @@ const IssuesList: React.FC<{ minerIds: string[] }> = ({ minerIds }) => { setPage(0); }; - const counts = useMemo(() => getIssueCounts(items), [items]); + const issueSourceCounts = useMemo(() => { + const tally = { starred: 0, miner: 0, repo: 0 }; + for (const issue of items) { + const sources = sourcesByKey.get(issueKey(issue)); + if (!sources) continue; + for (const s of sources) tally[s] += 1; + } + return tally; + }, [items, sourcesByKey]); + + const scopedItems = useMemo(() => { + if (issueSourcesAllOn) return items; + return items.filter((issue) => + sourcesByKey.get(issueKey(issue))?.some((s) => issueActiveSources.has(s)), + ); + }, [items, sourcesByKey, issueActiveSources, issueSourcesAllOn]); + + const counts = useMemo(() => getIssueCounts(scopedItems), [scopedItems]); const filtered = useMemo( - () => filterIssues(items, { statusFilter, searchQuery }), - [items, statusFilter, searchQuery], + () => filterIssues(scopedItems, { statusFilter, searchQuery }), + [scopedItems, statusFilter, searchQuery], ); const sorted = useMemo(() => { @@ -4332,6 +4362,35 @@ const IssuesList: React.FC<{ minerIds: string[] }> = ({ minerIds }) => { onClick={() => setStatusFilter(s)} /> ))} + + toggleIssueSource('starred')} + /> + toggleIssueSource('miner')} + /> + toggleIssueSource('repo')} + /> } searchValue={draftValue} @@ -4351,7 +4410,7 @@ const IssuesList: React.FC<{ minerIds: string[] }> = ({ minerIds }) => { }} /> } - hasActiveFilter={statusFilter !== 'all'} + hasActiveFilter={statusFilter !== 'all' || !issueSourcesAllOn} /> )}