exocore-docs / src /pages /DocPage.tsx
ChoruYt's picture
Upload 151 files
dc2b30a verified
Raw
History Blame Contribute Delete
2.32 kB
import { useParams, Link, Navigate } from "react-router-dom";
import { findBySlug, DOCS } from "../lib/docs";
import { MarkdownView } from "../components/MarkdownView";
import { SearchBox } from "../components/SearchBox";
export function DocPage() {
const params = useParams();
// React-Router's `*` wildcard arrives as params["*"]
const raw = params["*"] || "";
const doc = findBySlug(raw) || findBySlug(raw + "/");
if (!doc) return <Navigate to="/404" replace />;
// Build an in-page sibling list: the next/prev doc inside the same section.
const idx = DOCS.findIndex((d) => d.slug === doc.slug);
const prev = idx > 0 ? DOCS[idx - 1] : null;
const next = idx < DOCS.length - 1 ? DOCS[idx + 1] : null;
return (
<div className="doc-page">
<nav className="breadcrumb" aria-label="Breadcrumb">
<Link to="/">Home</Link>
{doc.breadcrumbs.map((b, i) => (
<span key={i} className="crumb">
<span className="crumb-sep">/</span>
<span>{b}</span>
</span>
))}
</nav>
<div className="doc-page-search">
<SearchBox placeholder="Search inside the docs…" />
</div>
<MarkdownView body={doc.body} baseSlug={doc.slug} />
<nav className="doc-pager" aria-label="Document navigation">
<div className="doc-pager-cell">
{prev && (
<Link to={`/docs/${prev.slug}`} className="doc-pager-link prev">
<span className="doc-pager-dir">← Previous</span>
<span className="doc-pager-title">{prev.title}</span>
</Link>
)}
</div>
<div className="doc-pager-cell right">
{next && (
<Link to={`/docs/${next.slug}`} className="doc-pager-link next">
<span className="doc-pager-dir">Next →</span>
<span className="doc-pager-title">{next.title}</span>
</Link>
)}
</div>
</nav>
</div>
);
}