import Link from "next/link"; import React from "react"; import { useFavorites } from "@/contexts/FavoritesContext"; interface CatalogProductCardProps { image: string; discount: string; price: string; oldPrice: string; title: string; brand: string; articleNumber?: string; brandName?: string; artId?: string; productId?: string; offerKey?: string; currency?: string; priceElement?: React.ReactNode; // Элемент для отображения цены (например, скелетон) onAddToCart?: (e: React.MouseEvent) => void | Promise; } const CatalogProductCard: React.FC = ({ image, discount, price, oldPrice, title, brand, articleNumber, brandName, artId, productId, offerKey, currency = 'RUB', priceElement, onAddToCart, }) => { const { addToFavorites, removeFromFavorites, isFavorite, favorites } = useFavorites(); // Обрабатываем пустое изображение - используем SVG-заглушку вместо мокап-фотки const displayImage = image || 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEwIiBoZWlnaHQ9IjE5MCIgdmlld0JveD0iMCAwIDIxMCAxOTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyMTAiIGhlaWdodD0iMTkwIiBmaWxsPSIjRjNGNEY2Ii8+CjxwYXRoIGQ9Ik04NSA5NUw5NSA4NUwxMjUgMTE1TDE0MCA5NUwxNjUgMTIwSDE2NVY5MEg0NVY5MEw4NSA5NVoiIGZpbGw9IiNEMUQ1REIiLz4KPGNpcmNsZSBjeD0iNzUiIGN5PSI3NSIgcj0iMTAiIGZpbGw9IiNEMUQ1REIiLz4KPHRleHQgeD0iMTA1IiB5PSIxNTAiIGZvbnQtZmFtaWx5PSJBcmlhbCIgZm9udC1zaXplPSIxMiIgZmlsbD0iIzlDQTNBRiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Tm8gaW1hZ2U8L3RleHQ+Cjwvc3ZnPgo='; // Создаем ссылку на card с параметрами товара const cardUrl = articleNumber && brandName ? `/card?article=${encodeURIComponent(articleNumber)}&brand=${encodeURIComponent(brandName)}${artId ? `&artId=${artId}` : ''}` : '/card'; // Fallback на card если нет данных // Проверяем, есть ли товар в избранном const isItemFavorite = isFavorite(productId, offerKey, articleNumber, brandName || brand); // Обработчик клика по сердечку const handleFavoriteClick = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); // Извлекаем цену как число const numericPrice = parseFloat(price.replace(/[^\d.,]/g, '').replace(',', '.')) || 0; if (isItemFavorite) { // Находим товар в избранном по правильному ID const favoriteItem = favorites.find((fav: any) => { // Проверяем по разным комбинациям идентификаторов if (productId && fav.productId === productId) return true; if (offerKey && fav.offerKey === offerKey) return true; if (fav.article === articleNumber && fav.brand === (brandName || brand)) return true; return false; }); if (favoriteItem) { removeFromFavorites(favoriteItem.id); } } else { // Добавляем в избранное addToFavorites({ productId, offerKey, name: title, brand: brandName || brand, article: articleNumber || '', price: numericPrice, currency, image }); } }; // Обработчик клика по кнопке "Купить" const handleBuyClick = (e: React.MouseEvent) => { if (onAddToCart) { onAddToCart(e); } else { // Fallback - переходим на страницу товара window.location.href = cardUrl; } }; return (
{/* Делаем картинку и контент кликабельными для перехода на card */}
{discount}
{priceElement ? (
{priceElement}
) : (
{price}
)}
{oldPrice}
{title}
{brand}
{/* Обновляем кнопку купить */}
Купить
); }; export default CatalogProductCard;