Initial commit

This commit is contained in:
2025-12-09 16:07:11 +08:00
commit 547a79ddfd
49 changed files with 7752 additions and 0 deletions

47
src/hooks/useSearch.ts Normal file
View 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,
}
}