"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { Heart } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; export function FavoriteButton({ recipeId, initialFavorited = false, }: { recipeId: string; initialFavorited?: boolean; }) { const tCommon = useTranslations("common"); const tSocial = useTranslations("social"); const [favorited, setFavorited] = useState(initialFavorited); const [loading, setLoading] = useState(false); async function toggle() { const next = !favorited; setFavorited(next); setLoading(true); try { const res = await fetch(`/api/v1/recipes/${recipeId}/favorite`, { method: next ? "POST" : "DELETE", }); if (!res.ok) throw new Error(); } catch { setFavorited(!next); toast.error(tCommon("updateFailed")); } finally { setLoading(false); } } return ( } /> {favorited ? "Saved" : "Save"} ); }