next-sanity
Version:
Sanity.io toolkit for Next.js
42 lines (41 loc) • 1.66 kB
JavaScript
import { l as setComlink, u as setComlinkClientConfig } from "./context.js";
import { useRouter } from "next/navigation";
import { useEffect, useEffectEvent } from "react";
import { createNode, createNodeMachine } from "@sanity/comlink";
import { createCompatibilityActors } from "@sanity/presentation-comlink";
import { setPerspectiveCookie } from "next-sanity/live/server-actions";
function PresentationComlink(props) {
const { projectId, dataset, draftModeEnabled, draftModePerspective } = props;
const router = useRouter();
useEffect(() => {
setComlinkClientConfig(projectId, dataset);
}, [dataset, projectId]);
const handlePerspectiveChange = useEffectEvent((perspective, signal) => {
if (draftModeEnabled && perspective !== draftModePerspective) setPerspectiveCookie(perspective).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;
}
PresentationComlink.displayName = "PresentationComlink";
var PresentationComlink_default = PresentationComlink;
export { PresentationComlink_default as default };
//# sourceMappingURL=PresentationComlink2.js.map