@assistant-ui/react
Version:
React components for AI chat.
56 lines (55 loc) • 1.98 kB
JavaScript
"use client";
// src/context/providers/MessageRuntimeProvider.tsx
import { useEffect, useState } from "react";
import { create } from "zustand";
import { MessageContext } from "../react/MessageContext.mjs";
import { makeMessageUtilsStore } from "../stores/MessageUtils.mjs";
import { writableStore } from "../ReadonlyStore.mjs";
import { jsx } from "react/jsx-runtime";
var useMessageRuntimeStore = (runtime) => {
const [store] = useState(() => create(() => runtime));
useEffect(() => {
writableStore(store).setState(runtime, true);
}, [runtime, store]);
return store;
};
var useMessageStore = (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 useMessageUtilsStore = () => {
const [store] = useState(() => makeMessageUtilsStore());
return store;
};
var useEditComposerStore = (useMessageRuntime) => {
const runtime = useMessageRuntime.getState().composer;
const [store] = useState(() => create(() => runtime.getState()));
useEffect(() => {
const updateState = () => writableStore(store).setState(runtime.getState());
updateState();
return runtime.subscribe(updateState);
}, [runtime, store]);
return store;
};
var MessageRuntimeProvider = ({
runtime,
children
}) => {
const useMessageRuntime = useMessageRuntimeStore(runtime);
const useMessage = useMessageStore(runtime);
const useMessageUtils = useMessageUtilsStore();
const useEditComposer = useEditComposerStore(useMessageRuntime);
const [context] = useState(() => {
return { useMessageRuntime, useMessage, useMessageUtils, useEditComposer };
});
return /* @__PURE__ */ jsx(MessageContext.Provider, { value: context, children });
};
export {
MessageRuntimeProvider
};
//# sourceMappingURL=MessageRuntimeProvider.mjs.map