Skip to content

Commit 2fca941

Browse files
committedMar 13, 2025·
fix: Fix stale messages in message hook
1 parent 80c5860 commit 2fca941

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed
 

‎src/hooks/internal/useMessagesInternal.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback } from "react";
1+
import { useCallback, useEffect, useRef } from "react";
22

33
import { saveChatHistory } from "../../services/ChatHistoryService";
44
import { createMessage } from "../../utils/messageBuilder";
@@ -22,6 +22,10 @@ export const useMessagesInternal = () => {
2222

2323
// handles messages
2424
const { messages, setMessages } = useMessagesContext();
25+
const messagesRef = useRef<Array<Message>>(messages);
26+
useEffect(() => {
27+
messagesRef.current = messages;
28+
}, [messages])
2529

2630
// handles bot states
2731
const {
@@ -170,7 +174,7 @@ export const useMessagesInternal = () => {
170174
* Removes a message with the given id.
171175
*/
172176
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);
174178

175179
// nothing to remove if no such message
176180
if (!message) {
@@ -192,7 +196,7 @@ export const useMessagesInternal = () => {
192196
});
193197
setUnreadCount((prevCount) => Math.max(prevCount - 1, 0));
194198
return messageId;
195-
}, [callRcbEvent, messages, settings.event?.rcbRemoveMessage]);
199+
}, [callRcbEvent, settings.event?.rcbRemoveMessage]);
196200

197201
/**
198202
* Streams data into the last message at the end of the messages array with given type.
@@ -276,7 +280,7 @@ export const useMessagesInternal = () => {
276280
}
277281

278282
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);
280284

281285
// handles stop stream message event
282286
if (settings.event?.rcbStopStreamMessage) {
@@ -288,9 +292,9 @@ export const useMessagesInternal = () => {
288292

289293
// remove sender from streaming list and save messages
290294
streamMessageMap.current.delete(sender);
291-
saveChatHistory(messages);
295+
saveChatHistory(messagesRef.current);
292296
return true;
293-
}, [callRcbEvent, messages, settings.event?.rcbStopStreamMessage, streamMessageMap])
297+
}, [callRcbEvent, settings.event?.rcbStopStreamMessage, streamMessageMap])
294298

295299
/**
296300
* Handles post messages updates such as saving chat history, scrolling to bottom

0 commit comments

Comments
 (0)
Please sign in to comment.