--- import { type CollectionEntry, getCollection } from 'astro:content' import Layout from '@layouts/Layout.astro' import Container from '@components/Container.astro' import FormattedDate from '@components/FormattedDate.astro' import { readingTime } from '@lib/utils' import BackToPrevious from '@components/BackToPrevious.astro' import PostNavigation from '@components/PostNavigation.astro' import TableOfContents from '@components/TableOfContents.astro' import Giscus from '@components/Giscus.astro' export async function getStaticPaths() { const posts = (await getCollection('blog')) .filter((post) => !post.data.draft) .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf()) return posts.map((post) => ({ params: { slug: post.slug }, props: post, })) } type Props = CollectionEntry<'blog'> const posts = (await getCollection('blog')) .filter((post) => !post.data.draft) .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf()) function getPostIndex(slug: string): number { return posts.findIndex((post) => post.slug === slug) } function getNextPost(slug: string): Props | null { const postIndex = getPostIndex(slug) return postIndex !== -1 && postIndex < posts.length - 1 ? posts[postIndex + 1] : null } function getPrevPost(slug: string): Props | null { const postIndex = getPostIndex(slug) return postIndex > 0 ? posts[postIndex - 1] : null } const currentPostSlug = Astro.params.slug const nextPost = getNextPost(currentPostSlug) const prevPost = getPrevPost(currentPostSlug) const post = Astro.props const { Content, headings } = await post.render() ---
Back to blog
{readingTime(post.body)}

{post.data.title}

{ post.data.tags && post.data.tags.length > 0 ? ( post.data.tags.map((tag) => ( )) ) : ( No tags available ) }
{headings.length > 0 && }