Sanity Library Reference Docs
    Preparing search index...

    Variable resolvePerspectiveFromCookiesConst

    resolvePerspectiveFromCookies: typeof _resolvePerspectiveFromCookies = ...

    This helper is intended for use with Next.js Cache Components (cacheComponents: true), where cookies() and draftMode() cannot be called inside 'use cache' boundaries. Resolve the perspective once outside the cache boundary and pass it in as a prop / cache key.

    import {cookies, draftMode} from 'next/headers'
    import {defineQuery} from 'next-sanity'
    import {resolvePerspectiveFromCookies, type LivePerspective} from 'next-sanity/live'
    import {sanityFetch, sanityFetchStaticParams} from '#sanity/live'

    export async function generateStaticParams() {
    const query = defineQuery(`*[_type == "page" && defined(slug.current)]{"slug": slug.current}`)
    return await sanityFetchStaticParams({query})
    }

    export default async function Page({params}: PageProps<'/[slug]'>) {
    const {isEnabled: isDraftMode} = await draftMode()

    if (isDraftMode) {
    return (
    <Suspense>
    <DynamicPage params={params} />
    </Suspense>
    )
    }

    const {slug} = await params

    return <CachedPage slug={slug} perspective="published" stega={false} />
    }

    async function DynamicPage({params}: Pick<PageProps<'/[slug]'>, 'params'>) {
    const {slug} = await params
    const perspective = await resolvePerspectiveFromCookies({cookies: await cookies()})

    return <CachedPage slug={slug} perspective={perspective} stega />
    }

    async function CachedPage({
    slug,
    perspective,
    stega,
    }: Awaited<PageProps<'/[slug]'>['params']> & {
    perspective: LivePerspective
    stega: boolean
    }) {
    'use cache'

    const query = defineQuery(`*[_type == "page" && slug.current == $slug][0]`)
    const {data} = await sanityFetch({query, params: {slug}, perspective, stega})

    return <article>...</article>
    }