@rivetkit/react
Version:
_Lightweight Libraries for Backends_
57 lines • 1.52 kB
JavaScript
// src/mod.ts
import {
createRivetKit as createVanillaRivetKit
} from "@rivetkit/framework-base";
import { useStore } from "@tanstack/react-store";
import { useEffect, useRef } from "react";
import { createClient } from "@rivetkit/core/client";
function createRivetKit(client, opts = {}) {
const { getOrCreateActor } = createVanillaRivetKit(client, opts);
function useActor(opts2) {
const { mount, setState, state } = getOrCreateActor(opts2);
useEffect(() => {
setState((prev) => {
prev.opts = {
...opts2,
enabled: opts2.enabled ?? true
};
return prev;
});
}, [opts2, setState]);
useEffect(() => {
return mount();
}, [mount]);
const actorState = useStore(state) || {};
function useEvent(eventName, handler) {
const ref = useRef(handler);
const actorState2 = useStore(state) || {};
useEffect(() => {
ref.current = handler;
}, [handler]);
useEffect(() => {
if (!(actorState2 == null ? void 0 : actorState2.connection)) return;
function eventHandler(...args) {
ref.current(...args);
}
return actorState2.connection.on(eventName, eventHandler);
}, [
actorState2.connection,
actorState2.isConnected,
actorState2.hash,
eventName
]);
}
return {
...actorState,
useEvent
};
}
return {
useActor
};
}
export {
createClient,
createRivetKit
};
//# sourceMappingURL=mod.mjs.map