| 
									
										
										
										
											2025-07-01 13:26:46 -03:00
										 |  |  | import { useState, useEffect, useCallback } from 'react'; | 
					
						
							|  |  |  | import apiClient from '../api/apiClient'; | 
					
						
							|  |  |  | import { AxiosError } from 'axios'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-04 17:01:54 -03:00
										 |  |  | export function useApiData<T>(endpoint: string) { | 
					
						
							| 
									
										
										
										
											2025-07-01 13:26:46 -03:00
										 |  |  |   const [data, setData] = useState<T | null>(null); | 
					
						
							|  |  |  |   const [loading, setLoading] = useState<boolean>(true); | 
					
						
							|  |  |  |   const [error, setError] = useState<string | null>(null); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const fetchData = useCallback(async () => { | 
					
						
							|  |  |  |     setLoading(true); | 
					
						
							|  |  |  |     setError(null); | 
					
						
							|  |  |  |     try { | 
					
						
							| 
									
										
										
										
											2025-07-04 17:01:54 -03:00
										 |  |  |       // Anteponemos '/api' a cada endpoint solicitado.
 | 
					
						
							|  |  |  |       // Ejemplo: si el endpoint es '/mercados/granos', la URL final será '/api/mercados/granos'
 | 
					
						
							|  |  |  |       const response = await apiClient.get<T>(`/api${endpoint}`); | 
					
						
							| 
									
										
										
										
											2025-07-01 13:26:46 -03:00
										 |  |  |       setData(response.data); | 
					
						
							|  |  |  |     } catch (err) { | 
					
						
							|  |  |  |       if (err instanceof AxiosError) { | 
					
						
							| 
									
										
										
										
											2025-07-04 17:01:54 -03:00
										 |  |  |         setError(`Error de red o de la API: ${err.message}`); | 
					
						
							| 
									
										
										
										
											2025-07-01 13:26:46 -03:00
										 |  |  |       } else { | 
					
						
							|  |  |  |         setError('Ocurrió un error inesperado.'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       console.error(err); | 
					
						
							|  |  |  |     } finally { | 
					
						
							|  |  |  |       setLoading(false); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-07-04 17:01:54 -03:00
										 |  |  |   }, [endpoint]); | 
					
						
							| 
									
										
										
										
											2025-07-01 13:26:46 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   useEffect(() => { | 
					
						
							|  |  |  |     fetchData(); | 
					
						
							|  |  |  |   }, [fetchData]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { data, loading, error, refetch: fetchData }; | 
					
						
							|  |  |  | } |