import { Project } from 'lib/project' import { CustomIcon } from './CustomIcon' import { useEffect, useRef, useState } from 'react' import { useHotkeys } from 'react-hotkeys-hook' import Fuse from 'fuse.js' export function useProjectSearch(projects: Project[]) { const [query, setQuery] = useState('') const [searchResults, setSearchResults] = useState(projects) const fuse = new Fuse(projects, { keys: [{ name: 'name', weight: 0.7 }], includeScore: true, }) useEffect(() => { const results = fuse.search(query).map((result) => result.item) setSearchResults(query.length > 0 ? results : projects) }, [query, projects]) return { searchResults, query, setQuery, } } export function ProjectSearchBar({ setQuery, }: { setQuery: (query: string) => void }) { const inputRef = useRef(null) useHotkeys( 'Ctrl+.', (event) => { event.preventDefault() inputRef.current?.focus() }, { enableOnFormTags: true } ) return (
setQuery(event.target.value)} className="w-full text-sm bg-transparent focus:outline-none selection:bg-primary/20 dark:selection:bg-primary/40 dark:focus:outline-none" placeholder="Search projects (^.)" autoCapitalize="off" autoComplete="off" autoCorrect="off" spellCheck="false" />
) }