Files
stripstream/src/components/admin/DeleteUserDialog.tsx

93 lines
2.5 KiB
TypeScript

"use client";
import { useState } from "react";
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
} from "@/components/ui/alert-dialog";
import { useToast } from "@/components/ui/use-toast";
import type { AdminUserData } from "@/lib/services/admin.service";
interface DeleteUserDialogProps {
user: AdminUserData;
open: boolean;
onOpenChange: (open: boolean) => void;
onSuccess: () => void;
}
export function DeleteUserDialog({
user,
open,
onOpenChange,
onSuccess,
}: DeleteUserDialogProps) {
const [isLoading, setIsLoading] = useState(false);
const { toast } = useToast();
const handleDelete = async () => {
setIsLoading(true);
try {
const response = await fetch(`/api/admin/users/${user.id}`, {
method: "DELETE",
});
if (!response.ok) {
const data = await response.json();
throw new Error(data.error || "Erreur lors de la suppression");
}
toast({
title: "Succès",
description: "L'utilisateur a été supprimé",
});
onSuccess();
} catch (error) {
toast({
variant: "destructive",
title: "Erreur",
description: error instanceof Error ? error.message : "Une erreur est survenue",
});
setIsLoading(false);
}
};
return (
<AlertDialog open={open} onOpenChange={onOpenChange}>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>Êtes-vous sûr?</AlertDialogTitle>
<AlertDialogDescription>
Vous allez supprimer l&apos;utilisateur <strong>{user.email}</strong>.
<br />
Cette action est irréversible et supprimera également :
<ul className="list-disc list-inside mt-2">
<li>Sa configuration Komga</li>
<li>Ses préférences</li>
<li>Ses favoris ({user._count?.favorites || 0})</li>
</ul>
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel disabled={isLoading}>Annuler</AlertDialogCancel>
<AlertDialogAction
onClick={handleDelete}
disabled={isLoading}
className="bg-destructive/90 backdrop-blur-md text-destructive-foreground hover:bg-destructive/80"
>
{isLoading ? "Suppression..." : "Supprimer"}
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
);
}