Skip to content

Commit

Permalink
feat: add full preview support (experimental)
Browse files Browse the repository at this point in the history
  • Loading branch information
lihbr committed Jul 1, 2022
1 parent 88ac8b3 commit 79ecbd3
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export default defineNuxtModule<PrismicModuleOptions>({

// Add plugin
addPlugin(resolver.resolve('runtime/plugin'))
addPlugin(resolver.resolve('runtime/plugin.client'))

// Add components auto import
if (mergedOptions.injectComponents) {
Expand Down
24 changes: 24 additions & 0 deletions src/runtime/plugin.client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { defineNuxtPlugin } from '#app'

// import { name as pkgName } from '../../package.json'
import { PrismicModuleOptions } from '../types'

// TODO: Revert when fixed
const pkgName = '@nuxtjs/prismic'

export default defineNuxtPlugin((nuxtApp) => {
const mergedOptions: PrismicModuleOptions =
nuxtApp.payload.config[pkgName] ??
nuxtApp.payload.config.public[pkgName] ??
{}

// Hot reload preview updates
if (mergedOptions.preview) {
window.addEventListener('prismicPreviewUpdate', (event) => {
if (refreshNuxtData) {
event.preventDefault()
refreshNuxtData()
}
})
}
})
33 changes: 31 additions & 2 deletions src/runtime/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.payload.config.public[pkgName] ??
{}

nuxtApp.vueApp.use(createPrismic({
const prismicPlugin = createPrismic({
...mergedOptions,
client,
linkResolver,
Expand All @@ -33,5 +33,34 @@ export default defineNuxtPlugin((nuxtApp) => {
linkExternalComponent: NuxtLink,
...mergedOptions.components
}
}))
})

nuxtApp.vueApp.use(prismicPlugin)

if (mergedOptions.preview) {
const previewCookie = useCookie('io.prismic.preview').value

// Update client with req when running server side
if (process.server) {
prismicPlugin.client.enableAutoPreviewsFromReq(useRequestEvent()?.req)
}

if (previewCookie) {
try {
const session = typeof previewCookie === 'string' ? JSON.parse(decodeURIComponent(previewCookie)) : previewCookie

if (Object.keys(session).some(key =>
key in session &&
typeof session[key] === 'object' &&
session[key] !== null &&
'preview' in session[key] &&
session[key].preview)
) {
refreshNuxtData()
}
} catch (error) {
// noop
}
}
}
})

0 comments on commit 79ecbd3

Please sign in to comment.