Signed-off-by: OpenClaw Bot <ai-agent@topdoglabs.com>

This commit is contained in:
OpenClaw Bot 2026-02-23 18:07:57 -06:00
parent e46e92362e
commit 18e74106df

View File

@ -103,24 +103,39 @@ export function QuickSearch() {
useEffect(() => { useEffect(() => {
if (!open || query.length < 2) { if (!open || query.length < 2) {
setResults([]); setResults([]);
setLoading(false);
return; return;
} }
setLoading(true); setLoading(true);
setResults([]);
let cancelled = false;
const timer = setTimeout(async () => { const timer = setTimeout(async () => {
try { try {
const res = await fetch(`/api/search?q=${encodeURIComponent(query)}`); const res = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
const data = await res.json(); if (!res.ok) {
setResults(data.results || []); throw new Error(`Search request failed with status ${res.status}`);
}
const data = (await res.json()) as { results?: SearchResult[] };
if (!cancelled) {
setResults(Array.isArray(data.results) ? data.results : []);
}
} catch (err) { } catch (err) {
console.error("Search error:", err); console.error("Search error:", err);
if (!cancelled) {
setResults([]); setResults([]);
}
} finally { } finally {
if (!cancelled) {
setLoading(false); setLoading(false);
} }
}
}, 150); // 150ms debounce }, 150); // 150ms debounce
return () => clearTimeout(timer); return () => {
cancelled = true;
clearTimeout(timer);
};
}, [query, open]); }, [query, open]);
// Keyboard shortcut // Keyboard shortcut
@ -202,6 +217,8 @@ export function QuickSearch() {
{typeResults.slice(0, 5).map((result) => ( {typeResults.slice(0, 5).map((result) => (
<CommandItem <CommandItem
key={`${result.type}-${result.id}`} key={`${result.type}-${result.id}`}
value={`${result.title} ${result.snippet ?? ""} ${result.status ?? ""} ${typeLabels[result.type]}`}
keywords={[query]}
onSelect={() => handleResultSelect(result)} onSelect={() => handleResultSelect(result)}
> >
{result.type === "task" ? ( {result.type === "task" ? (