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 (
); });