import { useState, useEffect } from "react"; import { useLocation } from "wouter"; import { useQuery } from "@tanstack/react-query"; import { productsApi, categoriesApi } from "@/lib/api"; import Header from "@/components/layout/header"; import ProductCard from "@/components/product/product-card"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { ArrowLeft } from "lucide-react"; import { LoadingSpinner } from "@/components/ui/spinner"; export default function SearchResults() { const [, setLocation] = useLocation(); const [searchQuery, setSearchQuery] = useState(""); const [selectedCategory, setSelectedCategory] = useState(""); // Get search parameters from URL useEffect(() => { const urlParams = new URLSearchParams(window.location.search); const query = urlParams.get('q') || ''; const category = urlParams.get('category') || ''; setSearchQuery(query); setSelectedCategory(category); }, []); // Update URL when search parameters change useEffect(() => { const params = new URLSearchParams(); if (searchQuery) params.set('q', searchQuery); if (selectedCategory) params.set('category', selectedCategory); const newUrl = `/search${params.toString() ? '?' + params.toString() : ''}`; window.history.replaceState({}, '', newUrl); }, [searchQuery, selectedCategory]); const { data: categories = [], isLoading: categoriesLoading } = useQuery({ queryKey: ['/api/categories'], queryFn: () => categoriesApi.getAll(), }); const { data: searchResults = [], isLoading: searchLoading } = useQuery({ queryKey: ['/api/products', { search: searchQuery, category: selectedCategory }], queryFn: () => productsApi.getAll({ ...(searchQuery && { search: searchQuery }), ...(selectedCategory && { category: selectedCategory }) }), enabled: !!(searchQuery || selectedCategory), }); const getPageTitle = () => { if (searchQuery && selectedCategory) { const categoryName = categories.find((c: any) => c.id === selectedCategory)?.name || 'Category'; return `"${searchQuery}" in ${categoryName}`; } else if (searchQuery) { return `"${searchQuery}"`; } else if (selectedCategory) { const categoryName = categories.find((c: any) => c.id === selectedCategory)?.name || 'Category'; return categoryName; } return 'Search Results'; }; return (
{/* Back Navigation */} {/* Search Header */}

Search Results for {getPageTitle()}

{!searchLoading && (

{searchResults.length} {searchResults.length === 1 ? 'product' : 'products'} found

)}
{/* Search Results */}
{searchLoading ? (
{[...Array(8)].map((_, i) => (
))}
) : searchResults.length > 0 ? (
{searchResults.map((product: any) => ( ))}
) : (searchQuery || selectedCategory) ? (

No products found

Try adjusting your search terms or browse all products

) : (

Search for products

Use the search bar above or select a category to find products

)}
); }