@croct/plug-react
Version:
React components and hooks to plug your React applications into Croct.
52 lines (51 loc) • 1.56 kB
JavaScript
import { GlobalPlug } from "@croct/plug/plug";
function isSsr() {
return globalThis.window?.document?.createElement === void 0;
}
const croct = !isSsr() ? (function factory() {
let timeoutId = null;
let resolveCallback;
let rejectCallback;
return new Proxy(GlobalPlug.GLOBAL, {
get: function getProperty2(target, property) {
switch (property) {
case "plug":
if (timeoutId !== null) {
clearTimeout(timeoutId);
timeoutId = null;
rejectCallback?.(new Error("Unplug cancelled."));
}
break;
case "unplug":
return () => {
timeoutId = setTimeout(() => target.unplug().then(resolveCallback, rejectCallback), 100);
return new Promise((resolve, reject) => {
resolveCallback = resolve;
rejectCallback = reject;
});
};
}
return target[property];
}
});
})() : new Proxy(GlobalPlug.GLOBAL, {
get: function getProperty(_, property) {
switch (property) {
case "initialized":
return false;
case "plug":
return () => {
};
case "unplug":
return () => Promise.resolve();
default:
throw new Error(
`Property croct.${String(property)} is not supported on server-side (SSR). Consider refactoring the logic as a side-effect (useEffect) or a client-side callback (onClick, onChange, etc). For help, see https://croct.help/sdk/react/client-logic-ssr`
);
}
}
});
export {
croct,
isSsr
};