feat: make award summary respect mode filter and remove mode from table headers

Summary cards (Total, Confirmed, Worked, Needed) now update based on the
selected mode filter. Also removed redundant mode display from table column
headers since the mode is already visible in the filter dropdown.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-22 07:52:13 +01:00
parent dd3beef9af
commit 89edd07722

View File

@@ -24,6 +24,11 @@
// Get available modes from entities // Get available modes from entities
$: availableModes = ['Mixed Mode', ...new Set(entities.map(e => e.mode).filter(Boolean).sort())]; $: availableModes = ['Mixed Mode', ...new Set(entities.map(e => e.mode).filter(Boolean).sort())];
// Filter entities by selected mode for summary calculations
$: filteredEntities = selectedMode === 'Mixed Mode'
? entities
: entities.filter(e => e.mode === selectedMode);
onMount(async () => { onMount(async () => {
await loadAwardData(); await loadAwardData();
}); });
@@ -394,16 +399,16 @@
<div class="summary"> <div class="summary">
{#if entities.length > 0 && entities[0].points !== undefined} {#if entities.length > 0 && entities[0].points !== undefined}
{@const earnedPoints = entities.reduce((sum, e) => sum + (e.confirmed ? e.points : 0), 0)} {@const earnedPoints = filteredEntities.reduce((sum, e) => sum + (e.confirmed ? e.points : 0), 0)}
{@const targetPoints = award.target} {@const targetPoints = award.target}
{@const neededPoints = Math.max(0, targetPoints - earnedPoints)} {@const neededPoints = Math.max(0, targetPoints - earnedPoints)}
<div class="summary-card"> <div class="summary-card">
<span class="summary-label">Total Combinations:</span> <span class="summary-label">Total Combinations:</span>
<span class="summary-value">{entities.length}</span> <span class="summary-value">{filteredEntities.length}</span>
</div> </div>
<div class="summary-card confirmed"> <div class="summary-card confirmed">
<span class="summary-label">Confirmed:</span> <span class="summary-label">Confirmed:</span>
<span class="summary-value">{entities.filter((e) => e.confirmed).length}</span> <span class="summary-value">{filteredEntities.filter((e) => e.confirmed).length}</span>
</div> </div>
<div class="summary-card" style="background-color: #fff3cd; border-color: #ffc107;"> <div class="summary-card" style="background-color: #fff3cd; border-color: #ffc107;">
<span class="summary-label">Points:</span> <span class="summary-label">Points:</span>
@@ -418,12 +423,12 @@
<span class="summary-value">{targetPoints}</span> <span class="summary-value">{targetPoints}</span>
</div> </div>
{:else} {:else}
{@const workedCount = entities.filter((e) => e.worked).length} {@const workedCount = filteredEntities.filter((e) => e.worked).length}
{@const confirmedCount = entities.filter((e) => e.confirmed).length} {@const confirmedCount = filteredEntities.filter((e) => e.confirmed).length}
{@const neededCount = award.target ? Math.max(0, award.target - workedCount) : entities.filter((e) => !e.worked).length} {@const neededCount = award.target ? Math.max(0, award.target - workedCount) : filteredEntities.filter((e) => !e.worked).length}
<div class="summary-card"> <div class="summary-card">
<span class="summary-label">Total:</span> <span class="summary-label">Total:</span>
<span class="summary-value">{entities.length}</span> <span class="summary-value">{filteredEntities.length}</span>
</div> </div>
<div class="summary-card confirmed"> <div class="summary-card confirmed">
<span class="summary-label">Confirmed:</span> <span class="summary-label">Confirmed:</span>
@@ -460,8 +465,8 @@
<thead> <thead>
<tr> <tr>
<th class="entity-column">Entity</th> <th class="entity-column">Entity</th>
{#each columns as { band, mode }} {#each columns as { band }}
<th class="band-column">{band}{#if mode} {mode}{/if}</th> <th class="band-column">{band}</th>
{/each} {/each}
</tr> </tr>
</thead> </thead>