feat: ajout de la fonctionnalité de suppression de mangas, incluant une modale de confirmation pour l'utilisateur, la gestion des erreurs et l'intégration avec l'API pour supprimer les mangas et leurs chapitres associés. Mise à jour des composants Vue et ajout de tests pour valider cette nouvelle fonctionnalité.
This commit is contained in:
parent
7f9d583c94
commit
f09f744a9b
@@ -68,6 +68,16 @@
|
||||
@close="closeManageChaptersModal"
|
||||
@save="saveChaptersChanges"
|
||||
/>
|
||||
|
||||
<!-- Modale de suppression du manga -->
|
||||
<MangaDeleteModal
|
||||
:is-open="isDeleteModalOpen"
|
||||
:manga="currentManga"
|
||||
:is-loading="isDeleting"
|
||||
:error="deleteError"
|
||||
@close="closeDeleteModal"
|
||||
@confirm="confirmDeleteManga"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div v-else-if="isLoadingDetails" class="flex justify-center items-center h-64">
|
||||
@@ -93,9 +103,10 @@
|
||||
WrenchIcon
|
||||
} from '@heroicons/vue/24/outline';
|
||||
import { computed, onUnmounted, ref, watch } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import { useMangaDetails } from '../composables/useMangaDetails';
|
||||
import { useMangaDelete } from '../composables/useMangaDelete';
|
||||
import { useMangaDetails } from '../composables/useMangaDetails';
|
||||
import { useMangaEdit } from '../composables/useMangaEdit';
|
||||
import { useMangaMonitoring } from '../composables/useMangaMonitoring';
|
||||
import { useMangaPreferredSources } from '../composables/useMangaPreferredSources';
|
||||
@@ -103,6 +114,7 @@ import { useMangaRefresh } from '../composables/useMangaRefresh';
|
||||
import { useMangaVolumes } from '../composables/useMangaVolumes';
|
||||
|
||||
import ManageChaptersModal from '../components/ManageChaptersModal.vue';
|
||||
import MangaDeleteModal from '../components/MangaDeleteModal.vue';
|
||||
import MangaEditModal from '../components/MangaEditModal.vue';
|
||||
import MangaHeader from '../components/MangaHeader.vue';
|
||||
import MangaPreferredSourcesModal from '../components/MangaPreferredSourcesModal.vue';
|
||||
@@ -114,6 +126,7 @@ import Toolbar from '../../../../shared/components/ui/Toolbar.vue';
|
||||
import { useMangaStore } from '../../application/store/mangaStore';
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const mangaStore = useMangaStore();
|
||||
|
||||
const mangaId = computed(() => route.params.id || null);
|
||||
@@ -174,6 +187,16 @@ import { useMangaStore } from '../../application/store/mangaStore';
|
||||
toggleError: monitoringError
|
||||
} = useMangaMonitoring();
|
||||
|
||||
// Composable pour la suppression
|
||||
const {
|
||||
isDeleteModalOpen,
|
||||
openDeleteModal,
|
||||
closeDeleteModal,
|
||||
deleteManga,
|
||||
isLoading: isDeleting,
|
||||
error: deleteError
|
||||
} = useMangaDelete();
|
||||
|
||||
// Charger les chapitres dans le store quand le manga est chargé
|
||||
watch(
|
||||
mangaId,
|
||||
@@ -202,6 +225,18 @@ import { useMangaStore } from '../../application/store/mangaStore';
|
||||
chaptersError.value = null;
|
||||
};
|
||||
|
||||
const confirmDeleteManga = async () => {
|
||||
if (!mangaId.value) return;
|
||||
|
||||
try {
|
||||
await deleteManga(mangaId.value);
|
||||
// Rediriger vers la liste des mangas après suppression
|
||||
router.push('/manga');
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la suppression du manga:', error);
|
||||
}
|
||||
};
|
||||
|
||||
const savePreferredSources = async (sourceIds) => {
|
||||
try {
|
||||
await saveSourcesOrder(sourceIds);
|
||||
@@ -334,7 +369,7 @@ import { useMangaStore } from '../../application/store/mangaStore';
|
||||
icon: TrashIcon,
|
||||
label: 'Delete',
|
||||
type: 'button',
|
||||
onClick: () => console.log('Delete')
|
||||
onClick: openDeleteModal
|
||||
},
|
||||
{
|
||||
icon: isAllExpanded.value ? ChevronDoubleUpIcon : ChevronDoubleDownIcon,
|
||||
|
||||
Reference in New Issue
Block a user