Skip to content

Commit 79ecbd3

Browse files
committed
feat: add full preview support (experimental)
1 parent 88ac8b3 commit 79ecbd3

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

src/module.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ export default defineNuxtModule<PrismicModuleOptions>({
8686

8787
// Add plugin
8888
addPlugin(resolver.resolve('runtime/plugin'))
89+
addPlugin(resolver.resolve('runtime/plugin.client'))
8990

9091
// Add components auto import
9192
if (mergedOptions.injectComponents) {

src/runtime/plugin.client.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { defineNuxtPlugin } from '#app'
2+
3+
// import { name as pkgName } from '../../package.json'
4+
import { PrismicModuleOptions } from '../types'
5+
6+
// TODO: Revert when fixed
7+
const pkgName = '@nuxtjs/prismic'
8+
9+
export default defineNuxtPlugin((nuxtApp) => {
10+
const mergedOptions: PrismicModuleOptions =
11+
nuxtApp.payload.config[pkgName] ??
12+
nuxtApp.payload.config.public[pkgName] ??
13+
{}
14+
15+
// Hot reload preview updates
16+
if (mergedOptions.preview) {
17+
window.addEventListener('prismicPreviewUpdate', (event) => {
18+
if (refreshNuxtData) {
19+
event.preventDefault()
20+
refreshNuxtData()
21+
}
22+
})
23+
}
24+
})

src/runtime/plugin.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export default defineNuxtPlugin((nuxtApp) => {
2222
nuxtApp.payload.config.public[pkgName] ??
2323
{}
2424

25-
nuxtApp.vueApp.use(createPrismic({
25+
const prismicPlugin = createPrismic({
2626
...mergedOptions,
2727
client,
2828
linkResolver,
@@ -33,5 +33,34 @@ export default defineNuxtPlugin((nuxtApp) => {
3333
linkExternalComponent: NuxtLink,
3434
...mergedOptions.components
3535
}
36-
}))
36+
})
37+
38+
nuxtApp.vueApp.use(prismicPlugin)
39+
40+
if (mergedOptions.preview) {
41+
const previewCookie = useCookie('io.prismic.preview').value
42+
43+
// Update client with req when running server side
44+
if (process.server) {
45+
prismicPlugin.client.enableAutoPreviewsFromReq(useRequestEvent()?.req)
46+
}
47+
48+
if (previewCookie) {
49+
try {
50+
const session = typeof previewCookie === 'string' ? JSON.parse(decodeURIComponent(previewCookie)) : previewCookie
51+
52+
if (Object.keys(session).some(key =>
53+
key in session &&
54+
typeof session[key] === 'object' &&
55+
session[key] !== null &&
56+
'preview' in session[key] &&
57+
session[key].preview)
58+
) {
59+
refreshNuxtData()
60+
}
61+
} catch (error) {
62+
// noop
63+
}
64+
}
65+
}
3766
})

0 commit comments

Comments
 (0)