From 421b2827d6b49e8768f30714310e16c23ec648a4 Mon Sep 17 00:00:00 2001 From: xilesun <2013xile@gmail.com> Date: Fri, 11 Apr 2025 13:08:34 +0800 Subject: [PATCH] chore: update --- .../ai-employees/AIEmployeesProvider.tsx | 8 +- .../ai-employees/chatbox/AIEmployeeHeader.tsx | 39 ++- .../client/ai-employees/chatbox/ChatBox.tsx | 54 ++-- .../ai-employees/chatbox/ChatBoxContext.tsx | 144 ++-------- .../chatbox/ChatConversationsProvider.tsx | 49 ++++ .../chatbox/ChatMessagesProvider.tsx | 248 ++++++++++++++++++ .../ai-employees/chatbox/Conversations.tsx | 31 +-- .../ai-employees/chatbox/MessageRenderer.tsx | 69 +++++ .../client/ai-employees/chatbox/Messages.tsx | 49 +++- .../client/ai-employees/chatbox/Sender.tsx | 8 +- .../ai-employees/chatbox/SenderFooter.tsx | 6 +- .../ai-employees/chatbox/useChatMessages.ts | 194 -------------- .../ai-employees/chatbox/useChatRequest.tsx | 9 + .../chatbox/useLoadMoreObserver.ts | 49 ++++ .../ai-employees/manager/ProfileSettings.tsx | 3 + .../src/client/ai-employees/types.ts | 12 +- .../server/collections/ai-conversations.ts | 9 +- .../src/server/resource/aiConversations.ts | 49 ++-- 18 files changed, 630 insertions(+), 400 deletions(-) create mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/ChatConversationsProvider.tsx create mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/ChatMessagesProvider.tsx create mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/MessageRenderer.tsx delete mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/useChatMessages.ts create mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/useChatRequest.tsx create mode 100644 packages/plugins/@nocobase/plugin-ai/src/client/ai-employees/chatbox/useLoadMoreObserver.ts 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', }} > - } type="text" /> + : } + type="text" + onClick={() => setExpanded(!expanded)} + /> } type="text" onClick={() => setOpen(false)} /> - - - +