UNPKG

@prismicio/next

Version:

Helpers to integrate Prismic into Next.js apps

72 lines (71 loc) 2.6 kB
"use client"; "use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const react = require("react"); const client = require("@prismicio/client"); const navigation = require("next/navigation"); const PrismicPreviewClient = (props) => { const { repositoryName, isDraftMode, updatePreviewURL = "/api/preview", exitPreviewURL = "/api/exit-preview" } = props; const { refresh } = navigation.useRouter(); react.useEffect(() => { const controller = new AbortController(); window.addEventListener("prismicPreviewUpdate", onUpdate, { signal: controller.signal }); window.addEventListener("prismicPreviewEnd", onEnd, { signal: controller.signal }); const cookie = getPrismicPreviewCookie(window.document.cookie); const cookieRepositoryName = cookie ? (decodeURIComponent(cookie).match(/"([^"]+)\.prismic\.io"/) || [])[1] : void 0; const hasCookieForRepository = cookieRepositoryName === repositoryName; if (hasCookieForRepository && !isDraftMode) { console.log("starting preview link"); globalThis.fetch(updatePreviewURL, { redirect: "manual", signal: controller.signal }).then((res) => { if (res.type !== "opaqueredirect") { console.error(`[<PrismicPreview>] Failed to start the preview using "${updatePreviewURL}". Does it exist?`); return; } refresh(); }).catch(() => { }); } function onUpdate(event) { event.preventDefault(); refresh(); } function onEnd(event) { event.preventDefault(); globalThis.fetch(exitPreviewURL, { signal: controller.signal }).then((res) => { if (!res.ok) { console.error(`[<PrismicPreview>] Failed to exit Preview Mode using the "${exitPreviewURL}" API endpoint. Does it exist?`); return; } refresh(); }).catch(() => { }); } return () => controller.abort(); }, [repositoryName, isDraftMode, updatePreviewURL, exitPreviewURL, refresh]); return null; }; function getPrismicPreviewCookie(cookieJar) { function readValue(value2) { return value2.replace(/%3B/g, ";"); } const cookies = cookieJar.split("; "); let value; for (const cookie of cookies) { const parts = cookie.split("="); const name = readValue(parts[0]).replace(/%3D/g, "="); if (name === client.cookie.preview) { value = readValue(parts.slice(1).join("=")); continue; } } return value; } exports.PrismicPreviewClient = PrismicPreviewClient; //# sourceMappingURL=PrismicPreviewClient.cjs.map