import { useState, type FormEvent } from 'react' import { api } from '../api' import { run, useStore } from '../store' import { Feld, Karte, Knopf } from '../components/Bausteine' import { Avatar } from '../components/Avatar' export function Konto() { const user = useStore((s) => s.user) const note = useStore((s) => s.note) const [aktuell, setAktuell] = useState('') const [neu, setNeu] = useState('') const [wieder, setWieder] = useState('') const [wartet, setWartet] = useState(false) const zuKurz = neu.length > 0 && neu.length < 8 const ungleich = wieder.length > 0 && neu !== wieder async function wechseln(e: FormEvent) { e.preventDefault() // Die Wiederholung prüft nur diese Seite — der Dienst kennt sie nicht. // Deshalb hier ein eigener Satz statt einer Anfrage, die nichts // bewirken kann. if (neu !== wieder) { note('fehler', 'Die beiden neuen Passwörter stimmen nicht überein.') return } setWartet(true) const ok = await run( () => api.changePassword(aktuell, neu), 'Passwort geändert. Alle anderen Anmeldungen wurden beendet.', ) setWartet(false) if (ok) { setAktuell('') setNeu('') setWieder('') } } // Der Discord-Name steht nur daneben, wenn er vom Anzeigenamen abweicht — // sonst stuende dort zweimal dasselbe. const herkunft = user?.discordName && user.discordName !== user.username ? `über Discord angemeldet — dort „${user.discordName}"` : 'über Discord angemeldet' return (

{user?.username ?? '—'}

{user?.discord ? herkunft : 'mit Passwort angemeldet'}

{user?.discord && (

Dieses Konto hat kein Passwort — es kommt ausschließlich über Discord herein. Das Formular unten wirkt nur für Konten mit Passwort.

)}
setAktuell(e.target.value)} /> setNeu(e.target.value)} hinweis={zuKurz ? 'Mindestens 8 Zeichen.' : undefined} /> setWieder(e.target.value)} hinweis={ungleich ? 'Stimmt nicht mit dem neuen Passwort überein.' : undefined} />

Ein Wechsel beendet alle anderen Sitzungen. Diese hier bleibt bestehen.

) }