Revert "feat: enhance ClientSeriesPage to utilize initial series and books props for improved data handling and loading state management"
This reverts commit 239ea19ac3.
This commit is contained in:
@@ -19,8 +19,6 @@ interface ClientSeriesPageProps {
|
|||||||
preferences: UserPreferences;
|
preferences: UserPreferences;
|
||||||
unreadOnly: boolean;
|
unreadOnly: boolean;
|
||||||
pageSize?: number;
|
pageSize?: number;
|
||||||
initialSeries: KomgaSeries;
|
|
||||||
initialBooks: LibraryResponse<KomgaBook>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_PAGE_SIZE = 20;
|
const DEFAULT_PAGE_SIZE = 20;
|
||||||
@@ -31,21 +29,48 @@ export function ClientSeriesPage({
|
|||||||
preferences,
|
preferences,
|
||||||
unreadOnly,
|
unreadOnly,
|
||||||
pageSize,
|
pageSize,
|
||||||
initialSeries,
|
|
||||||
initialBooks,
|
|
||||||
}: ClientSeriesPageProps) {
|
}: ClientSeriesPageProps) {
|
||||||
const [series, setSeries] = useState<KomgaSeries | null>(initialSeries);
|
const [series, setSeries] = useState<KomgaSeries | null>(null);
|
||||||
const [books, setBooks] = useState<LibraryResponse<KomgaBook> | null>(initialBooks);
|
const [books, setBooks] = useState<LibraryResponse<KomgaBook> | null>(null);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(true);
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
||||||
const effectivePageSize = pageSize || preferences.displayMode?.itemsPerPage || DEFAULT_PAGE_SIZE;
|
const effectivePageSize = pageSize || preferences.displayMode?.itemsPerPage || DEFAULT_PAGE_SIZE;
|
||||||
|
|
||||||
// Sync avec les props initiales quand elles changent (navigation via URL)
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setSeries(initialSeries);
|
const fetchData = async () => {
|
||||||
setBooks(initialBooks);
|
setLoading(true);
|
||||||
}, [initialSeries, initialBooks]);
|
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) => {
|
const handleRefresh = async (seriesId: string) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { PreferencesService } from "@/lib/services/preferences.service";
|
import { PreferencesService } from "@/lib/services/preferences.service";
|
||||||
import { SeriesService } from "@/lib/services/series.service";
|
|
||||||
import { ClientSeriesPage } from "./ClientSeriesPage";
|
import { ClientSeriesPage } from "./ClientSeriesPage";
|
||||||
import type { UserPreferences } from "@/types/preferences";
|
import type { UserPreferences } from "@/types/preferences";
|
||||||
|
|
||||||
@@ -8,8 +7,6 @@ interface PageProps {
|
|||||||
searchParams: Promise<{ page?: string; unread?: string; size?: string }>;
|
searchParams: Promise<{ page?: string; unread?: string; size?: string }>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_PAGE_SIZE = 20;
|
|
||||||
|
|
||||||
export default async function SeriesPage({ params, searchParams }: PageProps) {
|
export default async function SeriesPage({ params, searchParams }: PageProps) {
|
||||||
const seriesId = (await params).seriesId;
|
const seriesId = (await params).seriesId;
|
||||||
const page = (await searchParams).page;
|
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
|
// 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 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 (
|
return (
|
||||||
<ClientSeriesPage
|
<ClientSeriesPage
|
||||||
@@ -37,9 +25,7 @@ export default async function SeriesPage({ params, searchParams }: PageProps) {
|
|||||||
currentPage={currentPage}
|
currentPage={currentPage}
|
||||||
preferences={preferences}
|
preferences={preferences}
|
||||||
unreadOnly={unreadOnly}
|
unreadOnly={unreadOnly}
|
||||||
pageSize={effectivePageSize}
|
pageSize={size ? parseInt(size) : undefined}
|
||||||
initialSeries={series}
|
|
||||||
initialBooks={books}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ export class SeriesService extends BaseApiService {
|
|||||||
{
|
{
|
||||||
path: "books/list",
|
path: "books/list",
|
||||||
params: {
|
params: {
|
||||||
size: "5000", // On récupère un maximum de livres
|
size: "1000", // On récupère un maximum de livres
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
headers,
|
headers,
|
||||||
|
|||||||
Reference in New Issue
Block a user