@assistant-ui/react
Version:
React components for AI chat.
63 lines • 2.35 kB
JavaScript
// src/context/providers/ThreadRuntimeProvider.tsx
import { useEffect, useMemo, useState } from "react";
import { ThreadContext } from "../react/ThreadContext.mjs";
import { makeThreadViewportStore } from "../stores/ThreadViewport.mjs";
import { writableStore } from "../ReadonlyStore.mjs";
import { create } from "zustand";
import { jsx } from "react/jsx-runtime";
var useThreadRuntimeStore = (runtime) => {
const [store] = useState(() => create(() => runtime));
useEffect(() => {
writableStore(store).setState(runtime, true);
}, [runtime, store]);
return store;
};
var useThreadStore = (runtime) => {
const [store] = useState(() => create(() => runtime.getState()));
useEffect(() => {
const updateState = () => writableStore(store).setState(runtime.getState(), true);
updateState();
return runtime.subscribe(updateState);
}, [runtime, store]);
return store;
};
var useThreadMessagesStore = (runtime) => {
const [store] = useState(() => create(() => runtime.messages));
useEffect(() => {
const updateState = () => writableStore(store).setState(runtime.messages, true);
updateState();
return runtime.subscribe(updateState);
}, [runtime, store]);
return store;
};
var useThreadComposerStore = (runtime) => {
const [store] = useState(() => create(() => runtime.getState()));
useEffect(() => {
const updateState = () => writableStore(store).setState(runtime.getState(), true);
updateState();
return runtime.subscribe(updateState);
}, [runtime, store]);
return store;
};
var ThreadRuntimeProvider = ({ children, runtime }) => {
const useThreadRuntime = useThreadRuntimeStore(runtime);
const useThread = useThreadStore(runtime);
const useThreadMessages = useThreadMessagesStore(runtime);
const useThreadComposer = useThreadComposerStore(runtime.composer);
const context = useMemo(() => {
const useViewport = makeThreadViewportStore();
return {
useThread,
useThreadRuntime,
useThreadMessages,
useThreadActions: useThreadRuntime,
useComposer: useThreadComposer,
useViewport
};
}, [useThread, useThreadRuntime, useThreadMessages, useThreadComposer]);
return /* @__PURE__ */ jsx(ThreadContext.Provider, { value: context, children });
};
export {
ThreadRuntimeProvider
};
//# sourceMappingURL=ThreadRuntimeProvider.mjs.map