import { Star, ArrowUpRight, Loader2 } from "lucide-react"; import { cls } from "@/lib/utils"; import ImageOrVideo from "@/components/ui/ImageOrVideo"; import useProducts from "@/hooks/useProducts"; import type { ProductVariant } from "./ProductDetailCard"; type CatalogProduct = { id: string; name: string; price: string; imageSrc: string; category?: string; rating?: number; reviewCount?: string; onClick?: () => void; }; type ProductCatalogProps = { products?: CatalogProduct[]; searchValue?: string; onSearchChange?: (value: string) => void; filters?: ProductVariant[]; }; const ProductCatalog = ({ products: productsProp, searchValue = "", onSearchChange, filters }: ProductCatalogProps) => { const { products: fetchedProducts, isLoading } = useProducts(); const products: CatalogProduct[] = productsProp && productsProp.length > 0 ? productsProp : fetchedProducts.map((p) => ({ id: p.id, name: p.name, price: p.price, imageSrc: p.imageSrc, category: p.brand, rating: p.rating, reviewCount: p.reviewCount, onClick: p.onProductClick, })); if (isLoading && (!productsProp || productsProp.length === 0)) { return (
); } return (
{(onSearchChange || (filters && filters.length > 0)) && (
{onSearchChange && (
onSearchChange(e.target.value)} placeholder="Search products..." className="card px-4 h-9 w-full md:w-80 text-base text-foreground bg-transparent rounded focus:outline-none" />
)} {filters && filters.length > 0 && (
{filters.map((filter) => (
))}
)}
)} {products.length === 0 ? (

No products found

) : (
{products.map((product) => ( ))}
)}
); }; export default ProductCatalog; export type { CatalogProduct };