Skip to content

Commit b2a94e3

Browse files
authoredApr 25, 2023
fix(preview): enable iframe preview in webkit (#124)
1 parent 70883c9 commit b2a94e3

File tree

4 files changed

+22
-20
lines changed

4 files changed

+22
-20
lines changed
 

Diff for: ‎src/runtime/components/ContentPreviewMode.vue

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<script setup lang="ts">
2-
import { onMounted, ref, onUnmounted, nextTick, Transition } from 'vue'
3-
import { refreshNuxtData, useCookie, useRoute, navigateTo, useNuxtApp, useRouter } from '#app'
2+
import { onMounted, ref, onUnmounted, Transition } from 'vue'
3+
import { useCookie, useRoute, useNuxtApp, useRouter } from '#app'
44
import type { Socket } from 'socket.io-client'
55
import type { PreviewResponse } from '../../../types'
66
77
const props = defineProps({
88
previewToken: {
9-
type: Object,
9+
type: String,
1010
required: true
1111
},
1212
apiURL: {
@@ -36,6 +36,7 @@ let socket: Socket
3636
const closePreviewMode = () => {
3737
useCookie('previewToken').value = ''
3838
useRoute().query.preview = ''
39+
window.sessionStorage.removeItem('previewToken')
3940
4041
window.location.reload()
4142
}
@@ -70,7 +71,7 @@ onMounted(async () => {
7071
socket = io.connect(`${props.apiURL}/preview`, {
7172
transports: ['websocket', 'polling'],
7273
auth: {
73-
token: props.previewToken.value
74+
token: props.previewToken
7475
}
7576
})
7677

Diff for: ‎src/runtime/composables/useStudio.ts

+14-14
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { callWithNuxt } from '#app'
77
import type { RouteLocationNormalized } from 'vue-router'
88
import ContentPreviewMode from '../components/ContentPreviewMode.vue'
99
import { createSingleton, deepAssign, deepDelete, mergeDraft, StudioConfigFiles, StudioConfigRoot } from '../utils'
10-
import { refreshNuxtData, useAppConfig, useCookie, useNuxtApp, useRuntimeConfig, useState, useContentState, queryContent, ref, toRaw, useRoute, useRouter } from '#imports'
10+
import { refreshNuxtData, useAppConfig, useNuxtApp, useRuntimeConfig, useState, useContentState, queryContent, ref, toRaw, useRoute, useRouter } from '#imports'
1111
import type { PreviewFile, PreviewResponse } from '~~/../types'
1212
import { FileChangeMessagePayload } from '~~/../types'
1313

@@ -36,18 +36,18 @@ export const useStudio = () => {
3636
}
3737

3838
const syncPreviewFiles = async (contentStorage: Storage, files: PreviewFile[], ignoreBuiltContents = true) => {
39-
const previewToken = useCookie('previewToken', { sameSite: 'none', secure: true })
39+
const previewToken = window.sessionStorage.getItem('previewToken')
4040
// Remove previous preview data
41-
const keys: string[] = await contentStorage.getKeys(`${previewToken.value}:`)
41+
const keys: string[] = await contentStorage.getKeys(`${previewToken}:`)
4242
await Promise.all(keys.map(key => contentStorage.removeItem(key)))
4343

4444
// Set preview meta
4545
const sources = new Set<string>(files.map(file => file.parsed!._id.split(':').shift()!))
46-
await contentStorage.setItem(`${previewToken.value}$`, JSON.stringify({ ignoreSources: Array.from(sources) }))
46+
await contentStorage.setItem(`${previewToken}$`, JSON.stringify({ ignoreSources: Array.from(sources) }))
4747

4848
// Handle content files
4949
await Promise.all(
50-
files.map(item => contentStorage.setItem(`${previewToken.value}:${item.parsed!._id}`, JSON.stringify(item.parsed)))
50+
files.map(item => contentStorage.setItem(`${previewToken}:${item.parsed!._id}`, JSON.stringify(item.parsed)))
5151
)
5252
}
5353

@@ -118,19 +118,19 @@ export const useStudio = () => {
118118
}
119119

120120
const requestPreviewSynchronization = async () => {
121-
const previewToken = useCookie('previewToken', { sameSite: 'none', secure: true })
121+
const previewToken = window.sessionStorage.getItem('previewToken')
122122
// Fetch preview data from station
123123
await $fetch<PreviewResponse>('api/projects/preview/sync', {
124124
baseURL: studioConfig?.apiURL,
125125
method: 'POST',
126126
params: {
127-
token: previewToken.value
127+
token: previewToken
128128
}
129129
}) as any
130130
}
131131

132132
const mountPreviewUI = () => {
133-
const previewToken = useCookie('previewToken', { sameSite: 'none', secure: true })
133+
const previewToken = window.sessionStorage.getItem('previewToken')
134134
// Show loading
135135
const el = document.createElement('div')
136136
el.id = '__nuxt_preview_wrapper'
@@ -145,12 +145,12 @@ export const useStudio = () => {
145145

146146
// Content Helpers
147147
const findContentWithId = async (path: string): Promise<ParsedContent | null> => {
148-
const previewToken = useCookie('previewToken', { sameSite: 'none', secure: true })
148+
const previewToken = window.sessionStorage.getItem('previewToken')
149149
if (!path) {
150150
return null
151151
}
152152
path = path.replace(/\/$/, '')
153-
let content = await storage.value?.getItem(`${previewToken.value}:${path}`)
153+
let content = await storage.value?.getItem(`${previewToken}:${path}`)
154154
if (!content) {
155155
content = await storage.value?.getItem(`cached:${path}`)
156156
}
@@ -161,15 +161,15 @@ export const useStudio = () => {
161161
}
162162

163163
const updateContent = (content: PreviewFile) => {
164-
const previewToken = useCookie('previewToken', { sameSite: 'none', secure: true })
164+
const previewToken = window.sessionStorage.getItem('previewToken')
165165
if (!storage.value) { return }
166166

167-
storage.value.setItem(`${previewToken.value}:${content.parsed?._id}`, JSON.stringify(content.parsed))
167+
storage.value.setItem(`${previewToken}:${content.parsed?._id}`, JSON.stringify(content.parsed))
168168
}
169169

170170
const removeContentWithId = async (path: string) => {
171-
const previewToken = useCookie('previewToken', { sameSite: 'none', secure: true })
172-
await storage.value?.removeItem(`${previewToken.value}:${path}`)
171+
const previewToken = window.sessionStorage.getItem('previewToken')
172+
await storage.value?.removeItem(`${previewToken}:${path}`)
173173
}
174174

175175
const requestRerender = async () => {

Diff for: ‎src/runtime/plugins/preview.client.ts

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export default defineNuxtPlugin((nuxtApp) => {
2828

2929
if (route.query.preview && previewToken.value !== route.query.preview) {
3030
previewToken.value = String(route.query.preview)
31+
window.sessionStorage.setItem('previewToken', String(route.query.preview))
3132
}
3233

3334
// Listen to `content:storage` hook to get storage instance

Diff for: ‎src/runtime/server/routes/studio.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default eventHandler(async () => {
3333

3434
const appConfig = useAppConfig()
3535
const runtimeConfig = useRuntimeConfig()
36-
const { app, appConfigSchema, content: { sources, ignores, locales, highlight, navigation, documentDriven, experiment } } = runtimeConfig
36+
const { app, appConfigSchema, content: { sources, ignores, locales, highlight, navigation, documentDriven, experimental } } = runtimeConfig
3737

3838
// Support for __pinceau_tokens_{schema|config}.json
3939
const hasPinceau = runtimeConfig?.pinceau?.studio
@@ -56,7 +56,7 @@ export default eventHandler(async () => {
5656
tokensConfigSchema,
5757
tokensConfig,
5858
// @nuxt/content
59-
content: { sources, ignores, locales, highlight, navigation, documentDriven, experiment },
59+
content: { sources, ignores, locales, highlight, navigation, documentDriven, experimental },
6060
// nuxt-component-meta
6161
components: filteredComponents
6262
}

0 commit comments

Comments
 (0)
Please sign in to comment.