Files
planer/src/app/(app)/layout.tsx
T
Florian WildeandClaude Opus 5 a4a889fcb8 feat(aufgaben): Inbox, Aufgabenliste, Ideen und Projekte
Die Schnellerfassung braucht ein Feld und einen Knopf; wer beim Erfassen
erst ein Formular ausfüllen muss, erfasst nichts. Der Fokus bleibt danach
im Feld, damit mehrere Sachen hintereinander hineingehen.

Die Filter der Aufgabenliste stehen in der Adresse, nicht im Zustand der
Komponente — so lässt sich eine gefilterte Liste als Lesezeichen ablegen,
und der Zurück-Knopf tut, was er soll.

Die Startseite zeigt jetzt, was überfällig, heute oder morgen fällig ist,
statt nur die Bereiche aufzuzählen.

Für die Auswahlfelder bewusst das native <select>: es bedient sich auf
dem Handy mit dem Systemdialog und ist ohne Zusatzcode tastaturbedienbar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 16:17:44 +02:00

42 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Kopfleiste } from '@/components/kopfleiste'
import { zaehlstaende } from '@/server/abfragen/aufgaben'
import { INSTANZ_NAME } from '@/lib/instanz'
import { versionAnzeige } from '@/lib/version'
import { angefragterPfad, verlangeAnmeldung } from '@/server/berechtigung'
import { aktuelleInstanz } from '@/server/instanz'
/**
* Alles unterhalb von (app) setzt eine Anmeldung voraus. Der Riegel sitzt
* hier im Layout und zusaetzlich in jeder Server Action – nicht nur in der
* Oberflaeche.
*/
export default async function AngemeldetesLayout({
children,
}: {
children: React.ReactNode
}) {
// Der Pfad kommt aus der Kopfzeile des Proxys, damit es nach der
// Anmeldung dort weitergeht, wo man hinwollte.
const benutzer = await verlangeAnmeldung(await angefragterPfad())
const instanz = aktuelleInstanz()
const zahlen = await zaehlstaende()
return (
<div className="flex min-h-dvh flex-col">
<Kopfleiste
name={benutzer.name ?? benutzer.email}
email={benutzer.email}
rolle={benutzer.rolle}
instanzName={INSTANZ_NAME[instanz]}
inbox={zahlen.inbox}
/>
<main className="mx-auto w-full max-w-5xl flex-1 px-4 py-8">{children}</main>
<footer className="text-gedaempft-vordergrund border-rand border-t px-4 py-4 text-center text-xs">
Planer {versionAnzeige()} · {INSTANZ_NAME[instanz]}
</footer>
</div>
)
}