"use client"; import { useEffect, useState } from "react"; import { Bookmark, Heart, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { useAuth } from "@/contexts/AuthContext"; import { api } from "@/lib/api"; import type * as Types from "@/lib/types"; import { cn, toPersianDigits } from "@/lib/utils"; type BlogPostActionsProps = { slug: string; initialLikes: number; initialSaves: number; }; export default function BlogPostActions({ slug, initialLikes, initialSaves, }: BlogPostActionsProps) { const { isAuthenticated } = useAuth(); const [loadingAction, setLoadingAction] = useState<"like" | "save" | null>(null); const [interaction, setInteraction] = useState({ liked: false, saved: false, likes_count: initialLikes, saves_count: initialSaves, comments_count: 0, }); useEffect(() => { let mounted = true; if (!isAuthenticated) return; api.getBlogInteraction(slug) .then((data) => { if (mounted) setInteraction(data); }) .catch(() => undefined); return () => { mounted = false; }; }, [isAuthenticated, slug]); const toggleLike = async () => { if (!isAuthenticated || loadingAction) return; setLoadingAction("like"); try { setInteraction(await api.toggleLike(slug)); } finally { setLoadingAction(null); } }; const toggleSave = async () => { if (!isAuthenticated || loadingAction) return; setLoadingAction("save"); try { setInteraction(await api.toggleSave(slug)); } finally { setLoadingAction(null); } }; return (
{!isAuthenticated ? ( برای پسندیدن یا ذخیره کردن وارد حساب کاربری شوید. ) : null}
); }