"use client"; import { useState } from "react"; import { useParams, useRouter } from "next/navigation"; import Image from "next/image"; import { ArrowLeft, Star, Calendar, Database, BookOpen, ChevronDown, } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent } from "@/components/ui/card"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { ThemeToggle } from "@/components/theme-toggle"; import { useFetchMangaChapters, useGetManga } from "@/api/mangamochi"; import { MangaChapter } from "@/components/manga-chapter"; import { useQueryClient } from "@tanstack/react-query"; export default function MangaDetailPage() { const params = useParams(); const router = useRouter(); const mangaId = Number(params.id); const queryClient = useQueryClient(); const { data: mangaData, queryKey } = useGetManga(mangaId); const { mutate, isPending } = useFetchMangaChapters({ mutation: { onSuccess: () => queryClient.invalidateQueries({ queryKey }), }, }); const [openProviders, setOpenProviders] = useState>(new Set()); if (!mangaData) { return (

Manga not found

); } const toggleProvider = (providerId: number) => { setOpenProviders((prev) => { const next = new Set(prev); if (next.has(providerId)) { next.delete(providerId); } else { next.add(providerId); } return next; }); }; const author = mangaData.data?.authors.join(", "); const formatter = new Intl.DateTimeFormat("en-US", { month: "2-digit", day: "2-digit", year: "numeric", }); const publishedTo = mangaData.data?.publishedTo ? formatter.format(new Date(mangaData.data.publishedTo)) : null; const publishedFrom = mangaData.data?.publishedFrom ? formatter.format(new Date(mangaData.data.publishedFrom)) : null; const dateRange = publishedTo ? `${publishedFrom} - ${publishedTo}` : `${publishedFrom} - Present`; return (
{/* Header */}

MangaMochi

{/* Content */}
{/* Manga Info Section */}
{/* Cover */}
{mangaData.data?.title
{/* Details */}

{mangaData.data?.title}

{mangaData.data?.status}

{author}

{mangaData.data?.alternativeTitles && mangaData.data?.alternativeTitles.length > 0 && (

Alternative Titles

{mangaData.data?.alternativeTitles.map((title, index) => ( {title} ))}
)}

{mangaData.data?.synopsis}

Rating

{mangaData.data?.score && mangaData.data?.score > 0 ? mangaData.data?.score : "-"}

Chapters

{mangaData.data?.chapterCount && mangaData.data?.chapterCount > 0 ? mangaData.data?.chapterCount : "-"}

Published

{dateRange}

Providers

{mangaData.data?.providerCount}

{mangaData.data?.genres.map((genre) => ( {genre} ))}

Chapters by Provider

{mangaData.data?.providers.map((provider) => ( toggleProvider(provider.id)} >

{provider.providerName}

{provider.chaptersDownloaded} downloaded •{" "} {provider.chaptersAvailable} available

{provider.supportsChapterFetch && (
)}
))}
); }