Links the marketing solutions frontend page to the Payload CMS Pages collection via the new API library. Removes legacy static portfolio routes and components to consolidate marketing content. Enhances the Header and Footer Astro components with improved responsive styling.
91 lines
2.3 KiB
TypeScript
91 lines
2.3 KiB
TypeScript
import type { Metadata } from 'next/types'
|
|
|
|
import { CollectionArchive } from '@/components/CollectionArchive'
|
|
import { PageRange } from '@/components/PageRange'
|
|
import { Pagination } from '@/components/Pagination'
|
|
import configPromise from '@payload-config'
|
|
import { getPayload } from 'payload'
|
|
import React from 'react'
|
|
import PageClient from './page.client'
|
|
import { notFound } from 'next/navigation'
|
|
|
|
// Use dynamic rendering to avoid database connection during build
|
|
export const dynamic = 'force-dynamic'
|
|
export const revalidate = 600
|
|
|
|
type Args = {
|
|
params: Promise<{
|
|
pageNumber: string
|
|
}>
|
|
}
|
|
|
|
export default async function Page({ params: paramsPromise }: Args) {
|
|
const { pageNumber } = await paramsPromise
|
|
const payload = await getPayload({ config: configPromise })
|
|
|
|
const sanitizedPageNumber = Number(pageNumber)
|
|
|
|
if (!Number.isInteger(sanitizedPageNumber)) notFound()
|
|
|
|
const posts = await payload.find({
|
|
collection: 'posts',
|
|
depth: 1,
|
|
limit: 12,
|
|
page: sanitizedPageNumber,
|
|
overrideAccess: false,
|
|
})
|
|
|
|
return (
|
|
<div className="pt-24 pb-24">
|
|
<PageClient />
|
|
<div className="container mb-16">
|
|
<div className="prose dark:prose-invert max-w-none">
|
|
<h1>Posts</h1>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="container mb-8">
|
|
<PageRange
|
|
collection="posts"
|
|
currentPage={posts.page}
|
|
limit={12}
|
|
totalDocs={posts.totalDocs}
|
|
/>
|
|
</div>
|
|
|
|
<CollectionArchive posts={posts.docs} />
|
|
|
|
<div className="container">
|
|
{posts?.page && posts?.totalPages > 1 && (
|
|
<Pagination page={posts.page} totalPages={posts.totalPages} />
|
|
)}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export async function generateMetadata({ params: paramsPromise }: Args): Promise<Metadata> {
|
|
const { pageNumber } = await paramsPromise
|
|
return {
|
|
title: `Payload Website Template Posts Page ${pageNumber || ''}`,
|
|
}
|
|
}
|
|
|
|
export async function generateStaticParams() {
|
|
const payload = await getPayload({ config: configPromise })
|
|
const { totalDocs } = await payload.count({
|
|
collection: 'posts',
|
|
overrideAccess: false,
|
|
})
|
|
|
|
const totalPages = Math.ceil(totalDocs / 10)
|
|
|
|
const pages: { pageNumber: string }[] = []
|
|
|
|
for (let i = 1; i <= totalPages; i++) {
|
|
pages.push({ pageNumber: String(i) })
|
|
}
|
|
|
|
return pages
|
|
}
|