use-command-palette-results.ts 906 B

12345678910111213141516171819202122232425
  1. import useDebounce from '@/shared/hooks/use-debounce'
  2. import useCommandPaletteSources from './use-command-palette-sources'
  3. import { useEffect, useState } from 'react'
  4. import { CommandPaletteSearchResult } from '../types'
  5. const useCommandPaletteResults = (query: string) => {
  6. const debouncedQuery = useDebounce(query, 25)
  7. const sources = useCommandPaletteSources()
  8. const [results, setResults] = useState<CommandPaletteSearchResult[]>([])
  9. useEffect(() => {
  10. if (debouncedQuery) {
  11. const res = sources.map(source => source.search(debouncedQuery))
  12. setResults(res.flat().sort((a, b) => b.score - a.score))
  13. } else {
  14. const res = sources
  15. .filter(s => 'defaults' in s)
  16. .map(source => source.defaults!())
  17. setResults(res.flat().sort((a, b) => b.score - a.score))
  18. }
  19. }, [debouncedQuery, sources])
  20. return results
  21. }
  22. export default useCommandPaletteResults