From 73ef9de818c2d1a8eac0ffcebe909aa39ac90583 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Wed, 26 Feb 2025 09:17:52 +0100 Subject: [PATCH] feat: adding a carou for books on going --- src/components/home/HomeContent.tsx | 17 +++++++++++++---- src/components/home/MediaRow.tsx | 8 ++++++++ src/lib/services/home.service.ts | 21 +++++++++++++++++++-- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/components/home/HomeContent.tsx b/src/components/home/HomeContent.tsx index b2731f0..b974b6f 100644 --- a/src/components/home/HomeContent.tsx +++ b/src/components/home/HomeContent.tsx @@ -2,10 +2,11 @@ import { HeroSection } from "./HeroSection"; import { MediaRow } from "./MediaRow"; import { KomgaBook, KomgaSeries } from "@/types/komga"; import { RefreshButton } from "@/components/library/RefreshButton"; -import { BookOpenCheck, History, Sparkles, Clock } from "lucide-react"; +import { BookOpenCheck, History, Sparkles, Clock, LibraryBig, BookOpen } from "lucide-react"; interface HomeData { ongoing: KomgaSeries[]; + ongoingBooks: KomgaBook[]; recentlyRead: KomgaBook[]; onDeck: KomgaBook[]; latestSeries: KomgaSeries[]; @@ -49,7 +50,7 @@ export function HomeContent({ data, refreshHome }: HomeContentProps) { title: metadata.title, number: metadata.number, }, - readProgress, + readProgress: readProgress || { page: 0 }, media })); }; @@ -69,9 +70,17 @@ export function HomeContent({ data, refreshHome }: HomeContentProps) {
{data.ongoing && data.ongoing.length > 0 && ( } + icon={} + /> + )} + + {data.ongoingBooks && data.ongoingBooks.length > 0 && ( + } /> )} diff --git a/src/components/home/MediaRow.tsx b/src/components/home/MediaRow.tsx index 2dd83f1..de04f2c 100644 --- a/src/components/home/MediaRow.tsx +++ b/src/components/home/MediaRow.tsx @@ -18,6 +18,12 @@ interface OptimizedSeries extends BaseItem { } interface OptimizedBook extends BaseItem { + readProgress:{ + page: number + } + media: { + pagesCount: number; + } metadata: { title: string; number?: string; @@ -128,6 +134,8 @@ function MediaCard({ item, onClick }: MediaCardProps) { readBooks={isSeries ? item.booksReadCount : undefined} totalBooks={isSeries ? item.booksCount : undefined} isCompleted={isSeries ? item.booksCount === item.booksReadCount : undefined} + currentPage={isSeries ? undefined : item.readProgress?.page} + totalPages={isSeries ? undefined : item.media?.pagesCount} /> {/* Overlay avec les informations au survol */}
diff --git a/src/lib/services/home.service.ts b/src/lib/services/home.service.ts index 5cc46aa..f70f362 100644 --- a/src/lib/services/home.service.ts +++ b/src/lib/services/home.service.ts @@ -7,6 +7,7 @@ import { AppError } from "../../utils/errors"; interface HomeData { ongoing: KomgaSeries[]; + ongoingBooks: KomgaBook[]; // Nouveau champ recentlyRead: KomgaBook[]; onDeck: KomgaBook[]; latestSeries: KomgaSeries[]; @@ -15,8 +16,7 @@ interface HomeData { export class HomeService extends BaseApiService { static async getHomeData(): Promise { try { - // Appels API parallèles avec cache individuel - const [ongoing, recentlyRead, onDeck, latestSeries] = await Promise.all([ + const [ongoing, ongoingBooks, recentlyRead, onDeck, latestSeries] = await Promise.all([ this.fetchWithCache>( "home-ongoing", async () => @@ -32,6 +32,21 @@ export class HomeService extends BaseApiService { }), "HOME" ), + this.fetchWithCache>( + "home-ongoing-books", + async () => + this.fetchFromApi>({ + path: "books", + params: { + read_status: "IN_PROGRESS", + sort: "readProgress.readDate,desc", + page: "0", + size: "10", + media_status: "READY", + }, + }), + "HOME" + ), this.fetchWithCache>( "home-recently-read", async () => @@ -75,6 +90,7 @@ export class HomeService extends BaseApiService { return { ongoing: ongoing.content || [], + ongoingBooks: ongoingBooks.content || [], // Nouveau champ recentlyRead: recentlyRead.content || [], onDeck: onDeck.content || [], latestSeries: latestSeries.content || [], @@ -88,6 +104,7 @@ export class HomeService extends BaseApiService { try { const cacheService = await getServerCacheService(); await cacheService.delete("home-ongoing"); + await cacheService.delete("home-ongoing-books"); // Nouvelle clé de cache await cacheService.delete("home-recently-read"); await cacheService.delete("home-on-deck"); await cacheService.delete("home-latest-series");