diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index ca37de5..0d6279c 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -1,5 +1,5 @@ import { createContext, useContext, useState, useCallback, useEffect, useMemo } from 'react' -import { fetchOrg, fetchRepos, fetchContributors, fetchIssues, } from '../services/github' +import { fetchOrg, fetchRepos, fetchContributors, fetchIssues, fetchRateLimit } from '../services/github' import { buildAnalyticalModel, getTopRepositories } from '../services/analytics' const Ctx = createContext(null) @@ -34,6 +34,7 @@ export function AppProvider({ children }) { const [loadMsg, setLoadMsg] = useState('') const [govLoading, setGovLoading] = useState(false) const [error, setError] = useState('') + const [totalRepo, setTotalRepo] = useState(0) useEffect(() => { const handler = e => { @@ -58,7 +59,15 @@ export function AppProvider({ children }) { return () => clearTimeout(timeout) }, [rateLimit]) - const [totalRepo, setTotalRepo] = useState(0); + + const refreshRateLimit = useCallback(async () => { + const rl = await fetchRateLimit(pat) + if (rl) { + setRateLimit(rl) + return true + } + return false + }, [pat]) const savePat = useCallback(token => { setPat(token) token ? localStorage.setItem('oe_pat', token) : localStorage.removeItem('oe_pat') @@ -180,7 +189,7 @@ export function AppProvider({ children }) { {children} diff --git a/src/pages/SettingsPage.jsx b/src/pages/SettingsPage.jsx index 7ab81c3..3b95ce9 100644 --- a/src/pages/SettingsPage.jsx +++ b/src/pages/SettingsPage.jsx @@ -5,12 +5,13 @@ import { C } from '../components/UI' import { cacheClear } from '../services/github' import { AiOutlineInfoCircle } from "react-icons/ai"; export default function SettingsPage() { - const { pat, savePat, rateLimit } = useApp() + const { pat, savePat, rateLimit, refreshRateLimit } = useApp() const [draft, setDraft] = useState(pat) const [show, setShow] = useState(false) const [saved, setSaved] = useState(false) const [cleared, setCleared] = useState(false) - + const [isRefreshing, setIsRefreshing] = useState(false) + const [refreshError, setRefreshError] = useState(false) const handleSave = () => { savePat(draft.trim()) setSaved(true) @@ -207,7 +208,43 @@ export default function SettingsPage() {
API Quota
- +
{rateLimit ? (