'use client' import { useSearchParams } from 'next/navigation' import { useEffect, useMemo, useState } from 'react' import { EmptyState } from '@/components/empty-state' import { SearchFilters } from '@/components/search/search-filters' import { useSearch } from '@/components/search/use-search' import { WebsitesListWithSort } from '@/components/websites-list-with-sort' import { getRoute } from '@/lib/routes' /** * Search results component for displaying and filtering websites * * @returns React component */ export function SearchResults() { const searchParams = useSearchParams() const query = searchParams.get('q') || '' const { results, loading, error } = useSearch(query) const [selectedCategories, setSelectedCategories] = useState([]) // Filter results based on selected categories const filteredResults = useMemo(() => { if (selectedCategories.length === 0) { return results } return results.filter(result => selectedCategories.includes(result.category)) }, [results, selectedCategories]) // Get available categories from current results const availableCategories = useMemo(() => { return [...new Set(results.map(result => result.category))] }, [results]) useEffect(() => { if (query) { document.title = `Search Results for "${query}" | llms.txt hub` } else { document.title = 'Search | llms.txt hub' } }, [query]) if (error) { return (

Something went wrong

{error}

) } if (loading) { return (
) } if (!query) { return ( ) } if (results.length === 0) { return (

Nothing Found

We couldn't find any results for "{query}". Try using different keywords or check your spelling.

Search suggestions:

  • Check for typos in your search terms
  • Try more general keywords (e.g., "AI" instead of "artificial intelligence")
  • Browse by category using the sidebar
  • Submit your own llms.txt if you have one
) } return (
{/* Results Summary and Filters */}

{filteredResults.length} result{filteredResults.length !== 1 ? 's' : ''} for "{query}"

{selectedCategories.length > 0 ? ( <> Filtered by {selectedCategories.length} categor {selectedCategories.length !== 1 ? 'ies' : 'y'} {results.length !== filteredResults.length && ( <> • {results.length} total results )} ) : ( <> Found in {availableCategories.length} categor {availableCategories.length !== 1 ? 'ies' : 'y'} )}

{/* Category Breakdown for unfiltered results */} {results.length > 3 && selectedCategories.length === 0 && (

Results by category:

{Object.entries( results.reduce>((acc, result) => { acc[result.category] = (acc[result.category] || 0) + 1 return acc }, {}) ).map(([category, count]) => ( ))}
)} {/* No results after filtering */} {filteredResults.length === 0 && selectedCategories.length > 0 ? (

No results match your filters

Try removing some category filters or search with different terms.

) : ( /* Results */ )}
) }