import type { Metadata } from 'next'; import IconWithTextBlock, { IconBlockPlaceholder } from 'components/page/icon-with-text-block'; import ImageWithTextBlock from 'components/page/image-with-text-block'; import TextBlock from 'components/page/text-block'; import { getPage, getPageMetaObjects } from 'lib/shopify'; import { PageContent, PageMetafieldKey } from 'lib/shopify/types'; import { notFound } from 'next/navigation'; import { Suspense } from 'react'; export const runtime = 'edge'; export async function generateMetadata({ params }: { params: { page: string }; }): Promise { const page = await getPage(params.page); if (!page) return notFound(); return { title: page.seo?.title || page.title, description: page.seo?.description || page.bodySummary, openGraph: { publishedTime: page.createdAt, modifiedTime: page.updatedAt, type: 'article' } }; } // eslint-disable-next-line no-unused-vars const contentMap: Record JSX.Element> = { page_icon_section: (content) => ( }> ), page_image_content: (content) => , page_section: (content) => }; export default async function Page({ params }: { params: { page: string } }) { const page = await getPage(params.page); if (!page) return notFound(); const pageContents = ( await Promise.allSettled(page.metafields.map((metafield) => getPageMetaObjects(metafield))) ) .filter((result) => result.status === 'fulfilled') .map((result) => (result as PromiseFulfilledResult).value) .filter(Boolean) as PageContent[]; return ( <>

{page.title}

{pageContents.map((content) => (
{contentMap[content.key](content)}
))}
); }