diff --git a/packages/frontend/src/pages/Admin.tsx b/packages/frontend/src/pages/Admin.tsx deleted file mode 100644 index 7b09a2c..0000000 --- a/packages/frontend/src/pages/Admin.tsx +++ /dev/null @@ -1,54 +0,0 @@ -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 AdminPage() { - const { tree, refresh, loading } = useLessons(); - const [newRoot, setNewRoot] = useState(''); - - useEffect(() => { refresh(); }, [refresh]); - - async function addRoot() { - if (!newRoot.trim()) return; - await lessonsApi.create({ name: newRoot.trim(), parentId: null }); - setNewRoot(''); - await refresh(); - } - - return ( -
-
-

Lessen beheren

-

- Maak een hiërarchie van lessen en sublessen. Klik op een les voor de kaarten. -

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

Laden…

- ) : tree.length === 0 ? ( -
- Nog geen lessen. Voeg er hierboven een toe. -
- ) : ( - - )} -
-
- ); -} diff --git a/packages/frontend/src/pages/AdminLesson.tsx b/packages/frontend/src/pages/AdminLesson.tsx deleted file mode 100644 index 103153e..0000000 --- a/packages/frontend/src/pages/AdminLesson.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { useEffect, useState } from 'react'; -import { Link, useParams } from 'react-router-dom'; -import type { Card, LessonTreeNode } from '@flashcard/shared'; -import { cardsApi } from '../api/cards.js'; -import { lessonsApi } from '../api/lessons.js'; -import { adminLessonsApi } from '../api/admin-lessons.js'; -import { useAuth } from '../stores/authStore.js'; -import { useLessons } from '../stores/lessonsStore.js'; -import { CardTable } from '../components/CardTable.js'; -import { ImportDialog } from '../components/ImportDialog.js'; -import { ApiClientError } from '../api/client.js'; - -function findLesson(tree: LessonTreeNode[], id: number): LessonTreeNode | null { - for (const n of tree) { - if (n.id === id) return n; - const found = findLesson(n.children, id); - if (found) return found; - } - return null; -} - -export function AdminLessonPage() { - const { id } = useParams(); - const lessonId = Number(id); - const user = useAuth((s) => s.user); - const { tree, refresh: refreshTree } = useLessons(); - const [cards, setCards] = useState([]); - const [showImport, setShowImport] = useState(false); - const [busy, setBusy] = useState(false); - - const node = findLesson(tree, lessonId); - const isOwner = node?.ownerId === user?.id; - const visibility = node?.visibility ?? 'private'; - const isCurated = node?.isCurated ?? false; - - async function refresh() { - try { setCards(await cardsApi.list(lessonId)); } - catch (e) { if (e instanceof ApiClientError && e.status === 403) setCards([]); else throw e; } - } - useEffect(() => { refresh(); refreshTree(); }, [lessonId]); - - async function toggleVisibility() { - setBusy(true); - try { - const next = visibility === 'shared' ? 'private' : 'shared'; - await lessonsApi.setVisibility(lessonId, next); - await refreshTree(); - } finally { setBusy(false); } - } - - async function toggleCurated() { - if (!user || user.role !== 'sysadmin') return; - setBusy(true); - try { - await adminLessonsApi.setCurated(lessonId, !isCurated); - await refreshTree(); - } finally { setBusy(false); } - } - - async function forkThis() { - setBusy(true); - try { - const fork = await lessonsApi.fork(lessonId); - await refreshTree(); - window.location.href = `/admin/lessons/${fork.id}`; - } finally { setBusy(false); } - } - - async function unsubscribeThis() { - setBusy(true); - try { - await lessonsApi.unsubscribe(lessonId); - await refreshTree(); - window.location.href = '/admin'; - } finally { setBusy(false); } - } - - return ( -
- - ← Terug naar lessen - - -
-
-

- Kaartenbeheer - {!isOwner && 📥 Geabonneerd} - {isCurated && ⭐ Curated} -

-

{cards.length} {cards.length === 1 ? 'kaart' : 'kaarten'} in deze les

-
-
- {isOwner ? ( - <> - - {user?.role === 'sysadmin' && visibility === 'shared' && ( - - )} - - 📤 Exporteer - Start oefenen → - - ) : ( - <> - - - Start oefenen → - - )} -
-
- - {!isOwner && ( -
- Je bent geabonneerd op deze les en kunt kaarten alleen bekijken. Klik op 🍴 Fork voor een eigen, bewerkbare kopie. -
- )} - -
- -
- - {showImport && setShowImport(false)} onDone={refresh} />} -
- ); -}