From a0ac75804939c414b4792310596b2d4372be0cb9 Mon Sep 17 00:00:00 2001 From: Primakov Alexandr Date: Mon, 15 Dec 2025 17:43:21 +0300 Subject: [PATCH] Add refreshChains function to ChallengeContext and integrate it into ChainsPage for improved data management. This allows for manual refreshing of chain data when the component mounts, enhancing user experience. --- src/context/ChallengeContext.tsx | 18 +++++++++++++++++- src/pages/chains/ChainsPage.tsx | 6 +++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/context/ChallengeContext.tsx b/src/context/ChallengeContext.tsx index f178761..8d375dd 100644 --- a/src/context/ChallengeContext.tsx +++ b/src/context/ChallengeContext.tsx @@ -65,6 +65,7 @@ interface ChallengeContextValue { login: (nickname: string, workplaceNumber: string) => Promise logout: () => void refreshStats: () => Promise + refreshChains: () => Promise eventEmitter: ChallengeEventEmitter pollingManager: PollingManager metricsCollector: MetricsCollector @@ -96,10 +97,23 @@ export const ChallengeProvider = ({ children }: PropsWithChildren) => { const [authUser, { isLoading: isAuthLoading }] = useAuthUserMutation() const [triggerStats, statsResult] = useLazyGetUserStatsQuery() - const { data: chainsData, isLoading: isChainsLoading } = useGetChainsQuery(undefined, { + const { + data: chainsData, + isLoading: isChainsLoading, + refetch: refetchChains, + } = useGetChainsQuery(undefined, { skip: !userId, }) + const refreshChains = useCallback(async () => { + if (!userId) { + return + } + + cacheRef.current.clear('chains') + await refetchChains() + }, [refetchChains, userId]) + useEffect(() => { if (chainsData) { setChains(chainsData) @@ -189,6 +203,7 @@ export const ChallengeProvider = ({ children }: PropsWithChildren) => { login, logout, refreshStats, + refreshChains, eventEmitter, pollingManager, metricsCollector, @@ -213,6 +228,7 @@ export const ChallengeProvider = ({ children }: PropsWithChildren) => { personalDashboard, pollingManager, refreshStats, + refreshChains, saveDraft, stats, userId, diff --git a/src/pages/chains/ChainsPage.tsx b/src/pages/chains/ChainsPage.tsx index a720184..f2e4cf6 100644 --- a/src/pages/chains/ChainsPage.tsx +++ b/src/pages/chains/ChainsPage.tsx @@ -10,7 +10,7 @@ import type { ChallengeChain } from '../../__data__/types' export const ChainsPage = () => { const navigate = useNavigate() - const { nickname } = useChallenge() + const { nickname, refreshChains } = useChallenge() // Проверяем авторизацию useEffect(() => { @@ -24,6 +24,10 @@ export const ChainsPage = () => { } }, [navigate, nickname]) + useEffect(() => { + refreshChains() + }, [refreshChains]) + const handleSelectChain = (chain: ChallengeChain) => { storage.setSelectedChainId(chain.id)