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