fix(chat): restore room message visibility and responders

This commit is contained in:
gsxdsm
2026-05-11 15:19:16 -07:00
parent 9bb46f5bfa
commit db628e9539
4 changed files with 117 additions and 64 deletions

View File

@@ -224,8 +224,13 @@ describe("useChatRooms", () => {
mockPostChatRoomMessage.mockRejectedValueOnce(new Error("No active room responders available for room room-1"));
mockFetchChatRoomMessages.mockResolvedValueOnce({ messages: [persistedUserMessage] });
await expect(result.current.sendRoomMessage("hello")).rejects.toThrow("No active room responders available for room room-1");
expect(result.current.messages.map((message) => message.id)).toEqual(["msg-user"]);
const sendPromise = act(async () => {
await expect(result.current.sendRoomMessage("hello")).rejects.toThrow("No active room responders available for room room-1");
});
await sendPromise;
await waitFor(() => {
expect(result.current.messages.map((message) => message.id)).toEqual(["msg-user"]);
});
});
it("tears down sse subscription on unmount", async () => {

View File

@@ -174,20 +174,32 @@ export function useChatRooms(
throw new Error("Select a room before sending a message");
}
const postResult = await postChatRoomMessage(roomId, {
content,
...(opts?.attachments ? { attachments: opts.attachments } : {}),
}, projectId);
try {
const postResult = await postChatRoomMessage(roomId, {
content,
...(opts?.attachments ? { attachments: opts.attachments } : {}),
}, projectId);
if (postResult.message?.createdAt && activeRoomSnapshot) {
setRooms((previous) => upsertRoom(previous, { ...activeRoomSnapshot, updatedAt: postResult.message.createdAt }));
}
if (postResult.message?.createdAt && activeRoomSnapshot) {
setRooms((previous) => upsertRoom(previous, { ...activeRoomSnapshot, updatedAt: postResult.message.createdAt }));
}
const latestMessages = await fetchChatRoomMessages(roomId, { limit: 100 }, projectId);
if (activeRoomRef.current?.id !== roomId) {
return;
const latestMessages = await fetchChatRoomMessages(roomId, { limit: 100 }, projectId);
if (activeRoomRef.current?.id !== roomId) {
return;
}
setMessages(latestMessages.messages);
} catch (error) {
try {
const latestMessages = await fetchChatRoomMessages(roomId, { limit: 100 }, projectId);
if (activeRoomRef.current?.id === roomId) {
setMessages(latestMessages.messages);
}
} catch {
// Ignore refresh failures and preserve the original error.
}
throw error;
}
setMessages(latestMessages.messages);
}, [projectId]);
useEffect(() => {