diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000..3e87942 Binary files /dev/null and b/bun.lockb differ diff --git a/components/Example.tsx b/components/Example.tsx index 15d9ee0..d07aa61 100644 --- a/components/Example.tsx +++ b/components/Example.tsx @@ -3,7 +3,7 @@ import { Combobox, Dialog, Transition } from '@headlessui/react' import { RepositoryOption } from './RepositoryOption' import { FaceSmileIcon, MagnifyingGlassIcon } from '@heroicons/react/20/solid' -type Repository = { +export type Repository = { id: string name: string full_name: string @@ -32,7 +32,33 @@ export default function Example() { }, [open]) const [rawQuery, setRawQuery] = React.useState('') - const query = rawQuery.toLowerCase().replace(/^[#>]/, '') + const query = rawQuery.toLowerCase().replace(/^[#>]/, '').trim() + const [repositories, setRepositories] = React.useState([]) + const [isLoading, setIsLoading] = React.useState(false) + + const fetchRepositories = React.useCallback(() => { + setIsLoading(true) + + fetch(`/api/search?q=${query}`) + .then((res) => res.json()) + .then((data: APIResponse) => { + setRepositories(data.items) + setIsLoading(false) + }) + }, [query]) + + React.useEffect(() => { + if (!query) { + setRepositories([]) + return + } + + const debounceHandler = setTimeout(() => { + fetchRepositories() + }, 500) + + return () => clearTimeout(debounceHandler) + }, [query, fetchRepositories]) return ( - + { @@ -73,11 +99,11 @@ export default function Example() { >
{/* Stargazers */} - 195 stars + {repositoryData.stargazers_count} stars {/* Issues */} - 99 issues + {repositoryData.open_issues_count} issues {/* Forks */} @@ -75,7 +80,7 @@ export function RepositoryOption() { > - 211 forks + {repositoryData.forks_count} forks