import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import type { UserSummary } from "../types"; import { fetchAdminJson, getAdminErrorMessage } from "../api"; type RoleAction = "make-admin" | "revoke-admin" | "make-super-admin"; type RoleActionsProps = { target: UserSummary; isSelf: boolean; isSuperAdmin: boolean; onUpdated: () => void; }; const actionLabels: Record = { "make-admin": "Grant Admin", "revoke-admin": "Revoke Admin", "make-super-admin": "Make Super Admin", }; const actionDescriptions: Record = { "make-admin": "Are you sure you want to promote this user to ADMIN?", "revoke-admin": "Are you sure you want to revoke admin privileges for this user?", "make-super-admin": "Are you sure you want to promote this user to SUPER_ADMIN?", }; const actionEndpoint: Record = { "make-admin": "make-admin", "revoke-admin": "revoke-admin", "make-super-admin": "make-super-admin", }; export default function RoleActions({ target, isSelf, isSuperAdmin, onUpdated }: RoleActionsProps) { const [action, setAction] = useState(null); const [error, setError] = useState(null); const [isWorking, setIsWorking] = useState(false); if (!isSuperAdmin) { return null; } const disabledDemote = isSelf && target.role === "SUPER_ADMIN"; const handleConfirm = async () => { if (!action) { return; } setIsWorking(true); setError(null); try { await fetchAdminJson( `admin/users/${target.user_id}/${actionEndpoint[action]}`, { method: "POST" }, ); onUpdated(); setAction(null); } catch (err) { const message = getAdminErrorMessage(err, "Role update failed."); setError(message); } finally { setIsWorking(false); } }; return (
!open && setAction(null)}> {action ? actionLabels[action] : "Confirm role change"} {action ? actionDescriptions[action] : ""} {error &&

{error}

}
); }