From d4826c8df49c3f97dc988721e8ec248fec0e6080 Mon Sep 17 00:00:00 2001 From: Lars Date: Sat, 21 Mar 2026 19:02:25 +0100 Subject: [PATCH] feat: add training type badges to activity list (v9d Phase 1b complete) - Load training categories in ActivityPage - Display colored badge next to activity name in list view - Badge shows category icon + name with category color - Only shown if training_category is set - Completes v9d Phase 1b Ready for testing and production deployment. Co-Authored-By: Claude Opus 4.6 --- frontend/src/pages/ActivityPage.jsx | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/ActivityPage.jsx b/frontend/src/pages/ActivityPage.jsx index 05730cc..dad77b4 100644 --- a/frontend/src/pages/ActivityPage.jsx +++ b/frontend/src/pages/ActivityPage.jsx @@ -180,6 +180,7 @@ export default function ActivityPage() { const [saved, setSaved] = useState(false) const [error, setError] = useState(null) const [activityUsage, setActivityUsage] = useState(null) // Phase 4: Usage badge + const [categories, setCategories] = useState({}) // v9d: Training categories const load = async () => { const [e, s] = await Promise.all([api.listActivity(), api.activityStats()]) @@ -196,6 +197,7 @@ export default function ActivityPage() { useEffect(()=>{ load() loadUsage() + api.getTrainingCategories().then(setCategories).catch(err => console.error('Failed to load categories:', err)) },[]) const handleSave = async () => { @@ -351,7 +353,26 @@ export default function ActivityPage() {
-
{e.activity_type}
+
+
{e.activity_type}
+ {e.training_category && categories[e.training_category] && ( +
+ {categories[e.training_category].icon} + {categories[e.training_category].name_de} +
+ )} +
{dayjs(e.date).format('dd, DD. MMMM YYYY')} {e.start_time && e.start_time.length>10 && ` ยท ${e.start_time.slice(11,16)}`}