38 lines
1.6 KiB
JavaScript
38 lines
1.6 KiB
JavaScript
import { computed } from 'vue';
|
|
import { useQuery } from '@tanstack/vue-query';
|
|
import { ApiMangaRepository } from '../../infrastructure/api/apiMangaRepository';
|
|
|
|
export function useMangaChapters(mangaId) {
|
|
const mangaRepository = new ApiMangaRepository();
|
|
|
|
const query = useQuery({
|
|
queryKey: ['manga', mangaId, 'chapters'],
|
|
queryFn: async () => {
|
|
if (!mangaId.value) {
|
|
return Promise.resolve([]); // Retourne un tableau vide si pas d'ID
|
|
}
|
|
|
|
console.log(`useMangaChapters: Chargement des chapitres pour le manga ${mangaId.value}`);
|
|
const response = await mangaRepository.getChapters(mangaId.value);
|
|
|
|
// Log pour déboguer
|
|
console.log(`useMangaChapters: ${response.items?.length || 0} chapitres chargés`);
|
|
|
|
// Assure de toujours retourner un tableau
|
|
return Array.isArray(response) ? response : response?.items ?? [];
|
|
},
|
|
// Refresh toutes les 30 secondes en arrière-plan
|
|
refetchInterval: 30000,
|
|
// S'assurer que si le composant est visible à nouveau, on récupère les données fraîches
|
|
refetchOnWindowFocus: true,
|
|
// Query activée uniquement si mangaId est défini
|
|
enabled: computed(() => !!mangaId.value),
|
|
// Options pour conserver les données entre les requêtes
|
|
staleTime: 60000, // Considère les données comme "périmées" après 1 minute
|
|
cacheTime: 5 * 60 * 1000 // Garde les données en cache pendant 5 minutes
|
|
});
|
|
|
|
// Retourne le résultat de useQuery (contenant data, isLoading, etc.)
|
|
return query;
|
|
}
|