diff --git a/app/admin/page.tsx b/app/admin/page.tsx index 54be5c9..59689f2 100644 --- a/app/admin/page.tsx +++ b/app/admin/page.tsx @@ -72,6 +72,8 @@ export default function AdminPage() { const [currentPassword, setCurrentPassword] = useState(''); const [changeNewPassword, setChangeNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); + const [forceDelete, setForceDelete] = useState(false); + const [showForceModal, setShowForceModal] = useState(false); useEffect(() => { if (status === 'loading') return; @@ -231,10 +233,41 @@ export default function AdminPage() { const handleDeleteUser = async () => { if (!selectedUser) return; - await fetch(`/api/users/${selectedUser.id}`, { method: 'DELETE' }); - setDialogOpen(false); - setSelectedUser(null); - fetchHours(); + const res = await fetch(`/api/users/${selectedUser.id}`, { + method: 'DELETE', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ force: forceDelete }), + }); + if (res.ok) { + setDialogOpen(false); + setSelectedUser(null); + fetchHours(); + toast.success('Utilisateur supprimé'); + } else if (res.status === 400) { + setDialogOpen(false); + setShowForceModal(true); + } else { + const data = await res.json(); + toast.error(data.error || 'Erreur lors de la suppression'); + } + }; + + const handleForceDelete = async () => { + if (!selectedUser) return; + const res = await fetch(`/api/users/${selectedUser.id}`, { + method: 'DELETE', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ force: true }), + }); + if (res.ok) { + setShowForceModal(false); + setSelectedUser(null); + fetchHours(); + toast.success('Utilisateur supprimé'); + } else { + const data = await res.json(); + toast.error(data.error || 'Erreur lors de la suppression'); + } }; const handleChangePassword = async (e: React.FormEvent) => { @@ -370,7 +403,7 @@ export default function AdminPage() { Valider @@ -580,6 +623,24 @@ export default function AdminPage() { )} + {selectedUser && showForceModal && ( + + + + Confirmation de suppression forcée + + + Cette action supprimera l'utilisateur sans tenir compte de ses heures. Êtes-vous sûr ? + + + + + + + + )}