"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { Star } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; export function CollectionStarButton({ collectionId, initialStarred = false, starCount, }: { collectionId: string; initialStarred?: boolean; starCount: number; }) { const tCommon = useTranslations("common"); const [starred, setStarred] = useState(initialStarred); const [count, setCount] = useState(starCount); const [loading, setLoading] = useState(false); async function toggle(e: React.MouseEvent) { e.preventDefault(); e.stopPropagation(); const next = !starred; setStarred(next); setCount((c) => (next ? c + 1 : c - 1)); setLoading(true); try { const res = await fetch(`/api/v1/collections/${collectionId}/favorite`, { method: next ? "POST" : "DELETE", }); if (!res.ok) throw new Error(); } catch { setStarred(!next); setCount((c) => (next ? c - 1 : c + 1)); toast.error(tCommon("updateFailed")); } finally { setLoading(false); } } return ( ); }