diff --git a/src/app/page.tsx b/src/app/page.tsx index 1342de5..492d256 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -116,8 +116,15 @@ export default function Page() { return bySet; }, [cards, query, setId]); - const filteredCollectedCount = useMemo(() => filtered.filter((c) => isFullyCollected(c)).length, [filtered, checklist]); - const filteredUncollectedCount = useMemo(() => filtered.length - filteredCollectedCount, [filtered, filteredCollectedCount]); + // Variant-based counts for filtered set + const filteredCollectedVariantsCount = useMemo(() => { + return filtered.reduce((sum, c) => { + const state = checklist[c.id] || {}; + return sum + availableVariants(c).reduce((acc, k) => acc + (state[k] ? 1 : 0), 0); + }, 0); + }, [filtered, checklist]); + const filteredTotalVariants = useMemo(() => filtered.reduce((sum, c) => sum + availableVariants(c).length, 0), [filtered]); + const filteredUncollectedVariantsCount = useMemo(() => filteredTotalVariants - filteredCollectedVariantsCount, [filteredTotalVariants, filteredCollectedVariantsCount]); const displayed = useMemo(() => { return tab === 'collected' @@ -133,13 +140,20 @@ export default function Page() { return Array.from(map.entries()).map(([id, label]) => ({ id, label })).sort((a, b) => a.label.localeCompare(b.label)); }, [cards]); + // Overall variant-based totals for header + const totalVariantsAll = useMemo(() => cards.reduce((sum, c) => sum + availableVariants(c).length, 0), [cards]); + const collectedVariantsAll = useMemo(() => cards.reduce((sum, c) => { + const state = checklist[c.id] || {}; + return sum + availableVariants(c).reduce((acc, k) => acc + (state[k] ? 1 : 0), 0); + }, 0), [cards, checklist]); + return (
cards.filter((c) => isFullyCollected(c)).length, [cards, checklist])} + total={totalVariantsAll} + collectedCount={collectedVariantsAll} />
@@ -188,7 +202,7 @@ export default function Page() { aria-pressed={tab === 'uncollected'} > Uncollected - {filteredUncollectedCount} + {filteredUncollectedVariantsCount}