← back to ClawCoder
src/components/user-badge.tsx
48 lines
'use client'
import { useEffect, useState } from 'react'
import { useRouter } from 'next/navigation'
interface UserInfo {
authenticated: boolean
username?: string
}
export function UserBadge() {
const [user, setUser] = useState<UserInfo | null>(null)
const router = useRouter()
useEffect(() => {
fetch('/api/auth/me')
.then(r => r.json())
.then(data => setUser(data))
.catch(() => setUser(null))
}, [])
if (!user?.authenticated) return null
async function handleLogout() {
await fetch('/api/auth', { method: 'DELETE' })
router.push('/login')
}
const initial = user.username?.charAt(0).toUpperCase() ?? '?'
return (
<div className="flex items-center gap-2">
<div className="flex h-8 w-8 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white">
{initial}
</div>
<span className="hidden text-sm font-medium text-slate-700 sm:inline">
{user.username}
</span>
<button
onClick={handleLogout}
className="ml-1 rounded px-2 py-1 text-xs text-slate-500 transition-colors hover:bg-slate-100 hover:text-slate-700"
>
Logout
</button>
</div>
)
}