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(() => {
|
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" ? (
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user