From bcb728acd71b5af45dac08e215fc3be1a594ef09 Mon Sep 17 00:00:00 2001 From: jagriti-aswal Date: Sun, 17 May 2026 20:20:19 +0530 Subject: [PATCH 1/2] Fix misleading private repository message during partial fetch --- src/hooks/useGitHubData.ts | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/hooks/useGitHubData.ts b/src/hooks/useGitHubData.ts index f85d7b7..5b1bc10 100644 --- a/src/hooks/useGitHubData.ts +++ b/src/hooks/useGitHubData.ts @@ -36,15 +36,28 @@ export const useGitHubData = (getOctokit: () => any) => { setError(''); 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' + ) { + setError('Some GitHub data could not be fetched completely.'); + } + setRateLimited(false); } catch (err: any) { const errorMessage = err.message?.toLowerCase() || ""; @@ -53,13 +66,20 @@ 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{ - setError(err.message || 'Failed to fetch data'); + + else { + setError( + 'Unable to fetch GitHub data. Please verify the username, token, or network connection.' + ); } } finally { setLoading(false); From fc3b8ff0e3339acb2b6bb5ecdd42795f25bb7cf1 Mon Sep 17 00:00:00 2001 From: jagriti-aswal Date: Sun, 17 May 2026 21:09:01 +0530 Subject: [PATCH 2/2] Fix stale GitHub data persistence after failed fetches --- src/hooks/useGitHubData.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/hooks/useGitHubData.ts b/src/hooks/useGitHubData.ts index 5b1bc10..c466314 100644 --- a/src/hooks/useGitHubData.ts +++ b/src/hooks/useGitHubData.ts @@ -34,6 +34,10 @@ export const useGitHubData = (getOctokit: () => any) => { setLoading(true); setError(''); + setIssues([]); + setPrs([]); + setTotalIssues(0); + setTotalPrs(0); try { const [issueRes, prRes] = await Promise.allSettled([ @@ -51,6 +55,18 @@ export const useGitHubData = (getOctokit: () => any) => { 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'