codigo0/admin-panel/src/hooks/useContentStats.ts

92 lines
2.5 KiB
TypeScript

/**
* Hook para obtener estadísticas de contenido
*/
import { useState, useEffect } from 'react';
import axios from 'axios';
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000';
const api = axios.create({
baseURL: `${API_URL}/api`,
headers: {
'Content-Type': 'application/json',
},
});
// Interceptor para añadir token
api.interceptors.request.use((config) => {
const token = localStorage.getItem('admin_token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
export function useContentStats() {
const [stats, setStats] = useState({
protocols: 0,
protocolsPublished: 0,
guides: 0,
guidesPublished: 0,
drugs: 0,
drugsPublished: 0,
checklists: 0,
checklistsPublished: 0,
});
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
async function fetchStats() {
try {
const response = await api.get('/stats/content');
const data = response.data;
console.log('📊 Estadísticas recibidas:', data);
// El backend ahora devuelve el formato esperado directamente
setStats({
protocols: data.protocols || 0,
protocolsPublished: data.protocolsPublished || 0,
guides: data.guides || 0,
guidesPublished: data.guidesPublished || 0,
drugs: data.drugs || 0,
drugsPublished: data.drugsPublished || 0,
checklists: data.checklists || 0,
checklistsPublished: data.checklistsPublished || 0,
});
console.log('✅ Estadísticas cargadas correctamente');
} catch (error: any) {
console.error('❌ Error cargando estadísticas:', error);
console.error('Detalles del error:', error.response?.data || error.message);
console.error('Status:', error.response?.status);
// Si es error 401, el token puede estar expirado
if (error.response?.status === 401) {
console.warn('⚠️ Token expirado o inválido. Por favor, inicia sesión nuevamente.');
}
// Mantener valores por defecto (0)
setStats({
protocols: 0,
protocolsPublished: 0,
guides: 0,
guidesPublished: 0,
drugs: 0,
drugsPublished: 0,
checklists: 0,
checklistsPublished: 0,
});
} finally {
setIsLoading(false);
}
}
fetchStats();
}, []);
return { stats, isLoading };
}