fix(chat): restore room message visibility and responders
This commit is contained in:
@@ -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 () => {
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user