"use client";
import Link from "next/link";
import { useState } from "react";
type FavoriteButtonProps = {
slug: string;
initialFavorited: boolean;
initialCount: number;
canFavorite: boolean;
};
export function FavoriteButton({
slug,
initialFavorited,
initialCount,
canFavorite
}: FavoriteButtonProps) {
const [favorited, setFavorited] = useState(initialFavorited);
const [count, setCount] = useState(initialCount);
const [loading, setLoading] = useState(false);
async function handleToggle() {
if (loading) return;
setLoading(true);
try {
const res = await fetch(`/api/posts/${slug}/favorite`, {
method: favorited ? "DELETE" : "POST"
});
const data = await res.json().catch(() => ({}));
if (!res.ok) {
alert(data.error || "收藏操作失败");
return;
}
setFavorited(Boolean(data.isFavorited));
setCount(typeof data.favoriteCount === "number" ? data.favoriteCount : count);
} finally {
setLoading(false);
}
}
if (!canFavorite) {
return (
登录后收藏
);
}
return (
);
}