"use client"; import { KomgaBook } from "@/types/komga"; import { ImageOff } from "lucide-react"; import Image from "next/image"; import { useState } from "react"; interface BookGridProps { books: KomgaBook[]; onBookClick?: (book: KomgaBook) => void; getBookThumbnailUrl: (bookId: string) => string; } export function BookGrid({ books, onBookClick, getBookThumbnailUrl }: BookGridProps) { if (!books.length) { return (

Aucun tome disponible

); } return (
{books.map((book) => ( onBookClick?.(book)} getBookThumbnailUrl={getBookThumbnailUrl} /> ))}
); } interface BookCardProps { book: KomgaBook; onClick?: () => void; getBookThumbnailUrl: (bookId: string) => string; } function BookCard({ book, onClick, getBookThumbnailUrl }: BookCardProps) { const [imageError, setImageError] = useState(false); const getReadingStatusInfo = () => { if (!book.readProgress) { return { label: "Non lu", className: "bg-yellow-500/10 text-yellow-500", }; } if (book.readProgress.completed) { const readDate = book.readProgress.readDate ? new Date(book.readProgress.readDate).toLocaleDateString() : null; return { label: readDate ? `Lu le ${readDate}` : "Lu", className: "bg-green-500/10 text-green-500", }; } if (book.readProgress.page > 0) { return { label: `Page ${book.readProgress.page}/${book.media.pagesCount}`, className: "bg-blue-500/10 text-blue-500", }; } return { label: "Non lu", className: "bg-yellow-500/10 text-yellow-500", }; }; const statusInfo = getReadingStatusInfo(); return ( ); }