From 2a6d048b650168b4a7835484a91d48e40acee385 Mon Sep 17 00:00:00 2001 From: Bert Hausmans Date: Thu, 21 May 2026 07:06:37 +0200 Subject: [PATCH] feat(frontend): rewritten stats page with heatmap + progress + due --- packages/frontend/src/pages/Stats.tsx | 54 ++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/packages/frontend/src/pages/Stats.tsx b/packages/frontend/src/pages/Stats.tsx index 836f444..d865d4c 100644 --- a/packages/frontend/src/pages/Stats.tsx +++ b/packages/frontend/src/pages/Stats.tsx @@ -1,20 +1,54 @@ import { useEffect, useState } from 'react'; import { statsApi } from '../api/stats.js'; +import { Heatmap } from '../components/Heatmap.js'; +import { LessonProgressList, type LessonProgressRow } from '../components/LessonProgressList.js'; +import { DueOverviewCard, type DueOverview } from '../components/DueOverviewCard.js'; export function StatsPage() { const [heatmap, setHeatmap] = useState<{ day: string; sessions: number; attempts: number }[]>([]); - useEffect(() => { statsApi.heatmap(12).then(setHeatmap); }, []); + const [progress, setProgress] = useState([]); + const [due, setDue] = useState(null); + + useEffect(() => { + statsApi.heatmap(52).then(setHeatmap).catch(() => {}); + statsApi.lessonsProgress().then((r) => setProgress(r.rows)).catch(() => {}); + statsApi.due().then(setDue).catch(() => {}); + }, []); - const max = Math.max(1, ...heatmap.map((d) => d.attempts)); return ( -
-

Statistieken

-
- {heatmap.map((d) => ( -
- ))} -
+
+
+

Statistieken

+

Houd zicht op je voortgang en wat er te oefenen valt.

+
+ + {due && ( +
+

⏰ Te reviewen

+ +
+ )} + +
+

📊 Voortgang per les

+ +
+ +
+

🔥 Activiteit

+
+ +
+ minder + + + + + + meer +
+
+
); }