import { client, urlFor } from "@/sanity/lib/client"; import { PortableText } from "@portabletext/react"; import Image from "next/image"; import Link from "next/link"; import { ArrowLeft, Rss } from "lucide-react"; import { notFound } from "next/navigation"; import { format } from "date-fns"; import PrismLoader from "@/components/PrismLoader"; import Prism from "prismjs"; import "prismjs/components/prism-javascript"; import "prismjs/components/prism-python"; import "prismjs/components/prism-php"; import "prismjs/components/prism-bash"; import "prismjs/components/prism-sql"; import "prismjs/components/prism-yaml"; import "prismjs/components/prism-markdown"; import "prismjs/components/prism-json"; import "prismjs/components/prism-perl"; import "./_styles/prism-twilight.css"; import "./_styles/prism.twilight.min.css"; async function getData(slug) { const query = ` *[_type == "blog" && slug.current == '${slug.replace(/'/g, "\\'")}'] { "currentSlug": slug.current, title, content, smallDescription, titleImage, _createdAt }[0]`; const data = await client.fetch(query, {}, { cache: "no-store" }); return data; } export const dynamic = "force-static"; export async function generateMetadata(props) { const params = await props.params; const data = await getData(params.slug); if (!data) { return { title: "404 Not Found - MERNMail", openGraph: { title: "404 Not Found - MERNMail" }, twitter: { title: "404 Not Found - MERNMail" } }; } return { title: `${data.title} - MERNMail`, description: data.smallDescription, openGraph: { title: `${data.title} - MERNMail`, description: data.smallDescription, url: `${process.env.NEXT_PUBLIC_WEBSITE_URL}/blog/${data.currentSlug}`, type: "website", images: [ { url: data.titleImage ? urlFor(data.titleImage).url() : `${process.env.NEXT_PUBLIC_WEBSITE_URL}/blog-missing.png`, width: 2560, height: 1440, alt: `${data.title} - MERNMail` } ] }, twitter: { card: "summary_large_image", site: "@MERNMail", title: `${data.title} - MERNMail`, description: data.smallDescription, images: [ data.titleImage ? urlFor(data.titleImage).url() : `${process.env.NEXT_PUBLIC_WEBSITE_URL}/blog-missing.png` ], creator: "@MERNMail" } }; } const customPortableTextComponents = { types: { image: ({ value }) => { return (
{value.caption}
)}
{value.code}
{language == "none" ? "" : Published on: {formattedDate}