From 085de23090282cdd5f270a57f35dada491ef8081 Mon Sep 17 00:00:00 2001 From: eshanized Date: Fri, 27 Dec 2024 21:35:12 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20perf(=5Fretry):=20logic=20?= =?UTF-8?q?&=20error=20handling=20applied?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePackages.ts | 47 +++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/hooks/usePackages.ts b/src/hooks/usePackages.ts index 2aa02e0..07cb9ec 100644 --- a/src/hooks/usePackages.ts +++ b/src/hooks/usePackages.ts @@ -1,28 +1,41 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { Package } from '../types'; import { fetchPackages } from '../services/api'; export function usePackages() { const [packages, setPackages] = useState([]); - const [loading, setLoading] = useState(true); + const [loading, setLoading] = useState(true); const [error, setError] = useState(null); + const [retryCount, setRetryCount] = useState(0); // Retry count for failed attempts - useEffect(() => { - const loadPackages = async () => { - try { - const data = await fetchPackages(); - setPackages(data); - setError(null); - } catch (err) { - setError('Failed to load packages. Please try again later.'); - console.error('Failed to fetch packages:', err); - } finally { - setLoading(false); + // Function to load packages with retry logic + const loadPackages = useCallback(async () => { + try { + setLoading(true); + setError(null); // Reset error state on each new fetch attempt + const data = await fetchPackages(); + setPackages(data); + } catch (err) { + console.error('Failed to fetch packages:', err); + setError('Failed to load packages. Please try again later.'); + // Retry on failure up to 3 times + if (retryCount < 3) { + setRetryCount((prev) => prev + 1); } - }; + } finally { + setLoading(false); + } + }, [retryCount]); + // Trigger loadPackages initially and on retry count change + useEffect(() => { loadPackages(); - }, []); + }, [loadPackages]); - return { packages, loading, error }; -} \ No newline at end of file + const retryLoading = () => { + setRetryCount(0); // Reset retry count and trigger reload + loadPackages(); + }; + + return { packages, loading, error, retryLoading }; +}