52 lines
2.1 KiB
JavaScript
52 lines
2.1 KiB
JavaScript
import { computed } from 'vue';
|
|
import { useMangaChapters } from './useMangaChapters'; // Importe le composable des chapitres
|
|
|
|
export function useMangaVolumes(mangaId) {
|
|
// Utilise le composable des chapitres pour récupérer les données brutes et les états
|
|
const { data: rawChaptersData, isLoading, isFetching, error, status } = useMangaChapters(mangaId);
|
|
|
|
// Calcule les volumes à partir des données des chapitres
|
|
const volumes = computed(() => {
|
|
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 || 'Unknown';
|
|
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) => {
|
|
const numA = a.number === 'Unknown' ? -Infinity : Number(a.number);
|
|
const numB = b.number === 'Unknown' ? -Infinity : 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')
|
|
// On pourrait aussi retourner rawChaptersData si nécessaire ailleurs
|
|
};
|
|
}
|