Add preview handling
This commit is contained in:
54
pages/@slug/+data.js
Normal file
54
pages/@slug/+data.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import { getBySlug, getByDocumentId } from '@/libs/strapi'
|
||||
|
||||
export const data = async (pageContext) => {
|
||||
const { routeParams, urlParsed } = pageContext
|
||||
const { slug } = routeParams
|
||||
const searchParams = urlParsed.search || {}
|
||||
|
||||
// Extract preview parameters from URL
|
||||
const isPreview = searchParams.preview === 'true'
|
||||
const status = searchParams.status || 'published'
|
||||
const documentId = searchParams.documentId
|
||||
const uid = searchParams.uid
|
||||
|
||||
try {
|
||||
let page = null
|
||||
|
||||
// If we have a documentId from preview, fetch by document ID
|
||||
if (isPreview && documentId && uid === 'api::page.page') {
|
||||
const response = await getByDocumentId('pages', documentId, {
|
||||
isPreview,
|
||||
status,
|
||||
isSingle: false
|
||||
})
|
||||
page = response.data?.[0] || null
|
||||
} else {
|
||||
// Normal fetch by slug
|
||||
const response = await getBySlug('pages', slug, {
|
||||
isPreview,
|
||||
status
|
||||
})
|
||||
page = response.data?.[0] || null
|
||||
}
|
||||
|
||||
return {
|
||||
page,
|
||||
// Pass preview state to the component
|
||||
isPreview,
|
||||
status,
|
||||
documentId,
|
||||
uid
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching page:', error)
|
||||
|
||||
// Return null page but preserve preview state
|
||||
return {
|
||||
page: null,
|
||||
isPreview,
|
||||
status,
|
||||
documentId,
|
||||
uid
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user