import { BookmarkMinus, Bookmark, MessageSquare, Send, Share2, Star, X, Loader2, Copy, Layers, Sparkles, } from "lucide-react"; import { useState, useEffect } from "react"; import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, } from "~/components/ui/drawer"; import { Skeleton } from "~/components/ui/skeleton"; import { useServiceGetProductRating, useServiceGetComments, useServiceBookmarkProduct, useServiceDeleteBookmark, useServiceCheckBookmark, } from "~/utils/RequestHandler"; import { useToast } from "~/hooks/use-toast"; import { useRootData } from "~/hooks/use-root-data"; import { LoginRequiredDialog } from "../LoginRequiredDialog"; import { AddToSetDrawer } from "../sets"; import AIPromoteModal from "../AIPromoteModal"; export const ProductActions = ({ productId }: { productId: string }) => { const [isShareDrawerOpen, setIsShareDrawerOpen] = useState(false); const [isLoginModalOpen, setIsLoginModalOpen] = useState(false); const [isAddToSetDrawerOpen, setIsAddToSetDrawerOpen] = useState(false); const [isAITryOnModalOpen, setIsAITryOnModalOpen] = useState(false); const [showAIFeatureTooltip, setShowAIFeatureTooltip] = useState(false); // Show AI feature tooltip on first visit useEffect(() => { const hasSeenAIFeature = localStorage.getItem("hasSeenAITryOnFeature"); if (!hasSeenAIFeature) { setShowAIFeatureTooltip(true); } }, []); const handleDismissAITooltip = () => { setShowAIFeatureTooltip(false); localStorage.setItem("hasSeenAITryOnFeature", "true"); }; const handleOpenAIModal = () => { handleDismissAITooltip(); setIsAITryOnModalOpen(true); }; const [loginDialogMessage, setLoginDialogMessage] = useState( "برای افزودن محصول به علاقهمندیها ابتدا باید وارد حساب کاربری خود شوید." ); const { toast } = useToast(); const { user } = useRootData(); const { data: ratingData, isLoading: ratingLoading } = useServiceGetProductRating(productId || ""); const { data: commentsData } = useServiceGetComments(1, productId || ""); const { data: bookmarkData, isLoading: isCheckingBookmark } = useServiceCheckBookmark(productId || ""); const { mutate: bookmarkProduct, isPending: isBookmarking } = useServiceBookmarkProduct(); const { mutate: deleteBookmark, isPending: isDeletingBookmark } = useServiceDeleteBookmark(); const isBookmarked = bookmarkData?.bookmarked === true; const averageRating = ratingData?.averageRating || 0; const commentCount = commentsData?.count || 0; const handleBookmark = () => { // Check if user is logged in if (!user?.access_token) { setIsLoginModalOpen(true); return; } if (isBookmarked) { deleteBookmark(productId, { onSuccess: () => { toast({ title: "محصول از علاقهمندیها حذف شد", variant: "default", duration: 3000, }); }, onError: () => { toast({ title: "خطا", description: "عملیات با خطا مواجه شد. لطفا دوباره تلاش کنید.", variant: "destructive", duration: 3000, }); }, }); } else { bookmarkProduct(productId, { onSuccess: () => { toast({ title: "محصول به علاقهمندیها اضافه شد", variant: "default", duration: 3000, }); }, onError: () => { toast({ title: "خطا", description: "عملیات با خطا مواجه شد. لطفا دوباره تلاش کنید.", variant: "destructive", duration: 3000, }); }, }); } }; const handleAddToSet = () => { // Check if user is logged in if (!user?.access_token) { setLoginDialogMessage( "برای افزودن محصول به ست ابتدا باید وارد حساب کاربری خود شوید." ); setIsLoginModalOpen(true); return; } setIsAddToSetDrawerOpen(true); }; const handleShare = (platform: string) => { const url = window.location.href; let shareUrl = ""; if (platform === "telegram") { shareUrl = `https://t.me/share/url?url=${encodeURIComponent(url)}`; } else if (platform === "whatsapp") { shareUrl = `https://api.whatsapp.com/send?text=${encodeURIComponent(url)}`; } else if (platform === "copy") { navigator.clipboard.writeText(url); toast({ title: "لینک کپی شد", description: "لینک محصول در کلیپبورد کپی شد.", variant: "default", duration: 2000, }); setIsShareDrawerOpen(false); return; } if (shareUrl) { window.open(shareUrl, "_blank"); setIsShareDrawerOpen(false); } }; return ( <>
این محصول رو تو تن خودت ببین
{/* Arrow */}({commentCount})
{averageRating.toFixed(1)}
این محصول را با دوستان خود به اشتراک بگذارید