UNPKG

next-sanity

Version:
46 lines (45 loc) 1.8 kB
import { sanitizePerspective } from "./utils.js"; import { perspective, setComlink, setComlinkClientConfig, setPerspective } from "./context.js"; import { useRouter } from "next/navigation"; import { startTransition, useEffect } from "react"; import { createNode, createNodeMachine } from "@sanity/comlink"; import { createCompatibilityActors } from "@sanity/presentation-comlink"; import { useEffectEvent } from "use-effect-event"; import { setPerspectiveCookie } from "next-sanity/live/server-actions"; function PresentationComlink(props) { const { projectId, dataset, draftModeEnabled } = props; const router = useRouter(); useEffect(() => { setComlinkClientConfig(projectId, dataset); }, [dataset, projectId]); const handlePerspectiveChange = useEffectEvent((_perspective, signal) => { const nextPerspective = sanitizePerspective(_perspective, "drafts"); if (draftModeEnabled && perspective.toString() !== nextPerspective.toString()) { setPerspective(nextPerspective); startTransition(() => setPerspectiveCookie(nextPerspective).then(() => { if (signal.aborted) return; router.refresh(); }).catch((reason) => console.error("Failed to set the preview perspective cookie", reason))); } }); useEffect(() => { const comlink = createNode({ name: "loaders", connectTo: "presentation" }, createNodeMachine().provide({ actors: createCompatibilityActors() })); let controller; comlink.on("loader/perspective", (data) => { controller?.abort(); controller = new AbortController(); handlePerspectiveChange(data.perspective, controller.signal); }); const stop = comlink.start(); setComlink(comlink); return () => { stop(); }; }, []); return null; } export { PresentationComlink as default }; //# sourceMappingURL=PresentationComlink.js.map