"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { ChevronRight } from "lucide-react"; import ProductCard from "@/features/home/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 }); useEffect(() => { if (!isLoading && productsData) { const hasProducts = productsData.data && productsData.data.length > 0; setShouldRender(hasProducts); } }, [isLoading, productsData]); if (!isLoading && (!productsData?.data || productsData.data.length === 0)) { return null; } const handleTitleClick = () => { router.push(`/${locale}/collections/${collection.id}`); }; if (isLoading) { return (
{Array.from({ length: 4 }).map((_, i) => ( ))}
); } if (isError) { return null; } const displayProducts = productsData?.data.slice(0, 10) || []; return (

{collection.name}

{displayProducts.map((product) => { const allImages = product.media ?.map( (media) => media.images_800x800 || media.images_720x720 || media.images_400x400 || media.thumbnail ) .filter(Boolean) || ["/placeholder-product.jpg"]; const formattedPrice = product.price_amount ? `${parseFloat(product.price_amount).toFixed(2)} TMT` : "Price not available"; return ( ); })}
); }