import { Listbox, ListboxItem } from '@heroui/listbox'; import { Spinner } from '@heroui/spinner'; import { useRequest } from 'ahooks'; import { MdError } from 'react-icons/md'; import IconWrapper from '@/components/github_info/icon_wrapper'; import ItemCounter from '@/components/github_info/item_counter'; import GithubRelease from '@/components/github_info/release'; import { BookIcon, BugIcon, PullRequestIcon, StarIcon, TagIcon, UsersIcon, WatchersIcon, } from '@/components/icons'; import { request } from '@/utils/request'; import { openUrl } from '@/utils/url'; import type { GirhubRepo, GithubContributor, GithubPullRequest, GithubRelease as GithubReleaseType, } from '@/types/github'; function displayData (data: number, loading: boolean, error?: Error) { if (error) { return ; } if (loading) { return ; } return ; } export default function NapCatRepoInfo () { // repo info const { data: repoOriData, error: repoError, loading: repoLoading, } = useRequest(() => request.get('https://api.github.com/repos/NapNeko/NapCatQQ') ); // release info const { data: releaseOriData, error: releaseError, loading: releaseLoading, } = useRequest(() => request.get( 'https://api.github.com/repos/NapNeko/NapCatQQ/releases' ) ); // pr info const { data: prData, error: prError, loading: prLoading, } = useRequest(() => request.get( 'https://api.github.com/repos/NapNeko/NapCatQQ/pulls' ) ); // contributors info const { data: contributorsData, error: contributorsError, loading: contributorsLoading, } = useRequest(() => request.get( 'https://api.github.com/repos/NapNeko/NapCatQQ/contributors' ) ); const repoData = repoOriData?.data; const releaseData = releaseOriData?.data?.[0]; const prCount = prData?.data?.length || 0; const contributorsCount = contributorsData?.data?.length || 0; const releaseCount = releaseOriData?.data?.length || 0; return ( { switch (key) { case 'releases': openUrl('https://github.com/NapNeko/NapCatQQ/releases', true); break; case 'contributors': openUrl( 'https://github.com/NapNeko/NapCatQQ/graphs/contributors', true ); break; case 'license': openUrl( 'https://github.com/NapNeko/NapCatQQ/blob/main/LICENSE', true ); break; case 'watchers': openUrl('https://github.com/NapNeko/NapCatQQ/watchers', true); break; case 'star': openUrl('https://github.com/NapNeko/NapCatQQ/stargazers', true); break; case 'issues': openUrl('https://github.com/NapNeko/NapCatQQ/issues', true); break; case 'pull_requests': openUrl('https://github.com/NapNeko/NapCatQQ/pulls', true); break; default: openUrl('https://github.com/NapNeko/NapCatQQ', true); } }} > } > Star } > Issues } > Pull Requests ) : releaseLoading ? ( ) : ( ) } startContent={ } textValue='Releases' > {releaseData && } } > Contributors } > Watchers {repoData?.license?.name ?? 'unknown'} } startContent={ } > License ); }