import { BasePage } from "@/app/base-page"; import Prose from "@/components/ui/prose"; import { Separator } from "@/components/ui/separator"; import { getPosts, getSinglePost, processHtmlContent } from "@/lib/blog/query"; import { Post, Author } from "@/types/blog"; import { Metadata } from "next"; import Image from "next/image"; import { notFound } from "next/navigation"; type PageProps = { params: Promise<{ slug: string }>; searchParams: Promise<{ [key: string]: string | string[] | undefined }>; }; export async function generateMetadata({ params, }: PageProps): Promise { const slug = (await params).slug; const data = await getSinglePost({ slug }); if (!data || !data.post) return {}; return { title: data.post.title, description: data.post.description, twitter: { title: `${data.post.title}`, description: `${data.post.description}`, card: "summary_large_image", images: [ { url: data.post.coverImage, width: "1200", height: "630", alt: data.post.title, }, ], }, openGraph: { type: "article", images: [ { url: data.post.coverImage, width: "1200", height: "630", alt: data.post.title, }, ], title: data.post.title, description: data.post.description, publishedTime: new Date(data.post.publishedAt).toISOString(), authors: data.post.authors.map((author: Author) => author.name), }, }; } export async function generateStaticParams() { const data = await getPosts(); if (!data || !data.posts.length) return []; return data.posts.map((post) => ({ slug: post.slug, })); } export default async function BlogPostPage({ params }: PageProps) { const slug = (await params).slug; const data = await getSinglePost({ slug }); if (!data || !data.post) return notFound(); const html = await processHtmlContent({ html: data.post.content }); return ( ); } function PostHeader({ post }: { post: Post }) { const formattedDate = new Date(post.publishedAt).toLocaleDateString("en-US", { day: "numeric", month: "long", year: "numeric", }); return ( <> {post.coverImage && } ); } function PostCoverImage({ post }: { post: Post }) { return (
{post.title}
); } function PostMeta({ date, publishedAt }: { date: string; publishedAt: Date }) { return (
); } function PostTitle({ title }: { title: string }) { return (

{title}

); } function PostAuthor({ author }: { author?: Author }) { if (!author) return null; return (
{author.name}

{author.name}

); } function PostContent({ html }: { html: string }) { return (
); }