import { fetchLibraries, fetchBooks, getBookCoverUrl, LibraryDto, BookDto } from "../../../../lib/api"; import { BooksGrid, EmptyState } from "../../../components/BookCard"; import { LibrarySubPageHeader } from "../../../components/LibrarySubPageHeader"; import { OffsetPagination } from "../../../components/ui"; import { notFound } from "next/navigation"; export const dynamic = "force-dynamic"; export default async function LibraryBooksPage({ params, searchParams }: { params: Promise<{ id: string }>; searchParams: Promise<{ [key: string]: string | string[] | undefined }>; }) { const { id } = await params; const searchParamsAwaited = await searchParams; const page = typeof searchParamsAwaited.page === "string" ? parseInt(searchParamsAwaited.page) : 1; const series = typeof searchParamsAwaited.series === "string" ? searchParamsAwaited.series : undefined; const limit = typeof searchParamsAwaited.limit === "string" ? parseInt(searchParamsAwaited.limit) : 20; const [library, booksPage] = await Promise.all([ fetchLibraries().then(libs => libs.find(l => l.id === id)), fetchBooks(id, series, page, limit).catch(() => ({ items: [] as BookDto[], total: 0, page: 1, limit, })) ]); if (!library) { notFound(); } const books = booksPage.items.map(book => ({ ...book, coverUrl: getBookCoverUrl(book.id) })); const seriesDisplayName = series === "unclassified" ? "Non classé" : series; const totalPages = Math.ceil(booksPage.total / limit); return (
} iconColor="text-success" filterInfo={series ? { label: `Livres de la série "${seriesDisplayName}"`, clearHref: `/libraries/${id}/books`, clearLabel: "Voir tous les livres" } : undefined} /> {books.length > 0 ? ( <> ) : ( )}
); }