From 2f1dfb8e9a6eccf16526a9518dd05a57e1a1a68e Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sun, 16 Feb 2025 16:33:32 +0100 Subject: [PATCH] refacto: network load and fake percent --- src/components/ui/network-progress.tsx | 17 ++----- src/lib/hooks/use-network-request.ts | 58 +----------------------- src/lib/services/server-cache.service.ts | 1 + 3 files changed, 5 insertions(+), 71 deletions(-) diff --git a/src/components/ui/network-progress.tsx b/src/components/ui/network-progress.tsx index 30d4f2a..07098c6 100644 --- a/src/components/ui/network-progress.tsx +++ b/src/components/ui/network-progress.tsx @@ -31,10 +31,7 @@ export function NetworkProgressProvider({ children }: { children: React.ReactNod }); }, []); - const totalProgress = Object.values(activeRequests).reduce((acc, curr) => acc + curr, 0); const requestCount = Object.keys(activeRequests).length; - const averageProgress = requestCount > 0 ? totalProgress / requestCount : 0; - const displayProgress = Math.min(Math.round(averageProgress), 100); return ( @@ -44,23 +41,15 @@ export function NetworkProgressProvider({ children }: { children: React.ReactNod {/* Barre de progression en haut */}
-
+
- {/* Indicateur de progression au centre */} + {/* Indicateur de chargement au centre */}
- - Chargement {displayProgress < 100 && `${displayProgress}%`} - + Chargement
diff --git a/src/lib/hooks/use-network-request.ts b/src/lib/hooks/use-network-request.ts index 08d9fc0..a63c9f0 100644 --- a/src/lib/hooks/use-network-request.ts +++ b/src/lib/hooks/use-network-request.ts @@ -10,41 +10,11 @@ export function useNetworkRequest() { const searchParams = useSearchParams(); const currentRequestId = useRef(null); const abortControllerRef = useRef(null); - const progressIntervalRef = useRef(null); - - // Fonction pour simuler une progression graduelle - const simulateProgress = useCallback( - (requestId: string, start: number, end: number) => { - let current = start; - if (progressIntervalRef.current) { - clearInterval(progressIntervalRef.current); - } - - progressIntervalRef.current = setInterval(() => { - if (current < end) { - current = Math.min(current + Math.random() * 2, end); - if (requestId === currentRequestId.current) { - updateProgress(requestId, current); - } - } else { - if (progressIntervalRef.current) { - clearInterval(progressIntervalRef.current); - progressIntervalRef.current = null; - } - } - }, 200); - }, - [updateProgress] - ); useEffect(() => { // Si on a un requestId en cours, c'est que la navigation est terminée if (currentRequestId.current) { updateProgress(currentRequestId.current, 100); - if (progressIntervalRef.current) { - clearInterval(progressIntervalRef.current); - progressIntervalRef.current = null; - } setTimeout(() => { if (currentRequestId.current) { completeProgress(currentRequestId.current); @@ -53,12 +23,7 @@ export function useNetworkRequest() { }, 100); } - // Cleanup return () => { - if (progressIntervalRef.current) { - clearInterval(progressIntervalRef.current); - progressIntervalRef.current = null; - } if (abortControllerRef.current) { abortControllerRef.current.abort(); abortControllerRef.current = null; @@ -68,39 +33,23 @@ export function useNetworkRequest() { const executeRequest = useCallback( async (requestFn: () => Promise): Promise => { - // On démarre un nouveau requestId uniquement si on n'en a pas déjà un if (!currentRequestId.current) { currentRequestId.current = Math.random().toString(36).substring(7); startProgress(currentRequestId.current); - - // Création d'un nouveau AbortController pour cette requête abortControllerRef.current = new AbortController(); - - // On commence à 10% et on simule jusqu'à 30% - updateProgress(currentRequestId.current, 10); - simulateProgress(currentRequestId.current, 10, 30); } try { - // On wrap la fonction de requête pour intercepter les appels fetch const wrappedFn = async () => { const originalFetch = window.fetch; window.fetch = async (input: RequestInfo | URL, init?: RequestInit) => { if (!currentRequestId.current) return originalFetch(input, init); - // On passe à 40% quand la requête démarre - updateProgress(currentRequestId.current, 40); - simulateProgress(currentRequestId.current, 40, 80); - const response = await originalFetch(input, { ...init, signal: abortControllerRef.current?.signal, }); - // On passe à 90% quand la requête est terminée - updateProgress(currentRequestId.current, 90); - simulateProgress(currentRequestId.current, 90, 95); - return response; }; @@ -113,11 +62,6 @@ export function useNetworkRequest() { return await wrappedFn(); } catch (error) { - // En cas d'erreur, on nettoie tout - if (progressIntervalRef.current) { - clearInterval(progressIntervalRef.current); - progressIntervalRef.current = null; - } if (currentRequestId.current) { completeProgress(currentRequestId.current); currentRequestId.current = null; @@ -128,7 +72,7 @@ export function useNetworkRequest() { throw error; } }, - [startProgress, updateProgress, completeProgress, simulateProgress] + [startProgress, updateProgress, completeProgress] ); return { executeRequest }; diff --git a/src/lib/services/server-cache.service.ts b/src/lib/services/server-cache.service.ts index 9f4037c..a6866c5 100644 --- a/src/lib/services/server-cache.service.ts +++ b/src/lib/services/server-cache.service.ts @@ -93,6 +93,7 @@ class ServerCacheService { type: keyof typeof ServerCacheService.DEFAULT_TTL = "DEFAULT" ): Promise { const now = Date.now(); + console.log("👀 Getting or setting cache for key:", key); const cached = this.cache.get(key); if (cached && cached.expiry > now) {