UNPKG

next-sanity

Version:
69 lines (68 loc) 2.28 kB
import { r as comlinkListeners, t as comlink } from "./context.js"; import { use, useCallback, useEffect, useEffectEvent, useState, useSyncExternalStore } from "react"; import { stegaEncodeSourceMap } from "@sanity/client/stega"; import { dequal } from "dequal/lite"; import { Fragment, jsx } from "react/jsx-runtime"; import "@sanity/client"; const LISTEN_HEARTBEAT_INTERVAL = 1e4; function SanityLiveStream(props) { const { query, dataset, params = {}, perspective, projectId, stega } = props; const comlink$1 = useSyncExternalStore(useCallback((listener) => { comlinkListeners.add(listener); return () => comlinkListeners.delete(listener); }, []), () => comlink, () => null); const [children, setChildren] = useState(void 0); const handleQueryHeartbeat = useEffectEvent((comlink$2) => { comlink$2.post("loader/query-listen", { projectId, dataset, perspective, query, params, heartbeat: LISTEN_HEARTBEAT_INTERVAL }); }); const handleQueryChange = useEffectEvent((event) => { if (dequal({ projectId, dataset, query, params }, { projectId: event.projectId, dataset: event.dataset, query: event.query, params: event.params })) { const { result, resultSourceMap, tags } = event; const data = stega ? stegaEncodeSourceMap(result, resultSourceMap, { enabled: true, studioUrl: "/" }) : result; console.groupCollapsed("rendering with server action"); props.children({ data, sourceMap: resultSourceMap, tags: tags || [] }).then((children$1) => { console.log("setChildren(children)"); setChildren(children$1); }, (reason) => { console.error("rendering with server action: render children error", reason); }).finally(() => console.groupEnd()); } }); useEffect(() => { if (!comlink$1) return; const unsubscribe = comlink$1.on("loader/query-change", handleQueryChange); const interval = setInterval(() => handleQueryHeartbeat(comlink$1), LISTEN_HEARTBEAT_INTERVAL); return () => { clearInterval(interval); unsubscribe(); }; }, [comlink$1]); if (!comlink$1 || children === void 0) return use(props.initial); return /* @__PURE__ */ jsx(Fragment, { children }); } export { SanityLiveStream as default }; //# sourceMappingURL=SanityLiveStream.js.map