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
);
}