From 5754bec679f55ac7ca1f6742b3796e3880d6040c Mon Sep 17 00:00:00 2001 From: Bert Hausmans Date: Thu, 21 May 2026 07:12:27 +0200 Subject: [PATCH] feat(frontend): lessons page with filter (replaces Admin.tsx) --- packages/frontend/src/pages/Lessons.tsx | 61 +++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 packages/frontend/src/pages/Lessons.tsx diff --git a/packages/frontend/src/pages/Lessons.tsx b/packages/frontend/src/pages/Lessons.tsx new file mode 100644 index 0000000..bd86ace --- /dev/null +++ b/packages/frontend/src/pages/Lessons.tsx @@ -0,0 +1,61 @@ +import { useEffect, useState } from 'react'; +import { lessonsApi } from '../api/lessons.js'; +import { useLessons } from '../stores/lessonsStore.js'; +import { LessonTree } from '../components/LessonTree.js'; + +export function LessonsPage() { + const { tree, refresh, loading } = useLessons(); + const [newRoot, setNewRoot] = useState(''); + const [filter, setFilter] = useState(''); + + useEffect(() => { refresh(); }, [refresh]); + + async function addRoot() { + if (!newRoot.trim()) return; + await lessonsApi.create({ name: newRoot.trim(), parentId: null }); + setNewRoot(''); + await refresh(); + } + + return ( +
+
+

Lessen

+

+ Maak een hiërarchie van lessen en sublessen. Sleep aan ⋮⋮ om te herordenen. Klik op een les voor details. +

+
+ +
+ setNewRoot(e.target.value)} + onKeyDown={(e) => e.key === 'Enter' && addRoot()} + /> + +
+ +
+ setFilter(e.target.value)} + /> + {loading ? ( +

Laden…

+ ) : tree.length === 0 ? ( +
+ Nog geen lessen. Voeg er hierboven een toe. +
+ ) : ( + + )} +
+
+ ); +}