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) =>