32 lines
1.5 KiB
JavaScript
32 lines
1.5 KiB
JavaScript
import { computed } from 'vue';
|
|
import { useQuery } from '@tanstack/vue-query';
|
|
import { ApiMangaRepository } from '../../infrastructure/api/apiMangaRepository';
|
|
|
|
// Accepte un ID de manga (peut être une ref, un computed ref, ou une valeur simple)
|
|
export function useMangaDetails(mangaId) {
|
|
const mangaRepository = new ApiMangaRepository();
|
|
|
|
// Assure que mangaId est une ref ou une computed pour la réactivité de la queryKey
|
|
// Si ce n'est pas déjà le cas, mais généralement on passera une computed( () => route.params.id )
|
|
// const mangaIdRef = computed(() => unref(mangaId)); // unref est utile si on accepte des valeurs simples aussi
|
|
|
|
const query = useQuery({
|
|
// La queryKey doit être réactive à mangaId
|
|
queryKey: ['manga', mangaId], // mangaId est déjà une computed ref, donc c'est bon
|
|
queryFn: () => {
|
|
// Vérifier que l'ID a une valeur avant d'appeler l'API
|
|
if (!mangaId.value) {
|
|
// Retourner null ou undefined si pas d'ID, pour éviter un appel API invalide
|
|
// TanStack Query gère aussi l'option 'enabled' pour cela
|
|
return Promise.resolve(null); // ou throw new Error("ID manquant");
|
|
}
|
|
return mangaRepository.getMangaById(mangaId.value);
|
|
},
|
|
// Activer la requête seulement si mangaId a une valeur truthy
|
|
enabled: computed(() => !!mangaId.value)
|
|
});
|
|
|
|
// Retourne tous les états et données fournis par useQuery
|
|
return query;
|
|
}
|