feat: rank change arrow (↑/↓) in dashboard stats tile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ronny
2026-04-12 15:56:59 +02:00
parent 9e1a982d37
commit 7e05df0e92
2 changed files with 38 additions and 1 deletions
+20 -1
View File
@@ -49,6 +49,21 @@ export default function DashboardPage(_props: Props) {
const { hero, stats, nudges } = data;
const lastRank = parseInt(localStorage.getItem('tippspiel_last_rank') || '0');
const rankDiff = lastRank > 0 && stats.rank !== null ? lastRank - stats.rank : 0;
// Streak break detection via localStorage
const STREAK_KEY = 'tippspiel_last_streak';
const lastStreak = parseInt(localStorage.getItem(STREAK_KEY) || '0');
const streakBroken = lastStreak >= 3 && stats.streak === 0;
// Keep stored streak up to date when active
useEffect(() => {
if (stats.streak > 0) {
localStorage.setItem(STREAK_KEY, String(stats.streak));
}
}, [stats.streak]);
return (
<div className={styles.dashboard}>
{/* Hero Card */}
@@ -140,7 +155,11 @@ export default function DashboardPage(_props: Props) {
{/* Stats Row */}
<div className={styles.statsRow}>
<div className={`card ${styles.statTile}`}>
<span className={styles.statValue}>{stats.rank !== null ? stats.rank : '—'}</span>
<span className={styles.statValue}>
{stats.rank !== null ? stats.rank : '—'}
{rankDiff > 0 && <span className={styles.rankUp}>{rankDiff}</span>}
{rankDiff < 0 && <span className={styles.rankDown}>{Math.abs(rankDiff)}</span>}
</span>
<span className={styles.statLabel}>Dein Rang</span>
</div>
<div className={`card ${styles.statTile}`}>