diff --git a/src/pages/OverviewPage.jsx b/src/pages/OverviewPage.jsx index 12eec18..5cbf64a 100644 --- a/src/pages/OverviewPage.jsx +++ b/src/pages/OverviewPage.jsx @@ -16,6 +16,7 @@ export default function OverviewPage() { const { orgs, model, totalRepo, isComplete, loading, runFullExplore } = useApp() const navigate = useNavigate() const [open, setOpen] = useState(false) + const [orgFilter, setOrgFilter] = useState('All Organizations') const infoRef = useRef(null) useEffect(() => { @@ -30,21 +31,33 @@ export default function OverviewPage() { } }, []) + useEffect(() => { + setOrgFilter('All Organizations') + }, [orgs]) + if(loading) return if (!model) return null const { totalRepos } = model const isMulti = orgs.length > 1 - const totalStars = totalRepos.reduce((s, r) => s + r.stargazers_count, 0) - const totalForks = totalRepos.reduce((s, r) => s + r.forks_count, 0) - const activeRepos = totalRepos.filter(r => r.activityClassification === 'Thriving' || r.activityClassification === 'Active').length + + const filteredRepos = orgFilter === 'All Organizations' + ? totalRepos + : totalRepos.filter(r => r.orgLogin === orgFilter) + + const totalStars = filteredRepos.reduce((s, r) => s + r.stargazers_count, 0) + const totalForks = filteredRepos.reduce((s, r) => s + r.forks_count, 0) + const activeRepos = filteredRepos.filter(r => r.activityClassification === 'Thriving' || r.activityClassification === 'Active').length const langMap = {} - totalRepos.forEach(r => { if (r.language) langMap[r.language] = (langMap[r.language] || 0) + 1 }) + filteredRepos.forEach(r => { if (r.language) langMap[r.language] = (langMap[r.language] || 0) + 1 }) const langs = Object.entries(langMap).sort((a, b) => b[1] - a[1]).slice(0, 7) const langTotal = langs.reduce((s, [, c]) => s + c, 0) - const topRepos = [...totalRepos].sort((a, b) => b.healthScore - a.healthScore).slice(0, 5) + const topRepos = [...filteredRepos].sort((a, b) => b.healthScore - a.healthScore).slice(0, 5) + + + const NavCard = ({ to, label, sub }) => (
+ {/* Org filter for stats */} + {isMulti && ( +
+ +
+ )} {/* Stats */}
- + - + { + const total = orgFilter === 'All Organizations' ? totalRepo : filteredRepos.length + return total > 0 ? Math.round(activeRepos / total * 100) : 0 + })()}% of total`} + />
{/* Language + top repos */}