'use client'; import { useState } from 'react'; import PortalLayout from '@/app/layout-portal'; import { useAuth } from '@/lib/auth'; import { useNotify } from '@/lib/notifications'; import { useRouter } from 'next/navigation'; import { User, Lock, LogOut, Save, Loader2, AlertTriangle, CheckCircle, Eye, EyeOff, } from 'lucide-react'; export default function ProfilePage() { const { user, logout, isAdmin } = useAuth(); const { notify } = useNotify(); const router = useRouter(); const [currentPass, setCurrentPass] = useState(''); const [newPass, setNewPass] = useState(''); const [confirmPass, setConfirmPass] = useState(''); const [showPasswords, setShowPasswords] = useState(false); const [busy, setBusy] = useState(false); const [error, setError] = useState(''); async function handleChangePassword(e: React.FormEvent) { e.preventDefault(); setError(''); if (!currentPass || !newPass || !confirmPass) { setError('Vul alle wachtwoordvelden in'); return; } if (newPass.length < 6) { setError('Nieuw wachtwoord moet minimaal 6 tekens zijn'); return; } if (newPass !== confirmPass) { setError('Nieuwe wachtwoorden komen niet overeen'); return; } setBusy(true); try { const res = await fetch('/api/auth/password', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ address: user?.address, currentPassword: currentPass, newPassword: newPass }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); throw new Error(data.error || 'Wachtwoord wijzigen mislukt'); } notify({ type: 'success', title: 'Wachtwoord gewijzigd' }); setCurrentPass(''); setNewPass(''); setConfirmPass(''); } catch (err: unknown) { setError(err instanceof Error ? err.message : String(err)); } finally { setBusy(false); } } async function handleLogout() { await logout(); notify({ type: 'info', title: 'Uitgelogd' }); router.push('/login'); } return ( {/* ── Header ── */}

Profiel

Je accountinstellingen

{/* ── Account info ── */}
{user?.address?.charAt(2).toUpperCase() || '?'}
{user?.address ? `${user.address.slice(0, 6)}...${user.address.slice(-4)}` : 'Onbekend'}
{isAdmin ? 'Admin' : 'Gebruiker'}
Rol {isAdmin ? 'Administrator' : 'User'}
Sessie Actief
{/* ── Wachtwoord wijzigen ── */}

Wachtwoord wijzigen

{error && (
{error}
)}
setCurrentPass(e.target.value)} type={showPasswords ? 'text' : 'password'} autoComplete="current-password" className="w-full rounded-lg bg-surface-900 border border-surface-700 px-3 py-2 text-sm text-surface-200 placeholder:text-surface-500 focus:outline-none focus:border-brand-500 transition-colors" />
setNewPass(e.target.value)} type={showPasswords ? 'text' : 'password'} autoComplete="new-password" placeholder="Minimaal 6 tekens" className="w-full rounded-lg bg-surface-900 border border-surface-700 px-3 py-2 pr-10 text-sm text-surface-200 placeholder:text-surface-500 focus:outline-none focus:border-brand-500 transition-colors" />
setConfirmPass(e.target.value)} type={showPasswords ? 'text' : 'password'} autoComplete="new-password" className="w-full rounded-lg bg-surface-900 border border-surface-700 px-3 py-2 text-sm text-surface-200 placeholder:text-surface-500 focus:outline-none focus:border-brand-500 transition-colors" />
{/* Toggle show passwords */}
); }