1
- import { useCallback } from "react" ;
1
+ import { useCallback , useEffect , useRef } from "react" ;
2
2
3
3
import { saveChatHistory } from "../../services/ChatHistoryService" ;
4
4
import { createMessage } from "../../utils/messageBuilder" ;
@@ -22,6 +22,10 @@ export const useMessagesInternal = () => {
22
22
23
23
// handles messages
24
24
const { messages, setMessages } = useMessagesContext ( ) ;
25
+ const messagesRef = useRef < Array < Message > > ( messages ) ;
26
+ useEffect ( ( ) => {
27
+ messagesRef . current = messages ;
28
+ } , [ messages ] )
25
29
26
30
// handles bot states
27
31
const {
@@ -170,7 +174,7 @@ export const useMessagesInternal = () => {
170
174
* Removes a message with the given id.
171
175
*/
172
176
const removeMessage = useCallback ( async ( messageId : string ) : Promise < string | null > => {
173
- const message = messages . find ( msg => msg . id === messageId ) ;
177
+ const message = messagesRef . current . find ( msg => msg . id === messageId ) ;
174
178
175
179
// nothing to remove if no such message
176
180
if ( ! message ) {
@@ -192,7 +196,7 @@ export const useMessagesInternal = () => {
192
196
} ) ;
193
197
setUnreadCount ( ( prevCount ) => Math . max ( prevCount - 1 , 0 ) ) ;
194
198
return messageId ;
195
- } , [ callRcbEvent , messages , settings . event ?. rcbRemoveMessage ] ) ;
199
+ } , [ callRcbEvent , settings . event ?. rcbRemoveMessage ] ) ;
196
200
197
201
/**
198
202
* Streams data into the last message at the end of the messages array with given type.
@@ -276,7 +280,7 @@ export const useMessagesInternal = () => {
276
280
}
277
281
278
282
const messageId = streamMessageMap . current . get ( sender ) ;
279
- const messageToEndStreamFor = messages . find ( ( message ) => message . id === messageId ) ;
283
+ const messageToEndStreamFor = messagesRef . current . find ( ( message ) => message . id === messageId ) ;
280
284
281
285
// handles stop stream message event
282
286
if ( settings . event ?. rcbStopStreamMessage ) {
@@ -288,9 +292,9 @@ export const useMessagesInternal = () => {
288
292
289
293
// remove sender from streaming list and save messages
290
294
streamMessageMap . current . delete ( sender ) ;
291
- saveChatHistory ( messages ) ;
295
+ saveChatHistory ( messagesRef . current ) ;
292
296
return true ;
293
- } , [ callRcbEvent , messages , settings . event ?. rcbStopStreamMessage , streamMessageMap ] )
297
+ } , [ callRcbEvent , settings . event ?. rcbStopStreamMessage , streamMessageMap ] )
294
298
295
299
/**
296
300
* Handles post messages updates such as saving chat history, scrolling to bottom
0 commit comments