fix(dm): remove local append on send to prevent double messages

This commit is contained in:
2026-07-06 13:53:11 +00:00
parent c2fb3165f4
commit 8bbe2a0ff0
+12 -15
View File
@@ -130,32 +130,29 @@ export const useConversationStore = create<ConversationState>((set, get) => ({
},
sendMessage: async (conversationId, content) => {
// don't append here — WS MESSAGE_CREATE broadcast is the single source of truth.
// Appending in both places caused double messages when the WS event arrived before the HTTP response.
const message = await api.post<ConversationMessage>(
`/conversations/${conversationId}/messages`,
{ content },
);
set((state) => ({
messagesByConversation: {
...state.messagesByConversation,
[conversationId]: [
...(state.messagesByConversation[conversationId] || []),
message,
],
},
}));
return message;
},
addMessage: (message) => {
set((state) => ({
set((state) => {
const existing = state.messagesByConversation[message.conversation_id] || [];
if (existing.some((m) => m.id === message.id)) {
return state;
}
return {
messagesByConversation: {
...state.messagesByConversation,
[message.conversation_id]: [
...(state.messagesByConversation[message.conversation_id] || []),
message,
].sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()),
[message.conversation_id]: [...existing, message]
.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()),
},
}));
};
});
},
updateMessage: (message) => {
set((state) => {