udpate total count to be all base and variants

This commit is contained in:
2025-08-17 13:07:57 +01:00
parent 91a1778e0b
commit 7e0aa8fed0

View File

@@ -116,8 +116,15 @@ export default function Page() {
return bySet; return bySet;
}, [cards, query, setId]); }, [cards, query, setId]);
const filteredCollectedCount = useMemo(() => filtered.filter((c) => isFullyCollected(c)).length, [filtered, checklist]); // Variant-based counts for filtered set
const filteredUncollectedCount = useMemo(() => filtered.length - filteredCollectedCount, [filtered, filteredCollectedCount]); 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(() => { const displayed = useMemo(() => {
return tab === 'collected' 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)); return Array.from(map.entries()).map(([id, label]) => ({ id, label })).sort((a, b) => a.label.localeCompare(b.label));
}, [cards]); }, [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 ( return (
<main className="container mx-auto"> <main className="container mx-auto">
<Header <Header
query={query} query={query}
onQueryChange={setQuery} onQueryChange={setQuery}
total={cards.length} total={totalVariantsAll}
collectedCount={useMemo(() => cards.filter((c) => isFullyCollected(c)).length, [cards, checklist])} collectedCount={collectedVariantsAll}
/> />
<div className="mb-4 flex flex-wrap items-center gap-3"> <div className="mb-4 flex flex-wrap items-center gap-3">
@@ -188,7 +202,7 @@ export default function Page() {
aria-pressed={tab === 'uncollected'} aria-pressed={tab === 'uncollected'}
> >
Uncollected <span className="ml-1 inline-block rounded bg-white/20 px-1.5 py-0.5 text-xs border border-white/30"> Uncollected <span className="ml-1 inline-block rounded bg-white/20 px-1.5 py-0.5 text-xs border border-white/30">
{filteredUncollectedCount} {filteredUncollectedVariantsCount}
</span> </span>
</button> </button>
<button <button
@@ -202,7 +216,7 @@ export default function Page() {
aria-pressed={tab === 'collected'} aria-pressed={tab === 'collected'}
> >
Collected <span className="ml-1 inline-block rounded bg-white/20 px-1.5 py-0.5 text-xs border border-white/30"> Collected <span className="ml-1 inline-block rounded bg-white/20 px-1.5 py-0.5 text-xs border border-white/30">
{filteredCollectedCount} {filteredCollectedVariantsCount}
</span> </span>
</button> </button>
</div> </div>