UNPKG

@assistant-ui/react

Version:

React components for AI chat.

63 lines 2.35 kB
// 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