Files
zhimingge/app/learn/other/[slug]/page.tsx
T
dekun 9fc7336095 Tighten ultrawide layout with visible side gutters.
Cap content at 768-960px via PageShell width tiers, add muted outer margins, and limit gua grid to four columns.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-11 00:26:59 +08:00

65 lines
1.8 KiB
TypeScript

import Link from "next/link";
import { notFound } from "next/navigation";
import PageShell from "@/components/page-shell";
import GuaFooter from "@/components/learn/gua-footer";
import MarkdownContent from "@/components/learn/markdown-content";
import {
getGuaName,
getGuaNumber,
guaNumFromMark,
listGuaMarks,
markFromNum,
readLearnMarkdown,
stripFrontmatter,
} from "@/lib/content/zhouyi";
async function resolveGuaMark(slug: string): Promise<string | null> {
const decoded = decodeURIComponent(slug);
if (/^\d{1,2}$/.test(decoded)) {
return markFromNum(decoded, "simplified");
}
const marks = await listGuaMarks("simplified");
if (marks.includes(decoded)) {
return decoded;
}
return null;
}
export async function generateStaticParams() {
return Array.from({ length: 64 }, (_, i) => ({
slug: String(i + 1).padStart(2, "0"),
}));
}
export const dynamicParams = true;
export default async function GuaOtherDetailPage({
params,
}: {
params: Promise<{ slug: string }>;
}) {
const { slug } = await params;
const guaMark = await resolveGuaMark(slug);
if (!guaMark) {
notFound();
}
const raw = await readLearnMarkdown(guaMark, "simplified");
const content = stripFrontmatter(raw);
return (
<PageShell width="narrow" className="py-8">
<div className="mb-6 text-sm text-muted-foreground">
<Link href="/learn/other" className="hover:text-foreground">
</Link>
</div>
<div className="mb-4 text-sm text-muted-foreground">
{getGuaNumber(guaMark)} · {getGuaName(guaMark)}
</div>
<MarkdownContent content={content} variant="simplified" guaMark={guaMark} />
<GuaFooter guaMark={guaMark} guaNum={guaNumFromMark(guaMark)} />
</PageShell>
);
}