"use client"; import { useEffect, useState } from "react"; import { api } from "@/lib/api"; import { cn } from "@/lib/utils"; import { formatDate } from "@/lib/utils"; import { ShieldCheck, ShieldOff, UserPlus } from "lucide-react"; export default function UsersPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [promotePubkey, setPromotePubkey] = useState(""); const [promoting, setPromoting] = useState(false); const loadUsers = async () => { try { const data = await api.getUsers(); setUsers(data); } catch (err: any) { setError(err.message); } finally { setLoading(false); } }; useEffect(() => { loadUsers(); }, []); const handlePromote = async () => { if (!promotePubkey.trim()) return; setPromoting(true); setError(""); try { await api.promoteUser(promotePubkey); setPromotePubkey(""); await loadUsers(); } catch (err: any) { setError(err.message); } finally { setPromoting(false); } }; const handleDemote = async (pubkey: string) => { if (!confirm("Demote this user to regular user?")) return; setError(""); try { await api.demoteUser(pubkey); await loadUsers(); } catch (err: any) { setError(err.message); } }; const handlePromoteUser = async (pubkey: string) => { setError(""); try { await api.promoteUser(pubkey); await loadUsers(); } catch (err: any) { setError(err.message); } }; if (loading) { return (
Loading users...
); } return (

User Management

{error &&

{error}

}

Promote User

setPromotePubkey(e.target.value)} className="bg-surface-container-highest text-on-surface rounded-lg px-4 py-3 w-full focus:outline-none focus:ring-1 focus:ring-primary/40 flex-1" />
{users.length === 0 ? (

No users found.

) : ( users.map((user) => (

{user.pubkey?.slice(0, 12)}...{user.pubkey?.slice(-8)}

{user.role} {user.createdAt && ( Joined {formatDate(user.createdAt)} )}
{user.role !== "ADMIN" && (
{user.role !== "MODERATOR" && ( )} {user.role === "MODERATOR" && ( )}
)}
)) )}
); }