const ProductDetailMin = React.memo((props) => { const { productInfo, config, onAddToCart, } = props; const { useMemo, useCallback } = React; if (!productInfo?.product) return null; const { product, promotions = [] } = productInfo; const user_lang = config?.lang || 'vi'; const displayName = useMemo(() => user_lang === 'vi' ? product.Short_Description_VI : (product.Short_Description_EN || product.description), [user_lang, product.Short_Description_VI, product.Short_Description_EN, product.description] ); const minPromotionPrice = useMemo(() => { if (!promotions) return null; const allDiscountedItems = promotions.flatMap(promo => promo.conditions?.items?.filter(item => item.promotion_price < item.normal_price && item.id === product.item_code ) || [] ); return allDiscountedItems.length > 0 ? Math.min(...allDiscountedItems.map(item => item.promotion_price)) : null; }, [promotions, product.item_code]); const discountPercentage = useMemo(() => { if (minPromotionPrice && product.price > 0) { return Math.round(((product.price - minPromotionPrice) / product.price) * 100); } return null; }, [minPromotionPrice, product.price]); const mainImage = useMemo(() => (product?.images && product?.images?.length > 0) ? product.images[0] : null, [product?.images]); const hasStock = useMemo(() => parseInt(product.stock_on_hand, 10) > 0, [product.stock_on_hand]); const handleAddToCart = useCallback((e) => { e.preventDefault(); e.stopPropagation(); if (onAddToCart) { onAddToCart(product.item_code, 1); } }, [onAddToCart, product.item_code]); return (
{/* Phần header của card */}
{discountPercentage && (
-{discountPercentage}%
)} {displayName} { e.target.onerror = null; e.target.src='/static/libs/images/no_image.jpg'; }} />
{/* Phần tags bên phải */} {product.is_new &&
} {product.is_hot &&
} {!hasStock &&
}
{/* Phần body của card */}
{displayName}
{promotions.length > 0 && (
p.name?.vi).join(', ')}> {promotions.slice(0, 1).map((promo) => (
{user_lang === 'vi' ? promo.name?.vi : promo.name?.en}
))}
)}
{minPromotionPrice && minPromotionPrice < product.price ? ( <> {commonFunc.formatNumber(parseInt(minPromotionPrice))}đ {commonFunc.formatNumber(parseInt(product.price))}đ ) : ( {commonFunc.formatNumber(parseInt(product.price))}đ )}
); });