Initial commit
This commit is contained in:
47
src/hooks/useSearch.ts
Normal file
47
src/hooks/useSearch.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { useMemo, useState, useCallback } from 'react'
|
||||
import { createSearchEngine } from '../utils/searchEngine'
|
||||
import { sampleProducts, sampleCategories } from '../data'
|
||||
import { SearchResult } from '../types'
|
||||
|
||||
export function useSearch() {
|
||||
const [query, setQuery] = useState('')
|
||||
const [results, setResults] = useState<SearchResult[]>([])
|
||||
const [selectedResult, setSelectedResult] = useState<SearchResult | null>(null)
|
||||
|
||||
const searchEngine = useMemo(
|
||||
() => createSearchEngine(sampleProducts, sampleCategories),
|
||||
[]
|
||||
)
|
||||
|
||||
const handleSearch = useCallback(
|
||||
(searchQuery: string) => {
|
||||
setQuery(searchQuery)
|
||||
if (searchQuery.trim()) {
|
||||
const searchResults = searchEngine.search(searchQuery)
|
||||
setResults(searchResults)
|
||||
} else {
|
||||
setResults([])
|
||||
}
|
||||
},
|
||||
[searchEngine]
|
||||
)
|
||||
|
||||
const clearSearch = useCallback(() => {
|
||||
setQuery('')
|
||||
setResults([])
|
||||
setSelectedResult(null)
|
||||
}, [])
|
||||
|
||||
const selectResult = useCallback((result: SearchResult | null) => {
|
||||
setSelectedResult(result)
|
||||
}, [])
|
||||
|
||||
return {
|
||||
query,
|
||||
results,
|
||||
selectedResult,
|
||||
handleSearch,
|
||||
clearSearch,
|
||||
selectResult,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user