Files
3d-guiding-demo/src/hooks/useSearch.ts
2025-12-09 16:07:11 +08:00

48 lines
1.2 KiB
TypeScript

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,
}
}