diff --git a/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/AIEmployeesProvider.tsx b/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/AIEmployeesProvider.tsx index e9c60d7758..f3e1694251 100644 --- a/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/AIEmployeesProvider.tsx +++ b/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/AIEmployeesProvider.tsx @@ -13,6 +13,8 @@ import { ChatBoxProvider } from './chatbox/ChatBoxProvider'; import { useAPIClient, useRequest } from '@nocobase/client'; import { AIEmployee } from './types'; import { AISelectionProvider } from './selector/AISelectorProvider'; +import { ChatMessagesProvider } from './chatbox/ChatMessagesProvider'; +import { ChatConversationsProvider } from './chatbox/ChatConversationsProvider'; export const AIEmployeesContext = createContext<{ aiEmployees: AIEmployee[]; @@ -27,7 +29,11 @@ export const AIEmployeesProvider: React.FC<{ return ( - {props.children} + + + {props.children} + + ); diff --git a/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/AIEmployeeHeader.tsx b/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/AIEmployeeHeader.tsx index 3e49fec162..26bdbbff65 100644 --- a/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/AIEmployeeHeader.tsx +++ b/packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/AIEmployeeHeader.tsx @@ -7,7 +7,7 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { List, Popover, Button, Avatar, Divider } from 'antd'; import { useToken } from '@nocobase/client'; import { useAIEmployeesContext } from '../AIEmployeesProvider'; @@ -17,13 +17,48 @@ import { avatars } from '../avatars'; import { css } from '@emotion/css'; import { Sender } from '@ant-design/x'; import { ProfileCard } from '../ProfileCard'; +import { AIEmployee } from '../types'; +import { uid } from '@formily/shared'; +import { useChatMessages } from './ChatMessagesProvider'; +import { useChatConversations } from './ChatConversationsProvider'; export const AIEmployeeHeader: React.FC = () => { const { service: { loading }, aiEmployees, } = useAIEmployeesContext(); - const switchAIEmployee = useChatBoxContext('switchAIEmployee'); + const t = useT(); + const { setMessages, addMessage } = useChatMessages(); + const { currentConversation } = useChatConversations(); + const setCurrentEmployee = useChatBoxContext('setCurrentEmployee'); + const setSenderPlaceholder = useChatBoxContext('setSenderPlaceholder'); + const setSenderValue = useChatBoxContext('setSenderValue'); + const senderRef = useChatBoxContext('senderRef'); + const infoForm = useChatBoxContext('infoForm'); + const switchAIEmployee = useCallback( + (aiEmployee: AIEmployee) => { + const greetingMsg = { + key: uid(), + role: aiEmployee.username, + content: { + type: 'greeting' as const, + content: aiEmployee.greeting || t('Default greeting message', { nickname: aiEmployee.nickname }), + }, + }; + setCurrentEmployee(aiEmployee); + setSenderPlaceholder(aiEmployee.chatSettings?.senderPlaceholder); + infoForm.reset(); + senderRef.current?.focus(); + if (!currentConversation) { + setMessages([greetingMsg]); + } else { + addMessage(greetingMsg); + setSenderValue(''); + } + }, + [currentConversation, infoForm], + ); + return ( { const currentEmployee = useChatBoxContext('currentEmployee'); const { token } = useToken(); const [showConversations, setShowConversations] = useState(false); + const [expanded, setExpanded] = useState(false); const { selectable } = useAISelectionContext(); return (
{ float: 'right', }} > -
- - - +