11import { addNewMessageAtom , updateMessageAtom } from './atoms/ChatMessage.atom'
22import { toChatMessage } from '@models/ChatMessage'
3- import { events , EventName , NewMessageResponse } from '@janhq/core'
3+ import { events , EventName , NewMessageResponse , DataService } from '@janhq/core'
44import { useSetAtom } from 'jotai'
55import { ReactNode , useEffect } from 'react'
66import useGetBots from '@hooks/useGetBots'
77import useGetUserConversations from '@hooks/useGetUserConversations'
8+ import { updateConversationAtom } from './atoms/Conversation.atom'
9+ import { executeSerial } from '../../electron/core/plugin-manager/execution/extension-manager'
10+ import { debounce } from 'lodash'
11+
12+ let currentConversation : Conversation | undefined = undefined
13+
14+ const debouncedUpdateConversation = debounce (
15+ async ( updatedConv : Conversation ) => {
16+ await executeSerial ( DataService . UpdateConversation , updatedConv )
17+ } ,
18+ 1000
19+ )
820
921export default function EventHandler ( { children } : { children : ReactNode } ) {
1022 const addNewMessage = useSetAtom ( addNewMessageAtom )
1123 const updateMessage = useSetAtom ( updateMessageAtom )
24+ const updateConversation = useSetAtom ( updateConversationAtom )
1225 const { getBotById } = useGetBots ( )
1326 const { getConversationById } = useGetUserConversations ( )
1427
@@ -34,12 +47,32 @@ export default function EventHandler({ children }: { children: ReactNode }) {
3447 messageResponse . conversationId &&
3548 messageResponse . _id &&
3649 messageResponse . message
37- )
50+ ) {
3851 updateMessage (
3952 messageResponse . _id ,
4053 messageResponse . conversationId ,
4154 messageResponse . message
4255 )
56+ }
57+
58+ if ( messageResponse . conversationId ) {
59+ if (
60+ ! currentConversation ||
61+ currentConversation . _id !== messageResponse . conversationId
62+ ) {
63+ currentConversation = await getConversationById (
64+ messageResponse . conversationId
65+ )
66+ }
67+
68+ const updatedConv : Conversation = {
69+ ...currentConversation ,
70+ lastMessage : messageResponse . message ,
71+ }
72+
73+ updateConversation ( updatedConv )
74+ debouncedUpdateConversation ( updatedConv )
75+ }
4376 }
4477
4578 useEffect ( ( ) => {
0 commit comments