89 lines
2.3 KiB
TypeScript
89 lines
2.3 KiB
TypeScript
import Link from "next/link";
|
|
import { PageHeader } from "@/components/page-header";
|
|
import { notFound } from "next/navigation";
|
|
import { getBookMeta, getSingleVerse, getChapterVerseIndex } from "@/lib/api";
|
|
import { ChapterViewer } from "@/app/books/chapter-viewer";
|
|
|
|
type ChapterInfo = {
|
|
number: number;
|
|
title: string;
|
|
totalVerses: number;
|
|
};
|
|
|
|
type LilaInfo = {
|
|
key: string;
|
|
name: string;
|
|
totalChapters: number;
|
|
totalVerses: number;
|
|
chapters: ChapterInfo[];
|
|
};
|
|
|
|
export default async function CcChapterPage({
|
|
params,
|
|
searchParams,
|
|
}: {
|
|
params: Promise<{ lila: string; chapter: string }>;
|
|
searchParams: Promise<{ verse?: string }>;
|
|
}) {
|
|
const { lila, chapter } = await params;
|
|
const { verse: verseParam } = await searchParams;
|
|
|
|
const meta = await getBookMeta("cc");
|
|
if (!meta) notFound();
|
|
|
|
const lilas = meta.lilas as LilaInfo[] | undefined;
|
|
const lilaInfo = lilas?.find((l) => l.key === lila);
|
|
if (!lilaInfo) notFound();
|
|
|
|
const chapterInfo = lilaInfo.chapters.find(
|
|
(ch) => ch.number === parseInt(chapter),
|
|
);
|
|
if (!chapterInfo) notFound();
|
|
|
|
const verseIndex = await getChapterVerseIndex("cc", lila, parseInt(chapter));
|
|
if (verseIndex.length === 0) notFound();
|
|
|
|
const requestedVerse = verseParam
|
|
? parseInt(verseParam)
|
|
: verseIndex[0].verse;
|
|
const verse = await getSingleVerse(
|
|
"cc",
|
|
lila,
|
|
parseInt(chapter),
|
|
requestedVerse,
|
|
);
|
|
if (!verse) notFound();
|
|
|
|
return (
|
|
<div className="min-h-screen bg-background">
|
|
<PageHeader sticky wide>
|
|
<Link
|
|
href={`/books/cc/${lila}`}
|
|
className="text-sm text-muted-foreground hover:text-foreground"
|
|
>
|
|
← {lilaInfo.name}
|
|
</Link>
|
|
<h1 className="mt-2 text-2xl font-bold text-foreground">
|
|
Chapter {chapter}: {chapterInfo.title}
|
|
</h1>
|
|
</PageHeader>
|
|
|
|
<div className="w-full md:max-w-7xl mx-auto flex">
|
|
<ChapterViewer
|
|
initialVerse={verse}
|
|
initialVerseNum={requestedVerse}
|
|
verseIndex={verseIndex.map((v) => ({
|
|
verse: v.verse,
|
|
verseEnd: v.verseEnd ?? undefined,
|
|
reference: v.reference,
|
|
}))}
|
|
book="cc"
|
|
division={lila}
|
|
chapter={parseInt(chapter)}
|
|
showBengali={true}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|