'use client'; import { useState, useEffect, FormEvent } from 'react'; type Profile = { id: number; username: string; email: string; firstName: string | null; lastName: string | null; }; export default function ProfileClient() { const [profile, setProfile] = useState(null); const [form, setForm] = useState({ firstName: '', lastName: '', email: '' }); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [success, setSuccess] = useState(false); const [error, setError] = useState(''); useEffect(() => { fetch('/api/profile') .then((r) => r.json()) .then((data: Profile) => { setProfile(data); setForm({ firstName: data.firstName ?? '', lastName: data.lastName ?? '', email: data.email, }); }) .finally(() => setLoading(false)); }, []); async function handleSubmit(e: FormEvent) { e.preventDefault(); setError(''); setSuccess(false); setSaving(true); try { const res = await fetch('/api/profile', { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ firstName: form.firstName || null, lastName: form.lastName || null, email: form.email, }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); setError(data.message ?? 'Kunde inte spara ändringar'); } else { setSuccess(true); } } catch { setError('Något gick fel'); } finally { setSaving(false); } } const inputStyle: React.CSSProperties = { width: '100%', padding: '10px 12px', borderRadius: 6, border: '1px solid #ddd', fontSize: '1rem', boxSizing: 'border-box', }; const labelStyle: React.CSSProperties = { display: 'block', marginBottom: 6, fontWeight: 500, fontSize: '0.9rem', color: '#444', }; if (loading) { return

Laddar profil...

; } return (
{/* Initialer/avatar */}
{profile?.username?.charAt(0).toUpperCase()}
{profile?.username}
{profile?.email}
setForm((f) => ({ ...f, firstName: e.target.value }))} style={inputStyle} maxLength={100} autoComplete="given-name" />
setForm((f) => ({ ...f, lastName: e.target.value }))} style={inputStyle} maxLength={100} autoComplete="family-name" />
setForm((f) => ({ ...f, email: e.target.value }))} required style={inputStyle} autoComplete="email" />

Användarnamn kan inte ändras

{error &&

{error}

} {success &&

Ändringarna sparades!

}
); }