import { computed, watch } from 'vue'; import { useMangaStore } from '../../application/store/mangaStore'; import { useMangaChapters } from './useMangaChapters'; // Importe le composable des chapitres export function useMangaVolumes(mangaId) { // Récupération du store pour avoir accès aux chapitres mis à jour en temps réel const mangaStore = useMangaStore(); // Utilise le composable des chapitres pour récupérer les données brutes et les états const { data: rawChaptersData, isLoading, isFetching, error, status, refetch } = useMangaChapters(mangaId); // Fonction pour forcer le rechargement des données const refresh = () => { console.log('useMangaVolumes: Rechargement forcé des chapitres'); refetch(); }; // Surveiller les changements dans le store pour les chapitres du manga actuel watch( () => mangaStore.mangaChapters[mangaId.value], () => { console.log('useMangaVolumes: Changement détecté dans les chapitres du store'); refresh(); }, { deep: true } ); // Calcule les volumes à partir des données des chapitres const volumes = computed(() => { console.log('useMangaVolumes: Recalcul des volumes'); const chaptersArray = rawChaptersData.value || []; // Utilise la data retournée par useMangaChapters if (chaptersArray.length === 0) return []; const volumeMap = new Map(); chaptersArray.forEach(chapter => { const volumeNumber = chapter.volume || '00'; if (!volumeMap.has(volumeNumber)) { volumeMap.set(volumeNumber, { number: volumeNumber, downloadedChapter: 0, totalChapter: 0, chapters: [] }); } const volumeEntry = volumeMap.get(volumeNumber); volumeEntry.chapters.push({ ...chapter, isAvailable: Boolean(chapter.isAvailable) }); volumeEntry.totalChapter++; if (chapter.isAvailable) { volumeEntry.downloadedChapter++; } }); return Array.from(volumeMap.values()).sort((a, b) => { // Cas spécial pour le volume 00, qui doit apparaître en premier if (a.number === '00') return -1; if (b.number === '00') return 1; // Pour tous les autres volumes, tri décroissant const numA = Number(a.number); const numB = Number(b.number); return numB - numA; }); }); // Retourne les volumes calculés et propage les états pertinents de useMangaChapters return { volumes, // Les données transformées isLoading, // L'état de chargement initial des chapitres isFetching, // L'état de rafraîchissement des chapitres error, // L'erreur potentielle lors du fetch des chapitres status, // L'état global ('pending', 'error', 'success') refresh // On pourrait aussi retourner rawChaptersData si nécessaire ailleurs }; }