42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
|
// import { PageSEO } from '@/components/SEO'
|
||
|
import siteMetadata from '@/data/siteMetadata'
|
||
|
import ListLayout from '@/layouts/ListLayout'
|
||
|
import { allCoreContent, sortedBlogPost } from 'pliny/utils/contentlayer'
|
||
|
import { allBlogs } from 'contentlayer/generated'
|
||
|
import type { Blog } from 'contentlayer/generated'
|
||
|
|
||
|
const POSTS_PER_PAGE = 5
|
||
|
|
||
|
export const generateStaticParams = async () => {
|
||
|
const totalPosts = allBlogs
|
||
|
const totalPages = Math.ceil(totalPosts.length / POSTS_PER_PAGE)
|
||
|
const paths = Array.from({ length: totalPages }, (_, i) => ({ page: (i + 1).toString() }))
|
||
|
|
||
|
return paths
|
||
|
}
|
||
|
|
||
|
export default function Page({ params }: { params: { page: string } }) {
|
||
|
const posts = sortedBlogPost(allBlogs) as Blog[]
|
||
|
const pageNumber = parseInt(params.page as string)
|
||
|
const initialDisplayPosts = posts.slice(
|
||
|
POSTS_PER_PAGE * (pageNumber - 1),
|
||
|
POSTS_PER_PAGE * pageNumber
|
||
|
)
|
||
|
const pagination = {
|
||
|
currentPage: pageNumber,
|
||
|
totalPages: Math.ceil(posts.length / POSTS_PER_PAGE),
|
||
|
}
|
||
|
|
||
|
return (
|
||
|
<>
|
||
|
{/* <PageSEO title={siteMetadata.title} description={siteMetadata.description} /> */}
|
||
|
<ListLayout
|
||
|
posts={allCoreContent(posts)}
|
||
|
initialDisplayPosts={allCoreContent(initialDisplayPosts)}
|
||
|
pagination={pagination}
|
||
|
title="All Posts"
|
||
|
/>
|
||
|
</>
|
||
|
)
|
||
|
}
|