UNPKG

@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
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 };