"use client"; import Image from "next/image"; import Link from "next/link"; import { Phone } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; import { productImage, productUrl, type Product, } from "@/lib/meshkee"; function getPageSize() { if (typeof window === "undefined") return 5; if (window.innerWidth < 620) return 1; if (window.innerWidth < 900) return 2; return 5; } export function ProductCarousel({ products }: { products: Product[] }) { const [pageSize, setPageSize] = useState(5); const [page, setPage] = useState(0); useEffect(() => { const update = () => { setPageSize(getPageSize()); setPage(0); }; update(); window.addEventListener("resize", update); return () => window.removeEventListener("resize", update); }, []); const pages = Math.max(1, products.length - pageSize + 1); const visibleProducts = useMemo(() => { const start = page; return products.slice(start, start + pageSize); }, [page, pageSize]); return (
{visibleProducts.map((product) => ( ))}
{pages > 1 && (
{Array.from({ length: pages }, (_, index) => (
)}
); }