"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { Trash2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import { toast } from "sonner"; export function DeleteRecipeButton({ recipeId }: { recipeId: string }) { const [deleting, setDeleting] = useState(false); const router = useRouter(); async function handleDelete() { setDeleting(true); try { const res = await fetch(`/api/v1/recipes/${recipeId}`, { method: "DELETE" }); if (!res.ok) { const data = await res.json() as { error?: string }; throw new Error(data.error ?? "Delete failed"); } toast.success("Recipe deleted"); router.push("/recipes"); } catch (err) { toast.error(err instanceof Error ? err.message : "Delete failed"); setDeleting(false); } } return ( Delete recipe? This action cannot be undone. The recipe and all its data will be permanently deleted. Cancel { void handleDelete(); }} disabled={deleting} className="bg-destructive text-destructive-foreground hover:bg-destructive/90" > {deleting ? "Deleting…" : "Delete"} ); }