'use client' import type { RefObject } from 'react' import { createContext, useContext } from 'use-context-selector' import type { ChatConfig, ChatItem, Feedback, } from '../types' import type { ThemeBuilder } from './theme/theme-context' import type { AppConversationData, AppData, AppMeta, ConversationItem, } from '@/models/share' export type EmbeddedChatbotContextValue = { appInfoError?: any appInfoLoading?: boolean appMeta?: AppMeta appData?: AppData appParams?: ChatConfig appChatListDataLoading?: boolean currentConversationId: string currentConversationItem?: ConversationItem appPrevChatList: ChatItem[] pinnedConversationList: AppConversationData['data'] conversationList: AppConversationData['data'] showConfigPanelBeforeChat: boolean newConversationInputs: Record newConversationInputsRef: RefObject> handleNewConversationInputsChange: (v: Record) => void inputsForms: any[] handleNewConversation: () => void handleStartChat: () => void handleChangeConversation: (conversationId: string) => void handleNewConversationCompleted: (newConversationId: string) => void chatShouldReloadKey: string isMobile: boolean isInstalledApp: boolean appId?: string handleFeedback: (messageId: string, feedback: Feedback) => void currentChatInstanceRef: RefObject<{ handleStop: () => void }> themeBuilder?: ThemeBuilder } export const EmbeddedChatbotContext = createContext({ currentConversationId: '', appPrevChatList: [], pinnedConversationList: [], conversationList: [], showConfigPanelBeforeChat: false, newConversationInputs: {}, newConversationInputsRef: { current: {} }, handleNewConversationInputsChange: () => {}, inputsForms: [], handleNewConversation: () => {}, handleStartChat: () => {}, handleChangeConversation: () => {}, handleNewConversationCompleted: () => {}, chatShouldReloadKey: '', isMobile: false, isInstalledApp: false, handleFeedback: () => {}, currentChatInstanceRef: { current: { handleStop: () => {} } }, }) export const useEmbeddedChatbotContext = () => useContext(EmbeddedChatbotContext)