️ perf(_retry): logic & error handling applied

This commit is contained in:
eshanized
2024-12-27 21:35:12 +05:30
parent 08891e20ca
commit 085de23090

View File

@@ -1,28 +1,41 @@
import { useState, useEffect } from 'react'; import { useState, useEffect, useCallback } from 'react';
import { Package } from '../types'; import { Package } from '../types';
import { fetchPackages } from '../services/api'; import { fetchPackages } from '../services/api';
export function usePackages() { export function usePackages() {
const [packages, setPackages] = useState<Package[]>([]); const [packages, setPackages] = useState<Package[]>([]);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState<boolean>(true);
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [retryCount, setRetryCount] = useState<number>(0); // Retry count for failed attempts
useEffect(() => { // Function to load packages with retry logic
const loadPackages = async () => { const loadPackages = useCallback(async () => {
try { try {
const data = await fetchPackages(); setLoading(true);
setPackages(data); setError(null); // Reset error state on each new fetch attempt
setError(null); const data = await fetchPackages();
} catch (err) { setPackages(data);
setError('Failed to load packages. Please try again later.'); } catch (err) {
console.error('Failed to fetch packages:', err); console.error('Failed to fetch packages:', err);
} finally { setError('Failed to load packages. Please try again later.');
setLoading(false); // 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();
}, []); }, [loadPackages]);
return { packages, loading, error }; const retryLoading = () => {
setRetryCount(0); // Reset retry count and trigger reload
loadPackages();
};
return { packages, loading, error, retryLoading };
} }