feat: add delete player functionality to admin panel

This commit is contained in:
2026-03-31 16:16:10 -07:00
parent 81f023317e
commit 222fb0bdc3
2 changed files with 130 additions and 9 deletions
+47 -9
View File
@@ -27,6 +27,7 @@ export default function AdminPlayersPage() {
const [mergeMode, setMergeMode] = useState(false)
const [selectedPlayers, setSelectedPlayers] = useState<number[]>([])
const [isMerging, setIsMerging] = useState(false)
const [deletingId, setDeletingId] = useState<number | null>(null)
useEffect(() => {
fetchPlayers()
@@ -122,6 +123,31 @@ export default function AdminPlayersPage() {
}
}
const handleDelete = async (playerId: number) => {
if (!confirm("Are you sure you want to delete this player? This action cannot be undone and the player must not have any match history.")) {
return
}
setDeletingId(playerId)
try {
const response = await fetch(`/api/admin/players/${playerId}`, {
method: "DELETE",
})
const data = await response.json()
if (data.success) {
setPlayers(players.filter(p => p.id !== playerId))
} else {
alert(`Error: ${data.error}`)
}
} catch (err: unknown) {
alert(`Error: ${err instanceof Error ? err.message : "Unknown error occurred"}`)
} finally {
setDeletingId(null)
}
}
const playerCount = players.length
return (
@@ -268,15 +294,27 @@ export default function AdminPlayersPage() {
View
</Link>
{!mergeMode && (
<button
onClick={(e) => {
e.stopPropagation()
handleEditClick(player)
}}
className="text-blue-600 hover:text-blue-900"
>
Edit
</button>
<>
<button
onClick={(e) => {
e.stopPropagation()
handleEditClick(player)
}}
className="text-blue-600 hover:text-blue-900"
>
Edit
</button>
<button
onClick={(e) => {
e.stopPropagation()
handleDelete(player.id)
}}
disabled={deletingId === player.id}
className="text-red-600 hover:text-red-900 disabled:opacity-50"
>
{deletingId === player.id ? "Deleting..." : "Delete"}
</button>
</>
)}
</div>
</td>