import { useState, useEffect } from "react"; import { X } from "lucide-react"; import { useLocation, Link } from "react-router-dom"; import axios from "axios"; const SearchPage = () => { const location = useLocation(); const queryParams = new URLSearchParams(location.search); const nameParam = queryParams.get("name") || ""; const initialSearchQuery = location.state?.query || nameParam || ""; const [products, setProducts] = useState([]); const [filteredProducts, setFilteredProducts] = useState([]); const [searchQuery, setSearchQuery] = useState(initialSearchQuery); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [priceRange, setPriceRange] = useState({ min: 0, max: 1000 }); const [isFilterOpen, setIsFilterOpen] = useState(false); useEffect(() => { fetchProducts(initialSearchQuery); }, [initialSearchQuery]); const fetchProducts = async (query) => { setLoading(true); setError(null); try { const response = await axios.get( `http://localhost:3030/api/search/getProduct`, { params: { name: query }, }, ); if (response.data.success) { const transformedProducts = response.data.data.map((product) => ({ id: product.ProductID, title: product.Name, description: product.Description || "", price: product.Price || 0, category: product.Category || "Uncategorized", condition: product.Condition || "Used", image: product.images, seller: product.SellerName || "Unknown Seller", isFavorite: false, })); setProducts(transformedProducts); setFilteredProducts(transformedProducts); } else { setError(response.data.message || "Failed to fetch products"); setProducts([]); setFilteredProducts([]); } } catch (err) { console.error("Error fetching products:", err); setError(err.response?.data?.message || "Error connecting to the server"); setProducts([]); setFilteredProducts([]); } finally { setLoading(false); } }; const toggleFavorite = (id, e) => { e.preventDefault(); setProducts((prev) => prev.map((product) => product.id === id ? { ...product, isFavorite: !product.isFavorite } : product, ), ); }; const filterProducts = () => { let result = products; result = result.filter( (product) => product.price >= priceRange.min && product.price <= priceRange.max, ); setFilteredProducts(result); }; const applyFilters = () => { filterProducts(); setIsFilterOpen(false); }; const resetFilters = () => { setPriceRange({ min: 0, max: 1000 }); setFilteredProducts(products); }; return (
{/* Filter sidebar */}

Filters

Price Range

setPriceRange((prev) => ({ ...prev, min: Number(e.target.value), })) } className="w-full p-2 border text-gray-700" /> setPriceRange((prev) => ({ ...prev, max: Number(e.target.value), })) } className="w-full p-2 border text-gray-700" />
{/* Main content */}

{filteredProducts.length} Results {searchQuery && ( {" "} for "{searchQuery}" )}

{filteredProducts.map((listing) => ( {listing.title}

{listing.title}

${Number(listing.price).toFixed(2)}

))}
); }; export default SearchPage;