48 lines
1.0 KiB
Plaintext
48 lines
1.0 KiB
Plaintext
---
|
||
import { type CollectionEntry, getCollection } from "astro:content";
|
||
import Comments from "../../components/Comments.astro";
|
||
import Layout from "../../layouts/PageLayout.astro";
|
||
|
||
export async function getStaticPaths() {
|
||
const posts = await getCollection("blog");
|
||
return posts.map((post) => ({
|
||
params: { slug: post.slug },
|
||
props: post,
|
||
}));
|
||
}
|
||
type Props = CollectionEntry<"blog">;
|
||
|
||
const post = Astro.props;
|
||
const { Content, remarkPluginFrontmatter } = await post.render();
|
||
---
|
||
|
||
<style>
|
||
.header {
|
||
text-align: center;
|
||
}
|
||
</style>
|
||
|
||
<Layout title={post.data.title} description={post.data.description}>
|
||
<article>
|
||
<section class="header">
|
||
<h1>{post.data.title}</h1>
|
||
<p>
|
||
<small>
|
||
Posted
|
||
<time datetime={post.data.pubDate.toISOString()}>{post.data.pubDate.toDateString()}</time>
|
||
by {post.data.author} ‐
|
||
<strong>{remarkPluginFrontmatter.minutesRead}</strong>
|
||
</small>
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<Content />
|
||
</section>
|
||
|
||
<section>
|
||
<Comments />
|
||
</section>
|
||
</article>
|
||
</Layout>
|