import { useEffect, useState } from "react"; import { useParams, Link } from "react-router-dom"; import matter from "gray-matter"; import ReactMarkdown from "react-markdown"; import CodeSnippet from "../components/CodeSnippet"; import LinkWithIcon from "../components/LinkWithIcon"; import NotFoundPage from "./404Page"; interface PostMeta { title: string; date: string; cover?: string; } export default function Post() { const { slug } = useParams<{ slug: string }>(); const [meta, setMeta] = useState(null); const [content, setContent] = useState(""); const [notFound, setNotFound] = useState(false); useEffect(() => { import(`../blog/${slug}.md?raw`) .then((m) => { const { data, content } = matter(m.default); setMeta(data as PostMeta); setContent(content); }) .catch(() => setNotFound(true)); }, [slug]); if (!meta) return null; if (notFound) return ; return (
← Zurück zum Blog {meta.cover && ( {meta.title} )}

{meta.title}

{new Date(meta.date).toLocaleDateString("de-DE")}

; }, a({ href = "", children, ...props }) { return ( {children} ); }, }} > {content}
); }