@plteam/chat-ui
Version:
CUI Kit is a free and open-source library for creating AI assistant chat interfaces, built with React, Material UI, and TypeScript
42 lines (40 loc) • 2.15 kB
JavaScript
import * as React from 'react';
import { useMobileMessageActions } from '../message/hooks/useMobileMessageActions';
import { useMessagesMode } from '../message/hooks/useMessagesMode';
import { useThreadApiInitialization } from './useThreadApiInitialization';
import { useThreadSendMessage } from './useThreadSendMessage';
import { useInternalMessageTransformer } from '../adapter/AdapterContext';
const Context = React.createContext(undefined);
const ThreadProvider = ({ children, model, thread, apiManager, scrollRef, globalProps }) => {
const mobileMessageActions = useMobileMessageActions();
const messageMode = useMessagesMode();
const internalMessageTransformer = useInternalMessageTransformer();
const { onSendNewsMessage, onEditMessage } = useThreadSendMessage(thread, model, globalProps.onFirstMessageSent, globalProps.beforeUserMessageSend, globalProps.onAssistantMessageTypingFinish, scrollRef.current ?? undefined, apiManager);
useThreadApiInitialization(thread, apiManager, onSendNewsMessage, onEditMessage, globalProps.getConversationBlockHeightMin);
React.useMemo(() => {
if (thread) {
thread.messages.getCurrentBranchFn = globalProps.getCurrentBranch;
thread.messages.internalMessageTransformer = internalMessageTransformer;
thread.messages.init(globalProps.enableBranches);
}
}, [thread]);
/*const [state, setState] = React.useState(0)
React.useEffect(() => {
setInterval(() => {
setState(ls => ++ls);
}, 1000)
}, []);
console.log(state);*/
const value = React.useMemo(() => ({
thread, apiRef: apiManager.apiRef, mobileMessageActions, messageMode
}), [thread, apiManager.apiRef.current, messageMode, mobileMessageActions]);
return (React.createElement(Context.Provider, { value: value }, children));
};
const useThreadContext = () => {
const context = React.useContext(Context);
if (!context) {
throw new Error("useThreadContext must be used within a ThreadProvider");
}
return context;
};
export { ThreadProvider, useThreadContext };