import { useState, useEffect } from 'react' import { useAuth } from '../context/AuthContext' import api from '../utils/api' /** * Persönliche Einstellungen (Anzeige/Name, Kontostatus, Passwort). */ function AccountSettingsPage() { const { user, checkAuth } = useAuth() const [name, setName] = useState('') const [savingProfile, setSavingProfile] = useState(false) const [newPw1, setNewPw1] = useState('') const [newPw2, setNewPw2] = useState('') const [savingPw, setSavingPw] = useState(false) const [resendingVerify, setResendingVerify] = useState(false) const [message, setMessage] = useState('') const [error, setError] = useState('') useEffect(() => { setName(typeof user?.name === 'string' ? user.name : '') }, [user]) /** API: boolean true / Legacy: fehlt oder false → als „nicht verifiziert“ behandeln */ const emailExplicitlyVerified = user?.email_verified === true || user?.email_verified === 't' || user?.email_verified === 1 || user?.email_verified === 'true' const showOk = (text) => { setMessage(text) setError('') setTimeout(() => setMessage(''), 5000) } const showErr = (text) => { setError(text) setMessage('') } const handleSaveName = async (e) => { e.preventDefault() if (!user?.id) return const trimmed = (name || '').trim() if (trimmed.length < 2) { showErr('Name sollte mindestens 2 Zeichen haben.') return } setSavingProfile(true) try { await api.updateProfile(user.id, { name: trimmed }) await checkAuth() showOk('Profilname gespeichert.') } catch (err) { showErr(err.message || 'Speichern fehlgeschlagen.') } finally { setSavingProfile(false) } } const handleResendVerification = async () => { const em = user?.email if (!em) return setResendingVerify(true) try { await api.resendVerification(em) showOk('Falls diese Adresse einen unbestätigten Account hat: E-Mail ist unterwegs — Postfach prüfen.') } catch (err) { showErr(err.message || 'Konnte keine E-Mail senden.') } finally { setResendingVerify(false) } } const handleChangePassword = async (e) => { e.preventDefault() if (newPw1.length < 4) { showErr('Neues Passwort: mindestens 4 Zeichen.') return } if (newPw1 !== newPw2) { showErr('Die Passwörter stimmen nicht überein.') return } setSavingPw(true) try { await api.changePassword(newPw1) setNewPw1('') setNewPw2('') showOk('Passwort aktualisiert.') } catch (err) { showErr(err.message || 'Passwort konnte nicht geändert werden.') } finally { setSavingPw(false) } } return (
Konto & Sicherheit
{message && (Wähle ein neues Passwort (mindestens 4 Zeichen, wie beim Login gewohnt empfehlen wir längere Passwörter).