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 ? (