"use client"; import { BookGrid } from "./BookGrid"; import { Pagination } from "@/components/ui/Pagination"; import { useRouter, usePathname, useSearchParams } from "next/navigation"; import { useState, useEffect } from "react"; import { Loader2, Filter } from "lucide-react"; import { cn } from "@/lib/utils"; import { KomgaBook } from "@/types/komga"; interface PaginatedBookGridProps { books: KomgaBook[]; currentPage: number; totalPages: number; totalElements: number; pageSize: number; } export function PaginatedBookGrid({ books, currentPage, totalPages, totalElements, pageSize, }: PaginatedBookGridProps) { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const [isChangingPage, setIsChangingPage] = useState(false); const [showOnlyUnread, setShowOnlyUnread] = useState(searchParams.get("unread") === "true"); // Réinitialiser l'état de chargement quand les tomes changent useEffect(() => { setIsChangingPage(false); }, [books]); const handlePageChange = (page: number) => { setIsChangingPage(true); // Créer un nouvel objet URLSearchParams pour manipuler les paramètres const params = new URLSearchParams(searchParams); params.set("page", page.toString()); if (showOnlyUnread) { params.set("unread", "true"); } // Rediriger vers la nouvelle URL avec les paramètres mis à jour router.push(`${pathname}?${params.toString()}`); }; const handleUnreadFilter = () => { setIsChangingPage(true); const params = new URLSearchParams(searchParams); params.set("page", "1"); // Retourner à la première page lors du changement de filtre if (!showOnlyUnread) { params.set("unread", "true"); } else { params.delete("unread"); } setShowOnlyUnread(!showOnlyUnread); router.push(`${pathname}?${params.toString()}`); }; const handleBookClick = (book: KomgaBook) => { console.log("PaginatedBookGrid - handleBookClick:", { bookId: book.id, bookTitle: book.metadata.title, }); router.push(`/books/${book.id}`); }; // Calcul des indices de début et de fin pour l'affichage const startIndex = (currentPage - 1) * pageSize + 1; const endIndex = Math.min(currentPage * pageSize, totalElements); const getBookThumbnailUrl = (bookId: string) => { return `/api/komga/images/books/${bookId}/thumbnail`; }; return (
{totalElements > 0 ? ( <> Affichage des tomes {startIndex} à{" "} {endIndex} sur{" "} {totalElements} > ) : ( "Aucun tome trouvé" )}
Page {currentPage} sur {totalPages}