MCPcopy Create free account
hub / github.com/TryCatchLearn/Overflow / SearchInput

Function SearchInput

webapp/src/components/nav/SearchInput.tsx:11–85  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

9import {Spinner} from "@heroui/spinner";
10
11export default function SearchInput() {
12 const [query, setQuery] = useState('');
13 const [loading, setLoading] = useState(false);
14 const [results, setResults] = useState<Question[] | null>(null);
15 const [showDropdown, setShowDropdown] = useState(false);
16 const timeoutRef = useRef<NodeJS.Timeout | null>(null);
17
18 useEffect(() => {
19 if (timeoutRef.current) clearTimeout(timeoutRef.current);
20
21 if (!query) {
22 // eslint-disable-next-line react-hooks/set-state-in-effect
23 setResults(null);
24 setShowDropdown(false);
25 return;
26 }
27
28 timeoutRef.current = setTimeout(async () => {
29 setLoading(true);
30 const {data: questions} = await searchQuestions(query);
31 setResults(questions);
32 setLoading(false);
33 setShowDropdown(true);
34 }, 300)
35 }, [query]);
36
37 const onAction = () => {
38 setQuery('');
39 setResults(null);
40 }
41
42 return (
43 <div className='flex flex-col w-full'>
44 <Input
45 startContent={<MagnifyingGlassIcon className='size-6' />}
46 className="ml-6"
47 type='search'
48 placeholder='Search'
49 value={query}
50 onChange={(e) => setQuery(e.target.value)}
51 endContent={loading && <Spinner size='sm' />}
52 />
53 {showDropdown && results && (
54 <div className='absolute top-full z-50 bg-white dark:bg-default-50 shadow-lg border-2 border-default-500 w-[50%]'>
55 <Listbox
56 onAction={onAction}
57 items={results}
58 className='flex flex-col overflow-y-auto'
59 >
60 {(question) => (
61 <ListboxItem
62 href={`/questions/${question.id}`}
63 key={question.id}
64 startContent={
65 <div className='flex flex-col h-14 min-w-14 justify-center items-center border border-success rounded-md'>
66 <span>{question.answerCount}</span>
67 <span className='text-xs'>answers</span>
68 </div>

Callers

nothing calls this directly

Calls 1

searchQuestionsFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…