From 4c4ebf2b0688af18a5e7e9da74e79a062c6c8dd0 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sun, 7 Dec 2025 10:10:55 +0100 Subject: [PATCH] Revert "feat: enhance ClientSeriesPage to utilize initial series and books props for improved data handling and loading state management" This reverts commit 239ea19ac3e3096ceb9b8cfc5e1188c04386272a. --- .../series/[seriesId]/ClientSeriesPage.tsx | 47 ++++++++++++++----- src/app/series/[seriesId]/page.tsx | 16 +------ src/lib/services/series.service.ts | 2 +- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/app/series/[seriesId]/ClientSeriesPage.tsx b/src/app/series/[seriesId]/ClientSeriesPage.tsx index dc2f6aa..1678db1 100644 --- a/src/app/series/[seriesId]/ClientSeriesPage.tsx +++ b/src/app/series/[seriesId]/ClientSeriesPage.tsx @@ -19,8 +19,6 @@ interface ClientSeriesPageProps { preferences: UserPreferences; unreadOnly: boolean; pageSize?: number; - initialSeries: KomgaSeries; - initialBooks: LibraryResponse; } const DEFAULT_PAGE_SIZE = 20; @@ -31,21 +29,48 @@ export function ClientSeriesPage({ preferences, unreadOnly, pageSize, - initialSeries, - initialBooks, }: ClientSeriesPageProps) { - const [series, setSeries] = useState(initialSeries); - const [books, setBooks] = useState | null>(initialBooks); - const [loading, setLoading] = useState(false); + const [series, setSeries] = useState(null); + const [books, setBooks] = useState | null>(null); + const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const effectivePageSize = pageSize || preferences.displayMode?.itemsPerPage || DEFAULT_PAGE_SIZE; - // Sync avec les props initiales quand elles changent (navigation via URL) useEffect(() => { - setSeries(initialSeries); - setBooks(initialBooks); - }, [initialSeries, initialBooks]); + const fetchData = async () => { + setLoading(true); + setError(null); + + try { + const params = new URLSearchParams({ + page: String(currentPage - 1), + size: String(effectivePageSize), + unread: String(unreadOnly), + }); + + const response = await fetch(`/api/komga/series/${seriesId}/books?${params}`, { + cache: "default", // Utilise le cache HTTP du navigateur + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error?.code || ERROR_CODES.BOOK.PAGES_FETCH_ERROR); + } + + const data = await response.json(); + setSeries(data.series); + setBooks(data.books); + } catch (err) { + logger.error({ err }, "Error fetching series books"); + setError(err instanceof Error ? err.message : ERROR_CODES.BOOK.PAGES_FETCH_ERROR); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [seriesId, currentPage, unreadOnly, effectivePageSize]); const handleRefresh = async (seriesId: string) => { try { diff --git a/src/app/series/[seriesId]/page.tsx b/src/app/series/[seriesId]/page.tsx index cb12901..28a819c 100644 --- a/src/app/series/[seriesId]/page.tsx +++ b/src/app/series/[seriesId]/page.tsx @@ -1,5 +1,4 @@ import { PreferencesService } from "@/lib/services/preferences.service"; -import { SeriesService } from "@/lib/services/series.service"; import { ClientSeriesPage } from "./ClientSeriesPage"; import type { UserPreferences } from "@/types/preferences"; @@ -8,8 +7,6 @@ interface PageProps { searchParams: Promise<{ page?: string; unread?: string; size?: string }>; } -const DEFAULT_PAGE_SIZE = 20; - export default async function SeriesPage({ params, searchParams }: PageProps) { const seriesId = (await params).seriesId; const page = (await searchParams).page; @@ -21,15 +18,6 @@ export default async function SeriesPage({ params, searchParams }: PageProps) { // Utiliser le paramètre d'URL s'il existe, sinon utiliser la préférence utilisateur const unreadOnly = unread !== undefined ? unread === "true" : preferences.showOnlyUnread; - const effectivePageSize = size - ? parseInt(size) - : preferences.displayMode?.itemsPerPage || DEFAULT_PAGE_SIZE; - - // Fetch côté serveur - const [books, series] = await Promise.all([ - SeriesService.getSeriesBooks(seriesId, currentPage - 1, effectivePageSize, unreadOnly), - SeriesService.getSeries(seriesId), - ]); return ( ); } diff --git a/src/lib/services/series.service.ts b/src/lib/services/series.service.ts index a2143d0..e8d0f72 100644 --- a/src/lib/services/series.service.ts +++ b/src/lib/services/series.service.ts @@ -66,7 +66,7 @@ export class SeriesService extends BaseApiService { { path: "books/list", params: { - size: "5000", // On récupère un maximum de livres + size: "1000", // On récupère un maximum de livres }, }, headers,