fix(FN-1995): preserve backend chat message order
- Remove unnecessary .reverse() calls when setting messages in useChat. - Keep paginated prepend behavior intact by using backend chronological ordering directly. - Update useChat tests to provide message fixtures in oldest-first order.
This commit is contained in:
@@ -162,13 +162,13 @@ describe("useChat", () => {
|
||||
mockFetchChatSessions.mockResolvedValueOnce({ sessions: [session] });
|
||||
|
||||
// Simulate a conversation with multiple user and assistant messages
|
||||
// Note: The hook calls reverse() on the messages array, so we provide them in reverse order
|
||||
// in backend chronological order (oldest first)
|
||||
mockFetchChatMessages.mockResolvedValueOnce({
|
||||
messages: [
|
||||
makeMessage({ id: "msg-004", sessionId: "session-001", role: "assistant", content: "Second answer" }),
|
||||
makeMessage({ id: "msg-003", sessionId: "session-001", role: "user", content: "Second question" }),
|
||||
makeMessage({ id: "msg-002", sessionId: "session-001", role: "assistant", content: "First answer" }),
|
||||
makeMessage({ id: "msg-001", sessionId: "session-001", role: "user", content: "First question" }),
|
||||
makeMessage({ id: "msg-002", sessionId: "session-001", role: "assistant", content: "First answer" }),
|
||||
makeMessage({ id: "msg-003", sessionId: "session-001", role: "user", content: "Second question" }),
|
||||
makeMessage({ id: "msg-004", sessionId: "session-001", role: "assistant", content: "Second answer" }),
|
||||
],
|
||||
});
|
||||
|
||||
|
||||
@@ -162,9 +162,9 @@ export function useChat(projectId?: string): UseChatReturn {
|
||||
const data = await fetchChatMessages(sessionId, { limit: 50, ...opts }, projectId);
|
||||
if (opts?.offset && opts.offset > 0) {
|
||||
// Prepend older messages
|
||||
setMessages((prev) => [...data.messages.reverse(), ...prev]);
|
||||
setMessages((prev) => [...data.messages, ...prev]);
|
||||
} else {
|
||||
setMessages(data.messages.reverse());
|
||||
setMessages(data.messages);
|
||||
}
|
||||
setHasMoreMessages(data.messages.length >= 50);
|
||||
} catch {
|
||||
|
||||
@@ -172,8 +172,7 @@ export function useQuickChat(
|
||||
setMessagesLoading(true);
|
||||
try {
|
||||
const data = await fetchChatMessages(activeSession.id, { limit: 50 }, projectId);
|
||||
// Reverse to show oldest first
|
||||
setMessages(data.messages.reverse());
|
||||
setMessages(data.messages);
|
||||
} catch (err) {
|
||||
console.error("[useQuickChat] Failed to load messages:", err);
|
||||
} finally {
|
||||
@@ -196,7 +195,7 @@ export function useQuickChat(
|
||||
setMessagesLoading(true);
|
||||
try {
|
||||
const data = await fetchChatMessages(activeSession.id, { limit: 50 }, projectId);
|
||||
setMessages(data.messages.reverse());
|
||||
setMessages(data.messages);
|
||||
} catch (err) {
|
||||
console.error("[useQuickChat] Failed to reload messages:", err);
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user