"use client"; import { ShieldCheck, UserRound } from "lucide-react"; import { useState } from "react"; type AdminUser = { id: string; name: string; email: string; role: "admin" | "member"; isCurrent: boolean }; export function AdminUsers({ initialUsers }: { initialUsers: AdminUser[] }) { const [users, setUsers] = useState(initialUsers); const [message, setMessage] = useState(""); const [pendingId, setPendingId] = useState(""); async function changeRole(user: AdminUser) { const role = user.role === "admin" ? "member" : "admin"; setPendingId(user.id); setMessage(""); try { const response = await fetch(`/api/admin/users/${user.id}`, { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ role }) }); const result = await response.json(); if (!response.ok) { setMessage(result.error); return; } setUsers(users.map((entry) => entry.id === user.id ? { ...entry, role } : entry)); setMessage(`${user.name} is now ${role === "admin" ? "an administrator" : "a member"}.`); } catch { setMessage("The role could not be changed. Try again."); } finally { setPendingId(""); } } return

Registered accounts

Administrators can edit every family and manage organization branding.

{users.map((user) =>
{user.role === "admin" ? : }

{user.name}{user.isCurrent && You}

{user.email}

{user.role}{!user.isCurrent && }
)}
{message &&

{message}

}
; }