diff --git a/src/pages/posts/[slug].astro b/src/pages/posts/[slug].astro index 2f7d06a..99cc972 100644 --- a/src/pages/posts/[slug].astro +++ b/src/pages/posts/[slug].astro @@ -1,65 +1,78 @@ --- -import Layout from "@layouts/Layout.astro"; -import Header from "@components/Header.astro"; -import Footer from "@components/Footer.astro"; -import Tag from "@components/Tag.astro"; -import Datetime from "@components/Datetime"; +import Posts from "@layouts/Posts.astro"; +import PostDetails from "@layouts/PostDetails.astro"; +import getSortedPosts from "@utils/getSortedPosts"; +import getPageNumbers from "@utils/getPageNumbers"; import type { MarkdownInstance } from "astro"; import type { Frontmatter } from "@utils/types"; -import Breadcrumbs from "@components/Breadcrumbs.astro"; export interface Props { post: MarkdownInstance; } +type PostResult = { + params: { + slug: string | number; + }; + props?: { + post: MarkdownInstance>; + }; +}[]; + +type PagePaths = { + params: { + slug: string; + }; +}[]; + export async function getStaticPaths() { const posts = await Astro.glob("../../contents/*.md"); - return posts.map((post) => { + let postResult: PostResult = posts.map((post) => { return { params: { slug: post.frontmatter.slug, }, props: { post, - frontmatter: post.frontmatter, }, }; }); + + const pagePaths: PagePaths = getPageNumbers(posts.length).map((pageNum) => ({ + params: { slug: String(pageNum) }, + })); + + return [...postResult, ...pagePaths]; } -const { Content, frontmatter } = Astro.props.post; +const { slug } = Astro.params; +const { post } = Astro.props; + +const posts = await Astro.glob("../../contents/*.md"); + +const sortedPosts = getSortedPosts(posts); + +const totalPages = getPageNumbers(posts.length); + +const currentPage = + slug && !isNaN(Number(slug)) && totalPages.includes(Number(slug)) + ? Number(slug) + : 0; +const lastPost = currentPage * import.meta.env.PUBLIC_POST_PER_PAGE; +const startPost = lastPost - import.meta.env.PUBLIC_POST_PER_PAGE; + +const paginatedPosts = sortedPosts.slice(startPost, lastPost); --- - -
- -
-

{frontmatter.title}

- -
- -
- -
    - {frontmatter.tags.map((tag) => )} -
-
-