From 10885afa5a56815b653e8f09a640c76b37ae9f9c Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 19:57:58 +0000 Subject: [PATCH] Fix request storm in Admin panel --- src/pages/Admin.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/pages/Admin.tsx b/src/pages/Admin.tsx index 7a7e2711..1347d0c4 100644 --- a/src/pages/Admin.tsx +++ b/src/pages/Admin.tsx @@ -25,13 +25,15 @@ export default function Admin() { flaggedContent: 0, loading: true, }); + const [isFetching, setIsFetching] = useState(false); const fetchStats = useCallback(async () => { - if (!user) { - console.log('Skipping stats fetch - user not authenticated'); + if (!user || isFetching) { + console.log('Skipping stats fetch - user not authenticated or already fetching'); return; } + setIsFetching(true); try { setStats(prev => ({ ...prev, loading: true })); @@ -82,13 +84,15 @@ export default function Admin() { details: error.details }); setStats(prev => ({ ...prev, loading: false })); + } finally { + setIsFetching(false); } - }, [user]); + }, []); const handleRefresh = useCallback(() => { moderationQueueRef.current?.refresh(); fetchStats(); // Also refresh stats - }, [fetchStats]); + }, []); useEffect(() => { if (!authLoading && !roleLoading) { @@ -105,7 +109,7 @@ export default function Admin() { // Fetch stats when user is authenticated and authorized fetchStats(); } - }, [user, authLoading, roleLoading, isModerator, navigate, fetchStats]); + }, [user, authLoading, roleLoading, navigate]); if (authLoading || roleLoading) { return (