import React from "react"; import { useCart } from "@/contexts/CartContext"; import { useFavorites } from "@/contexts/FavoritesContext"; import toast from "react-hot-toast"; interface BestPriceItemProps { image: string; discount: string; price: string; oldPrice: string; title: string; brand: string; article?: string; productId?: string; onAddToCart?: (e: React.MouseEvent) => void; } const BestPriceItem: React.FC = ({ image, discount, price, oldPrice, title, brand, article, productId, onAddToCart, }) => { const { addItem } = useCart(); const { addToFavorites, removeFromFavorites, isFavorite, favorites } = useFavorites(); // Проверяем, есть ли товар в избранном const isItemFavorite = isFavorite(productId, undefined, article, brand); // Функция для парсинга цены из строки const parsePrice = (priceStr: string): number => { const cleanPrice = priceStr.replace(/[^\d.,]/g, '').replace(',', '.'); return parseFloat(cleanPrice) || 0; }; // Обработчик добавления в корзину const handleAddToCart = async (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); // Если передан кастомный обработчик, используем его if (onAddToCart) { onAddToCart(e); return; } try { const numericPrice = parsePrice(price); if (numericPrice <= 0) { toast.error('Цена товара не найдена'); return; } // Добавляем товар в корзину const result = await addItem({ productId: productId, name: title, description: `${brand} - ${title}`, brand: brand, article: article, price: numericPrice, currency: 'RUB', quantity: 1, image: image, supplier: 'Protek', deliveryTime: '1 день', isExternal: false }); if (result.success) { // Показываем успешный тоастер toast.success(
Товар добавлен в корзину!
{`${brand} - ${title}`}
, { duration: 3000, } ); } else { // Показываем ошибку toast.error(result.error || 'Ошибка при добавлении товара в корзину'); } } catch (error) { console.error('Ошибка добавления в корзину:', error); toast.error('Ошибка при добавлении товара в корзину'); } }; // Обработчик клика по иконке избранного const handleFavoriteClick = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); if (isItemFavorite) { // Находим товар в избранном и удаляем const favoriteItem = favorites.find((fav: any) => { if (productId && fav.productId === productId) return true; if (fav.article === article && fav.brand === brand) return true; return false; }); if (favoriteItem) { removeFromFavorites(favoriteItem.id); toast.success('Товар удален из избранного'); } } else { // Добавляем в избранное const numericPrice = parsePrice(price); addToFavorites({ productId, name: title, brand: brand, article: article || '', price: numericPrice, currency: 'RUB', image: image }); toast.success('Товар добавлен в избранное'); } }; return (
{title}
{discount}
{price}
{oldPrice}
{title}
); }; export default BestPriceItem;