返回 CodeWhale
page.tsx
根目录 / web / app / [locale] / ratatui / page.tsx
1 import Link from "next/link";
2 import { PageHeader } from "@/components/page-header";
3 import { RatatuiExplorer } from "@/components/ratatui/explorer";
4 import { RatatuiHero } from "@/components/ratatui/hero";
5 import { RatatuiProjectLinks } from "@/components/ratatui/project-links";
6 import { RatatuiQuickstart } from "@/components/ratatui/quickstart";
7 import { getRatatuiCopy } from "@/lib/content/ratatui";
8 import { buildPageMetadata } from "@/lib/page-meta";
9 import { readCatalogue } from "@/lib/ratatui/catalogue";
10
11 const REPOSITORY = "https://github.com/codewhale-hq/codewhale-ratatui";
12
13 export const revalidate = 3600;
14
15 export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
16 const { locale } = await params;
17 const copy = getRatatuiCopy(locale);
18 return buildPageMetadata({
19 path: "/ratatui",
20 locale,
21 title: copy.metaTitle,
22 description: copy.metaDescription,
23 });
24 }
25
26 export default async function RatatuiPage({ params }: { params: Promise<{ locale: string }> }) {
27 const { locale } = await params;
28 const copy = getRatatuiCopy(locale);
29 const catalogue = await readCatalogue();
30
31 return (
32 <div className="ratatui-page">
33 <PageHeader
34 title={copy.title}
35 lede={copy.intro}
36 actions={
37 <>
38 <a href="#ratatui-install" className="btn btn-primary">{copy.install}</a>
39 <Link href={REPOSITORY} className="btn btn-secondary">{copy.repository}</Link>
40 </>
41 }
42 />
43 <RatatuiHero locale={locale} copy={copy} />
44 <RatatuiQuickstart copy={copy} />
45 <RatatuiExplorer catalogue={catalogue} locale={locale} copy={copy} />
46 <RatatuiProjectLinks revision={catalogue.source.revision} copy={copy} />
47 </div>
48 );
49 }
50
50 lines Plain Text