"use client"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { useRef, useState } from "react"; import { Cover } from "@/components/ui/cover"; import { useRouter } from "next/navigation"; import { ClientOfflineBookService } from "@/lib/services/client-offlinebook.service"; import { KomgaBook } from "@/types/komga"; interface BaseItem { id: string; metadata: { title: string; }; } interface OptimizedSeries extends BaseItem { booksCount: number; booksReadCount: number; } interface OptimizedBook extends BaseItem { readProgress: { page: number; }; media: { pagesCount: number; }; metadata: { title: string; number?: string; }; } interface MediaRowProps { title: string; items: (OptimizedSeries | OptimizedBook)[]; icon?: React.ReactNode; } export function MediaRow({ title, items, icon }: MediaRowProps) { const scrollContainerRef = useRef(null); const [showLeftArrow, setShowLeftArrow] = useState(false); const [showRightArrow, setShowRightArrow] = useState(true); const router = useRouter(); const onItemClick = (item: OptimizedSeries | OptimizedBook) => { const path = "booksCount" in item ? `/series/${item.id}` : `/books/${item.id}`; router.push(path); }; const handleScroll = () => { if (!scrollContainerRef.current) return; const { scrollLeft, scrollWidth, clientWidth } = scrollContainerRef.current; setShowLeftArrow(scrollLeft > 0); setShowRightArrow(scrollLeft < scrollWidth - clientWidth - 10); }; const scroll = (direction: "left" | "right") => { if (!scrollContainerRef.current) return; const scrollAmount = direction === "left" ? -400 : 400; scrollContainerRef.current.scrollBy({ left: scrollAmount, behavior: "smooth" }); }; if (!items.length) return null; return (
{icon}

{title}

{/* Bouton de défilement gauche */} {showLeftArrow && ( )} {/* Conteneur défilant */}
{items.map((item) => ( onItemClick?.(item)} /> ))}
{/* Bouton de défilement droit */} {showRightArrow && ( )}
); } interface MediaCardProps { item: OptimizedSeries | OptimizedBook; onClick?: () => void; } function MediaCard({ item, onClick }: MediaCardProps) { const isSeries = "booksCount" in item; const title = isSeries ? item.metadata.title : item.metadata.title || `Tome ${item.metadata.number}`; return (
{isSeries ? ( ) : ( )} {/* Overlay avec les informations au survol */}

{title}

{isSeries && (

{item.booksCount} tome{item.booksCount > 1 ? "s" : ""}

)}
); }