import { useEffect, useState } from 'react'; /** * Eigenes Konto: E-Mail hinterlegen und Benachrichtigungen schalten. * * Die Adresse ist zugleich der Weg, ein vergessenes Passwort zurückzusetzen — * das steht auch so dabei, damit niemand sie für reine Werbepost hält. */ interface Me { username: string | null; display_name: string | null; email: string | null; notify_jobs: boolean; mail_ready: boolean; role: string; } export default function KontoApp() { const [me, setMe] = useState(null); const [email, setEmail] = useState(''); const [msg, setMsg] = useState<{ t: string; ok: boolean } | null>(null); const [laeuft, setLaeuft] = useState(false); useEffect(() => { fetch('/api/me').then((r) => r.json()).then((m) => { setMe(m); setEmail(m.email || ''); }).catch(() => {}); }, []); const sagen = (t: string, ok: boolean) => { setMsg({ t, ok }); setTimeout(() => setMsg(null), 5000); }; const patch = async (body: unknown, erfolg: string) => { setLaeuft(true); const r = await fetch('/api/me', { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }).then((x) => x.json()).catch(() => ({ error: 'Netzwerkfehler.' })); setLaeuft(false); if (r.error) { sagen(r.error, false); return false; } sagen(erfolg, true); const m = await fetch('/api/me').then((x) => x.json()).catch(() => null); if (m) setMe(m); return true; }; if (!me) return

Einen Moment …

; return (
Anmeldung
Benutzername {me.username}
{me.display_name && (
Angezeigt als {me.display_name}
)}
Passwort Neues Passwort setzen
E-Mail-Adresse

Damit kannst du dir ein neues Passwort schicken lassen, wenn du deines vergessen hast. Ohne hinterlegte Adresse geht das nicht — dann muss ein Admin ran.

setEmail(e.target.value)} placeholder="du@beispiel.de" aria-label="E-Mail-Adresse" autoComplete="email" />
{!me.mail_ready && (

Auf diesem Server ist noch kein E-Mail-Versand eingerichtet — die Adresse wird zwar gespeichert, es kommt aber noch nichts an. Ein Admin richtet das unter Admin → E-Mail ein.

)}
Benachrichtigungen

Aufträge aus einer privaten Sitzung lösen bewusst nie eine Mail aus — die sollen ja gerade keine Spur hinterlassen.

{msg &&

{msg.t}

}
); }