@@ -4,10 +4,11 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
44import { Badge } from "@hypr/ui/components/ui/badge" ;
55import { cn } from "@hypr/utils" ;
66
7+ import { useSearchEngine } from "../../../../contexts/search/engine" ;
78import {
89 type GroupedSearchResults ,
910 type SearchEntityType ,
10- useSearch ,
11+ groupSearchResults ,
1112} from "../../../../contexts/search/ui" ;
1213import { 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 ( ) ;
0 commit comments