"use client"; import { useRouter } from "next/navigation"; import type { NormalizedBook, NormalizedSeries } from "@/lib/providers/types"; import { BookCover } from "../ui/book-cover"; import { SeriesCover } from "../ui/series-cover"; import { useTranslate } from "@/hooks/useTranslate"; import { ScrollContainer } from "@/components/ui/scroll-container"; import { Section } from "@/components/ui/section"; import { History, Sparkles, Clock, LibraryBig, BookOpen } from "lucide-react"; import { Card } from "@/components/ui/card"; import { useBookOfflineStatus } from "@/hooks/useBookOfflineStatus"; import { cn } from "@/lib/utils"; interface MediaRowProps { titleKey: string; items: (NormalizedSeries | NormalizedBook)[]; iconName?: string; featuredHeader?: boolean; } const iconMap = { LibraryBig, BookOpen, Clock, Sparkles, History, }; function isSeries(item: NormalizedSeries | NormalizedBook): item is NormalizedSeries { return "bookCount" in item; } export function MediaRow({ titleKey, items, iconName, featuredHeader = false }: MediaRowProps) { const router = useRouter(); const { t } = useTranslate(); const icon = iconName ? iconMap[iconName as keyof typeof iconMap] : undefined; const onItemClick = (item: NormalizedSeries | NormalizedBook) => { const path = isSeries(item) ? `/series/${item.id}` : `/books/${item.id}`; router.push(path); }; if (!items.length) return null; return ( {items.map((item) => ( onItemClick?.(item)} /> ))} ); } interface MediaCardProps { item: NormalizedSeries | NormalizedBook; onClick?: () => void; } function MediaCard({ item, onClick }: MediaCardProps) { const { t } = useTranslate(); const isSeriesItem = isSeries(item); const { isAccessible } = useBookOfflineStatus(isSeriesItem ? "" : item.id); const title = isSeriesItem ? item.name : item.title || (item.number ? t("navigation.volume", { number: item.number }) : ""); const handleClick = () => { // Pour les séries, toujours autoriser le clic // Pour les livres, vérifier si accessible if (isSeriesItem || isAccessible) { onClick?.(); } }; return ( {isSeriesItem ? ( <> {title} {t("series.books", { count: item.bookCount })} > ) : ( <> > )} ); }
{t("series.books", { count: item.bookCount })}