@@ -1,8 +1,9 @@
1 1 import { useEffect, useState } from 'react'
2 - import { searchCatalog } from '../api/search'
2 + import { searchCatalog, type SearchHit } from '../api/search'
3 3
4 4 export function useSearchResults(query: string) {
5 - const [results, setResults] = useState([])
5 + const [results, setResults] = useState<SearchHit[]>([])
6 6 const [loading, setLoading] = useState(false)
7 7 const [error, setError] = useState<string | null>(null)
8 8
@@ -10,18 +11,22 @@ export function useSearchResults(query: string) {
10 11 useEffect(() => {
11 12 if (!query.trim()) {
12 13 setResults([])
13 14 return
14 15 }
15 16
16 17 setLoading(true)
17 18 setError(null)
18 19
19 - searchCatalog(query)
20 + const timer = setTimeout(() => {
21 + searchCatalog(query)
20 22 .then((hits) => {
21 23 setResults(hits)
22 24 setLoading(false)
23 25 })
24 26 .catch((err) => {
25 27 setError(err.message ?? 'Search failed')
26 28 setLoading(false)
27 - })
29 + })
30 + }, 250)
28 31
29 - }, [])
32 + return () => clearTimeout(timer)
33 + }, [])
30 34
31 35 return { results, loading, error }
32 36 }