'use client'; import { search, SearchResult } from '@/lib/api'; import { useState, useCallback } from 'react'; import { Search, Loader2, FileText, Tag } from 'lucide-react'; import Link from 'next/link'; export default function SearchPage() { const [query, setQuery] = useState(''); const [results, setResults] = useState([]); const [loading, setLoading] = useState(false); const [queryTime, setQueryTime] = useState(null); const [error, setError] = useState(''); const handleSearch = useCallback(async (e: React.FormEvent) => { e.preventDefault(); if (!query.trim()) return; setLoading(true); setError(''); try { const res = await search(query.trim()); setResults(res.results); setQueryTime(res.query_time_ms); } catch (err) { setError('Search failed. Is the API running?'); } finally { setLoading(false); } }, [query]); return (

Search

setQuery(e.target.value)} placeholder="Search your knowledge base..." className="w-full pl-10 pr-4 py-2.5 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-brain-500 focus:border-transparent" />
{error && (
{error}
)} {queryTime !== null && results.length > 0 && (

{results.length} results in {queryTime}ms

)}
{results.map((result) => (

{result.title}

{(result.score * 100).toFixed(0)}%
{result.highlight && (

)}

{result.path} {result.tags.slice(0, 4).map((tag) => ( {tag} ))}
))} {results.length === 0 && queryTime !== null && !loading && (

No results found for "{query}"

)}
); }