"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Search, Package } from "lucide-react"; import { apiRequest } from "@/lib/api"; interface Product { _id: string; name: string; description?: string; unitType: string; pricing: Array<{ minQuantity: number; pricePerUnit: number }>; image?: string; } interface ProductSelectorProps { selectedProducts: string[]; onSelectionChange: (productIds: string[]) => void; } export default function ProductSelector({ selectedProducts, onSelectionChange }: ProductSelectorProps) { const [products, setProducts] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(""); useEffect(() => { const fetchProducts = async () => { try { const fetchedProducts = await apiRequest('/products/for-selection', 'GET'); setProducts(fetchedProducts); } catch (error) { console.error('Error fetching products:', error); } finally { setLoading(false); } }; fetchProducts(); }, []); const filteredProducts = products.filter(product => product.name.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleProductToggle = (productId: string) => { const newSelection = selectedProducts.includes(productId) ? selectedProducts.filter(id => id !== productId) : [...selectedProducts, productId]; onSelectionChange(newSelection); }; const getMinPrice = (product: Product) => { if (!product.pricing || product.pricing.length === 0) return 0; const minTier = product.pricing.reduce((min, tier) => tier.pricePerUnit < min.pricePerUnit ? tier : min ); return minTier.pricePerUnit; }; if (loading) { return
Loading products...
; } return (
setSearchTerm(e.target.value)} className="pl-10" />
{filteredProducts.length === 0 ? (
{searchTerm ? "No products found" : "No products available"}
) : ( filteredProducts.map((product) => (
handleProductToggle(product._id)} />

{product.name}

{product.description && (

{product.description}

)}
£{getMinPrice(product).toFixed(2)}
)) )}
{selectedProducts.length > 0 && (
{selectedProducts.length} product(s) selected
)}
); }