Skip to content

Commit eb481a1

Browse files
refactor(search): extract search logic and group results function
1 parent de8a1d0 commit eb481a1

File tree

2 files changed

+31
-5
lines changed
  • apps/desktop/src

2 files changed

+31
-5
lines changed

apps/desktop/src/components/main/body/advanced-search/view.tsx

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
44
import { Badge } from "@hypr/ui/components/ui/badge";
55
import { cn } from "@hypr/utils";
66

7+
import { useSearchEngine } from "../../../../contexts/search/engine";
78
import {
89
type GroupedSearchResults,
910
type SearchEntityType,
10-
useSearch,
11+
groupSearchResults,
1112
} from "../../../../contexts/search/ui";
1213
import { ResultItem } from "./result-item";
1314

@@ -28,16 +29,41 @@ export function AdvancedSearchView({
2829
setSelectedTypes,
2930
onResultClick,
3031
}: AdvancedSearchViewProps) {
31-
const { query, setQuery, results, isSearching, isIndexing } = useSearch();
32-
const [localQuery, setLocalQuery] = useState(query);
32+
const { search, isIndexing } = useSearchEngine();
33+
const [localQuery, setLocalQuery] = useState("");
34+
const [query, setQuery] = useState("");
35+
const [results, setResults] = useState<GroupedSearchResults | null>(null);
36+
const [isSearching, setIsSearching] = useState(false);
3337
const inputRef = useRef<HTMLInputElement>(null);
3438

3539
useEffect(() => {
3640
const timer = setTimeout(() => {
3741
setQuery(localQuery);
3842
}, 50);
3943
return () => clearTimeout(timer);
40-
}, [localQuery, setQuery]);
44+
}, [localQuery]);
45+
46+
useEffect(() => {
47+
if (query.trim().length < 1) {
48+
setResults(null);
49+
setIsSearching(false);
50+
return;
51+
}
52+
53+
let cancelled = false;
54+
setIsSearching(true);
55+
56+
search(query).then((hits) => {
57+
if (!cancelled) {
58+
setResults(groupSearchResults(hits, query.trim()));
59+
setIsSearching(false);
60+
}
61+
});
62+
63+
return () => {
64+
cancelled = true;
65+
};
66+
}, [query, search]);
4167

4268
useEffect(() => {
4369
inputRef.current?.focus();

apps/desktop/src/contexts/search/ui.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ function toGroup(type: SearchEntityType, results: SearchResult[]): SearchGroup {
114114
};
115115
}
116116

117-
function groupSearchResults(
117+
export function groupSearchResults(
118118
hits: SearchHit[],
119119
query: string,
120120
): GroupedSearchResults {

0 commit comments

Comments
 (0)