import { fetchLibraries, fetchSeries, fetchSeriesStatuses, getBookCoverUrl, LibraryDto, SeriesDto, SeriesPageDto } from "../../../../lib/api"; import { OffsetPagination } from "../../../components/ui"; import { MarkSeriesReadButton } from "../../../components/MarkSeriesReadButton"; import { SeriesFilters } from "../../../components/SeriesFilters"; import Image from "next/image"; import Link from "next/link"; import { notFound } from "next/navigation"; import { LibrarySubPageHeader } from "../../../components/LibrarySubPageHeader"; export const dynamic = "force-dynamic"; export default async function LibrarySeriesPage({ 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 limit = typeof searchParamsAwaited.limit === "string" ? parseInt(searchParamsAwaited.limit) : 20; const seriesStatus = typeof searchParamsAwaited.series_status === "string" ? searchParamsAwaited.series_status : undefined; const hasMissing = searchParamsAwaited.has_missing === "true"; const [library, seriesPage, dbStatuses] = await Promise.all([ fetchLibraries().then(libs => libs.find(l => l.id === id)), fetchSeries(id, page, limit, seriesStatus, hasMissing).catch(() => ({ items: [] as SeriesDto[], total: 0, page: 1, limit }) as SeriesPageDto), fetchSeriesStatuses().catch(() => [] as string[]), ]); if (!library) { notFound(); } const series = seriesPage.items; const totalPages = Math.ceil(seriesPage.total / limit); const KNOWN_STATUSES: Record = { ongoing: "En cours", ended: "Terminée", hiatus: "Hiatus", cancelled: "Annulée", upcoming: "À paraître", }; const seriesStatusOptions = [ { value: "", label: "Tous les statuts" }, ...dbStatuses.map((s) => ({ value: s, label: KNOWN_STATUSES[s] || s })), ]; return (
} iconColor="text-primary" /> {series.length > 0 ? ( <>
{series.map((s) => (
= s.book_count ? "opacity-50" : ""}`}>
{`Couverture

{s.name === "unclassified" ? "Non classé" : s.name}

{s.books_read_count}/{s.book_count} lu{s.book_count !== 1 ? 's' : ''}

{s.series_status && ( {s.series_status === "ongoing" ? "En cours" : s.series_status === "ended" ? "Terminée" : s.series_status === "hiatus" ? "Hiatus" : s.series_status === "cancelled" ? "Annulée" : s.series_status === "upcoming" ? "À paraître" : s.series_status} )} {s.missing_count != null && s.missing_count > 0 && ( {s.missing_count} manquant{s.missing_count > 1 ? "s" : ""} )}
))}
) : (

Aucune série trouvée dans cette bibliothèque

)}
); }