diff --git a/app/(site)/[locale]/[...slug]/page.tsx b/app/(site)/[locale]/[...slug]/page.tsx index 4edc95878..fa4626161 100644 --- a/app/(site)/[locale]/[...slug]/page.tsx +++ b/app/(site)/[locale]/[...slug]/page.tsx @@ -1,13 +1,14 @@ import CategoryPage from '@/components/pages/category-page'; import ProductPage from '@/components/pages/product-page'; import SinglePage from '@/components/pages/single-page'; +import SinglePagePreview from '@/components/pages/single-page-preview'; +import PreviewProvider from '@/components/preview-provider'; import getQueryFromSlug from '@/helpers/get-query-from-slug'; import { getCachedClient } from 'lib/sanity/sanity.client'; import type { Metadata } from 'next'; +import { draftMode } from 'next/headers'; import { notFound } from 'next/navigation'; -export const revalidate = 43200; // 12 hours in seconds - export async function generateMetadata({ params }: { @@ -40,6 +41,8 @@ interface PageParams { } export default async function Page({ params }: PageParams) { + const preview = draftMode().isEnabled ? { token: process.env.SANITY_API_READ_TOKEN } : undefined; + const { slug, locale } = params; const { query = '', queryParams, docType } = getQueryFromSlug(slug, locale); @@ -58,6 +61,14 @@ export default async function Page({ params }: PageParams) { if (!pageData) return notFound(); + if (preview && preview.token) { + return ( + + {docType === 'page' && } + + ); + } + return ( <> {docType === 'page' && } diff --git a/app/api/preview/route.ts b/app/api/preview/route.ts index 95cb581ef..092ff8336 100644 --- a/app/api/preview/route.ts +++ b/app/api/preview/route.ts @@ -3,7 +3,7 @@ import { draftMode } from 'next/headers' export async function GET(request: Request) { const { searchParams } = new URL(request.url) const secret = searchParams.get('secret') - // const slug = searchParams.get('slug') + const slug = searchParams.get('slug') const type = searchParams.get('type') const locale = searchParams.get('locale') @@ -15,7 +15,6 @@ export async function GET(request: Request) { draftMode().enable() - if (type === 'home') { return new Response(null, { status: 307, @@ -24,4 +23,13 @@ export async function GET(request: Request) { }, }) } + + if (type === 'page') { + return new Response(null, { + status: 307, + headers: { + Location: `/${locale}${slug}`, + }, + }) + } } \ No newline at end of file diff --git a/components/pages/home-page-preview.tsx b/components/pages/home-page-preview.tsx index 462759925..bb02022ed 100644 --- a/components/pages/home-page-preview.tsx +++ b/components/pages/home-page-preview.tsx @@ -18,7 +18,7 @@ export default function HomePagePreview({ initialData, params }: HomePagePreview return ( <> ;{/* @ts-ignore */} - + ); } diff --git a/components/pages/single-page-preview.tsx b/components/pages/single-page-preview.tsx new file mode 100644 index 000000000..5679043d5 --- /dev/null +++ b/components/pages/single-page-preview.tsx @@ -0,0 +1,26 @@ +'use client'; + +import PreviewBanner from '@/components/ui/preview-banner'; +import { pageQuery } from '@/lib/sanity/queries'; +import { useLiveQuery } from '@sanity/preview-kit'; +import SinglePage from './single-page'; + +interface SinglePagePreviewParams { + initialData: []; + params: { + locale: string; + slug: string; + }; +} + +export default function SinglePagePreview({ initialData, params }: SinglePagePreviewParams) { + const [data] = useLiveQuery(initialData, pageQuery, params); + + return ( + <> + + {/* @ts-ignore */} + + + ); +} diff --git a/components/ui/preview-banner/preview-banner.tsx b/components/ui/preview-banner/preview-banner.tsx index f269c8610..a595d9317 100644 --- a/components/ui/preview-banner/preview-banner.tsx +++ b/components/ui/preview-banner/preview-banner.tsx @@ -4,16 +4,20 @@ import { useTranslations } from 'next-intl'; import Link from 'next/link'; interface PreviewBannerProps { - title?: string; + title: string; + type?: string; } -const PreviewBanner = ({ title }: PreviewBannerProps) => { +const PreviewBanner = ({ title, type }: PreviewBannerProps) => { const t = useTranslations('ui.previewBanner'); return ( -
+
{title && (

- {t('titlePart')} {title} + {t('titlePart')}{' '} + + {title} {type && `(${type})`} +

)} ((S) =>