"use client" import { useFavorites, useAddToCart, useRemoveFromFavorites } from "@/lib/hooks" import { useState } from "react" import Image from "next/image" import Link from "next/link" import { Heart, ShoppingCart } from "lucide-react" import { Button } from "@/components/ui/button" import { Card } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Skeleton } from "@/components/ui/skeleton" import type { Product } from "@/lib/types/api" export default function FavoritesPage() { const [isHovered, setIsHovered] = useState(null) const { data: favorites, isLoading, isError } = useFavorites() const { mutate: removeFromFavorites } = useRemoveFromFavorites() const { mutate: addToCart } = useAddToCart() const t = { favorites: "Избранные", addToCart: "В корзину", emptyFavorites: "У вас пока нет избранных товаров", } if (isLoading) { return (

{t.favorites}

{Array.from({ length: 10 }).map((_, i) => ( ))}
) } if (isError || !favorites || favorites.length === 0) { return (

{t.favorites}

{t.emptyFavorites}

) } return (

{t.favorites}

{favorites.map((favorite) => ( removeFromFavorites(favorite.product_id)} onAddToCart={() => addToCart({ productId: favorite.product_id })} onHover={setIsHovered} isHovered={isHovered === favorite.product_id} translations={t} /> ))}
) } interface ProductCardProps { productId: number product?: Product onRemove: () => void onAddToCart: () => void onHover: (id: number | null) => void isHovered: boolean translations: { addToCart: string } } function ProductCard({ productId, product, onRemove, onAddToCart, onHover, isHovered, translations, }: ProductCardProps) { if (!product) return null return ( onHover(productId)} onMouseLeave={() => onHover(null)} >
{/* Labels */} {product.labels && product.labels.length > 0 && (
{product.labels.map((label) => ( {label.text} ))}
)} {/* Favorite Button */} {product.name}
{/* Product Info */}

{product.name}

{product.struct_price_text || `$${product.price}`}

{/* Add to Cart Button */} {isHovered && (
)}
) }