diff --git a/package.json b/package.json index f2d89f5..4a9cdde 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.15.6", "@mui/material": "^5.15.6", - "@primer/octicons-react": "^19.15.5", + "@primer/octicons-react": "^19.25.0", "@vitejs/plugin-react": "^4.3.3", "axios": "^1.7.7", "framer-motion": "^12.23.12", diff --git a/src/hooks/useGitHubAuth.ts b/src/hooks/useGitHubAuth.ts index 5284347..77c4d01 100644 --- a/src/hooks/useGitHubAuth.ts +++ b/src/hooks/useGitHubAuth.ts @@ -7,8 +7,11 @@ export const useGitHubAuth = () => { const [error, setError] = useState(''); const octokit = useMemo(() => { - if (!username || !token) return null; + if (!username) return null; + if(token){ return new Octokit({ auth: token }); + } + return new Octokit(); }, [username, token]); const getOctokit = () => octokit; diff --git a/src/hooks/useGitHubData.ts b/src/hooks/useGitHubData.ts index a0ebe10..f85d7b7 100644 --- a/src/hooks/useGitHubData.ts +++ b/src/hooks/useGitHubData.ts @@ -30,7 +30,7 @@ export const useGitHubData = (getOctokit: () => any) => { const octokit = getOctokit(); - if (!octokit || !username || rateLimited) return; + if (!octokit || !username) return; setLoading(true); setError(''); @@ -45,18 +45,27 @@ export const useGitHubData = (getOctokit: () => any) => { setPrs(prRes.items); setTotalIssues(issueRes.total); setTotalPrs(prRes.total); + setRateLimited(false); } catch (err: any) { + const errorMessage = err.message?.toLowerCase() || ""; if (err.status === 403) { - setError('GitHub API rate limit exceeded. Please wait or use a token.'); - setRateLimited(true); // Prevent further fetches - } else { + setError('GitHub API rate limit exceeded. Please provide a PAT to continue.'); + 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")){ + setError('Private repository detected. Please input PAT.'); + }else if(err.status===404){ + setError('Resource not found.'); + } + else{ setError(err.message || 'Failed to fetch data'); } } finally { setLoading(false); } }, - [getOctokit, rateLimited] + [getOctokit] ); return { diff --git a/src/pages/Tracker/Tracker.tsx b/src/pages/Tracker/Tracker.tsx index 2bd4d30..4873a1f 100644 --- a/src/pages/Tracker/Tracker.tsx +++ b/src/pages/Tracker/Tracker.tsx @@ -180,7 +180,6 @@ const Home: React.FC = () => { value={token} onChange={(e) => setToken(e.target.value)} type="password" - required sx={{ flex: 1, minWidth: 150 }} />