Add Nerd Corner tab with year-over-year cumulative progress chart

This commit is contained in:
Davide Scaini
2026-05-14 16:37:01 +02:00
parent 487ce42361
commit 8804bdec37
2 changed files with 210 additions and 3 deletions
+12 -3
View File
@@ -5,6 +5,7 @@
import RecordsView from './RecordsView.svelte';
import AthleteDrawer from './AthleteDrawer.svelte';
import Explore from './Explore.svelte';
import NerdCorner from './NerdCorner.svelte';
import { isUnlisted, formatElapsed, formatDistance, sportIcon } from '../lib/format';
import { loadIndex, loadAthlete } from '../lib/dataloader';
@@ -22,7 +23,7 @@
let error: string | null = null;
let drawerOpen = false;
type Tab = 'power' | 'records' | 'segments' | 'profile' | 'explore';
type Tab = 'power' | 'records' | 'segments' | 'profile' | 'explore' | 'nerd';
let activeTab: Tab = 'power';
let mounted = false;
let isOwner = false;
@@ -83,7 +84,7 @@
onMount(async () => {
isOwner = (window as any).__bincioMe === handle;
const TABS: Tab[] = ['power', 'records', 'segments', 'profile', 'explore'];
const TABS: Tab[] = ['power', 'records', 'segments', 'profile', 'explore', 'nerd'];
const rawTab = new URLSearchParams(window.location.search).get('tab');
const resolved = TABS.includes(rawTab as Tab) ? (rawTab as Tab) : 'power';
activeTab = (resolved === 'explore' && !isOwner) ? 'power' : resolved;
@@ -149,7 +150,8 @@
{ key: 'records', label: 'Records' },
{ key: 'segments', label: 'Segments' },
{ key: 'profile', label: 'Profile' },
{ key: 'explore', label: 'Explore', ownerOnly: true },
{ key: 'explore', label: 'Explore', ownerOnly: true },
{ key: 'nerd', label: 'Nerd Corner', ownerOnly: true },
];
$: TABS = ALL_TABS.filter(t => !t.ownerOnly || isOwner);
</script>
@@ -331,6 +333,13 @@
</div>
{/if}
<!-- Nerd Corner tab -->
{:else if activeTab === 'nerd'}
<div class="bg-zinc-900 rounded-xl p-4 border border-zinc-800">
<h3 class="text-sm font-medium text-zinc-400 uppercase tracking-wide mb-4">Year over year</h3>
<NerdCorner {activities} />
</div>
<!-- Explore tab -->
{:else if activeTab === 'explore'}
<div style="height: calc(100vh - 200px); margin: 0 -1rem -1.5rem;">