import React from "react"; import Head from "next/head"; import { renderHTML } from "@agility/nextjs"; import { AgilityImage } from "@agility/nextjs"; import truncate from "truncate-html"; import Link from "next/link"; import Image from "next/image" const PostDetails = ({ dynamicPageItem }: any) => { // post fields const post = dynamicPageItem.fields; const productJSON = post.product const product = JSON.parse(productJSON) // format date const dateStr = new Date(post.date).toLocaleDateString(); const description = truncate(post.content, { length: 160, decodeEntities: true, stripTags: true, reserveLastWord: true, }); let imageSrc = post.image?.url || null; // post image alt let imageAlt = post.image?.label || null; let ogImageSrc = `${imageSrc}?w=1600&h=900` let imageHeight = 900 let imageWidth = 1600 return ( <> <Head> <meta property="twitter:image" content={ogImageSrc} /> <meta property="twitter:card" content="summary_large_image" /> <meta name="og:title" content={post.title} /> <meta property="og:image" content={ogImageSrc} /> <meta property="og:image:width" content={`${imageWidth}`} /> <meta property="og:image:height" content={`${imageHeight}`} /> <meta name="description" content={description} /> <meta name="og:description" content={description} /> <meta name="twitter:description" content={description} /> <meta name="twitter:title" content={post.title} /> </Head> <div className="relative px-8"> <div className="max-w-screen-xl mx-auto"> <div className="h-64 md:h-96 aspect-w-16 aspect-h-9 relative"> <AgilityImage src={imageSrc} alt={imageAlt} className="object-cover object-center rounded-lg" layout="fill" /> <Link href={`/product${product.slug}`}> <a className="absolute" style={{bottom: "-80px", right: "-20px"}}> <Image src={product.imageUrl} alt={product.name} width={300} height={300} layout="fixed" /> </a> </Link> </div> <div className="max-w-2xl mx-auto mt-4"> <Link href={`/product${product.slug}`}><a className="uppercase text-primary-500 text-xs font-bold tracking-widest leading-loose">{product.name}</a></Link> <div className="border-b-2 border-primary-500 w-8"></div> <div className="mt-4 uppercase text-gray-600 italic font-semibold text-xs"> {dateStr} </div> <h1 className="font-display text-4xl font-bold my-6 text-secondary-500"> {post.title} </h1> <div className="prose max-w-full mb-20" dangerouslySetInnerHTML={renderHTML(post.content)} /> </div> </div> </div> </> ); }; PostDetails.getCustomInitialProps = async () => { return { cloud_name: process.env.CLOUDINARY_CLOUD_NAME } } export default PostDetails;