@whop/embedded-components-react-js
Version:
React components for Whop.js
42 lines (41 loc) • 1 kB
JavaScript
"use client";
import "../chunk-NSSMTXJJ.mjs";
import { useEffect, useMemo, useSyncExternalStore } from "react";
function useElementSnapshot(source) {
const callbacks = useMemo(()=>{
return new Set();
}, []);
const state = useSyncExternalStore((listener)=>{
const onSnapshot = ()=>{
listener();
};
callbacks.add(onSnapshot);
return ()=>{
callbacks.delete(onSnapshot);
};
}, ()=>{
const snap = source?.getSnapshot();
return snap;
}, ()=>{
return null;
});
useEffect(()=>{
if (!source) {
return;
}
const onSnapshot = ()=>{
for (const callback of callbacks){
callback();
}
};
source.on("snapshot", onSnapshot);
return ()=>{
source.off("snapshot", onSnapshot);
};
}, [
source,
callbacks
]);
return state;
}
export { useElementSnapshot };