mirror of
https://github.com/Since-3/since3-portal.git
synced 2026-10-12 19:51:17 +00:00
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
"use client"
|
|
|
|
import { useEffect, useState } from "react"
|
|
import type { AiAccess } from "../../ai/demos"
|
|
import { resolveContent } from "../../lib/content"
|
|
import { PREVIEW_CONTENT, PREVIEW_READY } from "../../lib/preview"
|
|
import { getTemplate } from "../../lib/registry"
|
|
import type { TemplateContent } from "../../lib/types"
|
|
import { TemplateRenderer } from "./template-renderer"
|
|
|
|
// Läuft im iframe des Editors und übernimmt ungespeicherte Änderungen per postMessage
|
|
export function LivePreview({ templateKey, initialContent, access }: {
|
|
templateKey: string
|
|
initialContent: TemplateContent
|
|
access: AiAccess | null
|
|
}) {
|
|
const [content, setContent] = useState(initialContent)
|
|
|
|
useEffect(() => {
|
|
const def = getTemplate(templateKey)
|
|
if (!def) return
|
|
|
|
function onMessage(event: MessageEvent) {
|
|
if (event.origin !== window.location.origin || event.data?.type !== PREVIEW_CONTENT || !def) return
|
|
setContent(resolveContent(def, event.data.content))
|
|
}
|
|
|
|
window.addEventListener("message", onMessage)
|
|
window.parent.postMessage({ type: PREVIEW_READY }, window.location.origin)
|
|
return () => window.removeEventListener("message", onMessage)
|
|
}, [templateKey])
|
|
|
|
return <TemplateRenderer templateKey={templateKey} content={content} access={access} />
|
|
}
|