UNPKG

@rivetkit/react

Version:

_Lightweight Libraries for Backends_

57 lines 1.52 kB
// 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