diff --git a/src/hooks/useGitHubData.ts b/src/hooks/useGitHubData.ts index 68a8a0c..c466314 100644 --- a/src/hooks/useGitHubData.ts +++ b/src/hooks/useGitHubData.ts @@ -34,17 +34,46 @@ export const useGitHubData = (getOctokit: () => any) => { setLoading(true); setError(''); + setIssues([]); + setPrs([]); + setTotalIssues(0); + setTotalPrs(0); try { - const [issueRes, prRes] = await Promise.all([ + const [issueRes, prRes] = await Promise.allSettled([ fetchPaginated(octokit, username, 'issue', page, perPage), fetchPaginated(octokit, username, 'pr', page, perPage), ]); - setIssues(issueRes.items); - setPrs(prRes.items); - setTotalIssues(issueRes.total); - setTotalPrs(prRes.total); + if (issueRes.status === 'fulfilled') { + setIssues(issueRes.value.items); + setTotalIssues(issueRes.value.total); + } + + if (prRes.status === 'fulfilled') { + setPrs(prRes.value.items); + setTotalPrs(prRes.value.total); + } + + if ( + issueRes.status === 'rejected' && + prRes.status === 'rejected' + ) { + const error = + issueRes.reason ?? + prRes.reason ?? + new Error('Failed to fetch GitHub data'); + + throw error; + } + + if ( + issueRes.status === 'rejected' || + prRes.status === 'rejected' + ) { + setError('Some GitHub data could not be fetched completely.'); + } + setRateLimited(false); } catch (err: any) { const errorMessage = err.message?.toLowerCase() || ""; @@ -53,14 +82,16 @@ export const useGitHubData = (getOctokit: () => any) => { setRateLimited(true); } else if (errorMessage.includes("do not exist")){ setError('User not found. Please check the spelling of the GitHub username.'); - } else if (err.status === 401 || errorMessage.includes("permission")){ + } + else if (errorMessage.includes("validation failed")) { + setError('Invalid GitHub username or insufficient permissions.'); + } + else if (err.status === 401 || errorMessage.includes("permission")){ setError('Private repository detected. Please input PAT.'); }else if(err.status===404){ setError('Resource not found.'); } - else if (errorMessage.includes("validation failed")) { - setError('Invalid GitHub username or insufficient permissions.'); - } + else { setError( 'Unable to fetch GitHub data. Please verify the username, token, or network connection.'