import type { Metadata } from 'next'; import Link from 'next/link'; import { erfordereBenutzer } from '@/lib/auth/rechte'; import { inhalte } from '@/lib/inhalte'; import { alsKartenstand, staendeVon, uebersicht } from '@/lib/repos/karten'; import { fach, fachNamen, heutigerStapel } from '@/lib/lernen/sm2'; import { alsDatumText, heute } from '@/lib/zeit'; import { erfordereModul } from '@/lib/module/pruefen'; export const metadata: Metadata = { title: 'Merkkarten' }; export const dynamic = 'force-dynamic'; const STAPELGROESSE = 20; export default async function KartenSeite() { const benutzer = await erfordereBenutzer(); erfordereModul('karten'); const alle = inhalte(); const heuteDatum = heute(); const istAzubi = benutzer.rolle === 'azubi'; const staende = istAzubi ? staendeVon(benutzer.id) : new Map(); const stand = istAzubi ? uebersicht(benutzer.id, alle.karten.map((k) => k.id), heuteDatum) : { gesamt: alle.karten.length, gelernt: 0, faellig: 0, nieGelernt: alle.karten.length, jeFach: { 1: alle.karten.length, 2: 0, 3: 0, 4: 0, 5: 0 } }; const faelligeAlle = heutigerStapel( alle.karten.map((karte) => ({ karteId: karte.id, faelligAm: staende.get(karte.id)?.faelligAm ?? null, block: karte.block, })), heuteDatum, 9999, ); const jeBlock = alle.bloecke.map((block) => { const desBlocks = alle.karten.filter((k) => k.block === block.id); const faellig = faelligeAlle.filter((f) => f.block === block.id).length; const gelernt = desBlocks.filter((k) => { const zeile = staende.get(k.id); return zeile ? fach(alsKartenstand(zeile)) >= 4 : false; }).length; return { block, gesamt: desBlocks.length, faellig, gelernt }; }); if (!istAzubi) { return (

Merkkarten

{alle.karten.length} Karten aus {alle.handouts.length} Handouts. Gelernt wird nur vom Azubi – du siehst hier, was es gibt.

{jeBlock.map(({ block, gesamt }) => (

{block.titel}

{gesamt} {gesamt === 1 ? 'Karte' : 'Karten'}

))}
); } const heuteStapel = Math.min(stand.faellig, STAPELGROESSE); return (

Merkkarten

{stand.gesamt} Karten insgesamt · {stand.gelernt} sitzen · {stand.nieGelernt} noch nie gelernt

Heute fällig

{stand.faellig === 0 ? (

Nichts. Alle Karten liegen weiter hinten – morgen ist wieder etwas dran.

) : ( <>

{heuteStapel}{' '} {heuteStapel === 1 ? 'Karte' : 'Karten'} {stand.faellig > STAPELGROESSE ? ( von {stand.faellig} fälligen – der Rest kommt morgen ) : null}

Lernen starten
)}

Nach Themenblock

Vor einer Lernzielkontrolle gezielt üben – hier sind auch Karten dabei, die eigentlich erst später dran wären.

{jeBlock.map(({ block, gesamt, faellig, gelernt }) => (

{block.titel}

{gesamt} Karten · {gelernt} sitzen · {faellig} heute fällig

0 ? '' : 'knopf-zweit'}`} > {faellig > 0 ? `${Math.min(faellig, STAPELGROESSE)} lernen` : 'Trotzdem üben'}
))}

Wie fest die Karten sitzen

{stand.gesamt > stand.nieGelernt ? (

Als Nächstes fällig

) : null}
); }