"use client" import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { ChevronRight } from "lucide-react" import ProductCard from "@/components/ProductCard" import { Skeleton } from "@/components/ui/skeleton" import { useCollectionProducts } from "@/lib/hooks" import type { Collection } from "@/lib/types/api" type Props = { collection: Collection locale: string } export default function CollectionSection({ collection, locale }: Props) { const router = useRouter() const [shouldRender, setShouldRender] = useState(true) const { data: productsData, isLoading, isError } = useCollectionProducts(collection.id, { enabled: shouldRender }) // Determine if section should render based on products useEffect(() => { if (!isLoading && productsData) { const hasProducts = productsData.data && productsData.data.length > 0 setShouldRender(hasProducts) } }, [isLoading, productsData]) // Don't render if no products after loading if (!isLoading && (!productsData?.data || productsData.data.length === 0)) { return null } const handleTitleClick = () => { router.push(`/${locale}/collections/${collection.id}`) } // Show skeleton while loading if (isLoading) { return (
{Array.from({ length: 4 }).map((_, i) => ( ))}
) } // Show error state if (isError) { return null // Silently skip errored collections } // Slice to show only first 4 products const displayProducts = productsData?.data.slice(0, 4) || [] return (

{collection.name}

{displayProducts.map((product) => { // Extract first media image or use placeholder const firstImage = product.media?.[0]?.images_800x800 || product.media?.[0]?.images_720x720 || product.media?.[0]?.thumbnail || "/placeholder-product.jpg" // Format price const formattedPrice = product.price_amount ? `${parseFloat(product.price_amount).toFixed(2)} TMT` : "Price not available" return ( ) })}
) }