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:
Fusion
2026-04-17 06:01:00 -07:00
committed by gsxdsm
parent 5f8597ea08
commit ad94051c79
3 changed files with 8 additions and 9 deletions

View File

@@ -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" }),
],
});

View File

@@ -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 {

View File

@@ -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 {