diff --git a/src/components/library/PaginatedSeriesGrid.tsx b/src/components/library/PaginatedSeriesGrid.tsx index 3238f0d..0030c85 100644 --- a/src/components/library/PaginatedSeriesGrid.tsx +++ b/src/components/library/PaginatedSeriesGrid.tsx @@ -122,7 +122,7 @@ export function PaginatedSeriesGrid({
- {viewMode === "grid" && } +
@@ -131,7 +131,7 @@ export function PaginatedSeriesGrid({ {viewMode === "grid" ? ( ) : ( - + )}
diff --git a/src/components/library/SeriesList.tsx b/src/components/library/SeriesList.tsx index 9d5af38..17201aa 100644 --- a/src/components/library/SeriesList.tsx +++ b/src/components/library/SeriesList.tsx @@ -11,10 +11,12 @@ import { formatDate } from "@/lib/utils"; interface SeriesListProps { series: KomgaSeries[]; + isCompact?: boolean; } interface SeriesListItemProps { series: KomgaSeries; + isCompact?: boolean; } // Utility function to get reading status info @@ -49,7 +51,7 @@ const getReadingStatusInfo = (series: KomgaSeries, t: (key: string, options?: an }; }; -function SeriesListItem({ series }: SeriesListItemProps) { +function SeriesListItem({ series, isCompact = false }: SeriesListItemProps) { const router = useRouter(); const { t } = useTranslate(); @@ -64,6 +66,60 @@ function SeriesListItem({ series }: SeriesListItemProps) { const statusInfo = getReadingStatusInfo(series, t); + if (isCompact) { + return ( +
+ {/* Couverture compacte */} +
+ +
+ + {/* Contenu compact */} +
+ {/* Titre et statut */} +
+

+ {series.metadata.title} +

+ + {statusInfo.label} + +
+ + {/* Métadonnées minimales */} +
+
+ + + {series.booksCount === 1 + ? t("series.book", { count: 1 }) + : t("series.books", { count: series.booksCount })} + +
+ {series.booksMetadata?.authors && series.booksMetadata.authors.length > 0 && ( +
+ + + {series.booksMetadata.authors[0].name} + +
+ )} +
+
+
+ ); + } + return (
+
{series.map((seriesItem) => ( - + ))}
); diff --git a/src/components/series/BookList.tsx b/src/components/series/BookList.tsx index ce99ea3..beeb349 100644 --- a/src/components/series/BookList.tsx +++ b/src/components/series/BookList.tsx @@ -17,15 +17,17 @@ import { BookOfflineButton } from "@/components/ui/book-offline-button"; interface BookListProps { books: KomgaBook[]; onBookClick: (book: KomgaBook) => void; + isCompact?: boolean; } interface BookListItemProps { book: KomgaBook; onBookClick: (book: KomgaBook) => void; onSuccess: (book: KomgaBook, action: "read" | "unread") => void; + isCompact?: boolean; } -function BookListItem({ book, onBookClick, onSuccess }: BookListItemProps) { +function BookListItem({ book, onBookClick, onSuccess, isCompact = false }: BookListItemProps) { const { t } = useTranslate(); const { isAccessible } = useBookOfflineStatus(book.id); @@ -78,6 +80,74 @@ function BookListItem({ book, onBookClick, onSuccess }: BookListItemProps) { ? t("navigation.volume", { number: book.metadata.number }) : book.name); + if (isCompact) { + return ( +
+ {/* Couverture compacte */} +
+ +
+ + {/* Contenu compact */} +
+ {/* Titre et statut */} +
+

+ {title} +

+ + {statusInfo.label} + +
+ + {/* Métadonnées minimales */} +
+ {book.metadata.number && ( + {t("navigation.volume", { number: book.metadata.number })} + )} +
+ + + {totalPages} {totalPages > 1 ? t("books.pages_plural") : t("books.pages")} + +
+ {book.metadata.authors && book.metadata.authors.length > 0 && ( +
+ + + {book.metadata.authors[0].name} + +
+ )} +
+
+
+ ); + } + return (
+
{localBooks.map((book) => ( ))}
diff --git a/src/components/series/PaginatedBookGrid.tsx b/src/components/series/PaginatedBookGrid.tsx index 2031161..4b63788 100644 --- a/src/components/series/PaginatedBookGrid.tsx +++ b/src/components/series/PaginatedBookGrid.tsx @@ -115,7 +115,7 @@ export function PaginatedBookGrid({
- {viewMode === "grid" && } +
@@ -123,7 +123,7 @@ export function PaginatedBookGrid({ {viewMode === "grid" ? ( ) : ( - + )}