Signed-off-by: OpenClaw Bot <ai-agent@topdoglabs.com>
This commit is contained in:
parent
e46e92362e
commit
18e74106df
@ -103,24 +103,39 @@ export function QuickSearch() {
|
||||
useEffect(() => {
|
||||
if (!open || query.length < 2) {
|
||||
setResults([]);
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
setLoading(true);
|
||||
setResults([]);
|
||||
let cancelled = false;
|
||||
const timer = setTimeout(async () => {
|
||||
try {
|
||||
const res = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
|
||||
const data = await res.json();
|
||||
setResults(data.results || []);
|
||||
if (!res.ok) {
|
||||
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) {
|
||||
console.error("Search error:", err);
|
||||
if (!cancelled) {
|
||||
setResults([]);
|
||||
}
|
||||
} finally {
|
||||
if (!cancelled) {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
}, 150); // 150ms debounce
|
||||
|
||||
return () => clearTimeout(timer);
|
||||
return () => {
|
||||
cancelled = true;
|
||||
clearTimeout(timer);
|
||||
};
|
||||
}, [query, open]);
|
||||
|
||||
// Keyboard shortcut
|
||||
@ -202,6 +217,8 @@ export function QuickSearch() {
|
||||
{typeResults.slice(0, 5).map((result) => (
|
||||
<CommandItem
|
||||
key={`${result.type}-${result.id}`}
|
||||
value={`${result.title} ${result.snippet ?? ""} ${result.status ?? ""} ${typeLabels[result.type]}`}
|
||||
keywords={[query]}
|
||||
onSelect={() => handleResultSelect(result)}
|
||||
>
|
||||
{result.type === "task" ? (
|
||||
|
||||
Loading…
Reference in New Issue
Block a user