"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; 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, } from "@/components/ui/alert-dialog"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; export function DeleteRecipeButton({ recipeId }: { recipeId: string }) { const t = useTranslations("recipe"); const tCommon = useTranslations("common"); const [open, setOpen] = useState(false); 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(t("deleted")); router.push("/recipes"); } catch (err) { toast.error(err instanceof Error ? err.message : t("deleteFailed")); setDeleting(false); } } return ( <> setOpen(true)} > } /> {tCommon("delete")} 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"} ); }