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
+15 -18
View File
@@ -130,32 +130,29 @@ export const useConversationStore = create<ConversationState>((set, get) => ({
}, },
sendMessage: async (conversationId, content) => { 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>( const message = await api.post<ConversationMessage>(
`/conversations/${conversationId}/messages`, `/conversations/${conversationId}/messages`,
{ content }, { content },
); );
set((state) => ({
messagesByConversation: {
...state.messagesByConversation,
[conversationId]: [
...(state.messagesByConversation[conversationId] || []),
message,
],
},
}));
return message; return message;
}, },
addMessage: (message) => { addMessage: (message) => {
set((state) => ({ set((state) => {
messagesByConversation: { const existing = state.messagesByConversation[message.conversation_id] || [];
...state.messagesByConversation, if (existing.some((m) => m.id === message.id)) {
[message.conversation_id]: [ return state;
...(state.messagesByConversation[message.conversation_id] || []), }
message, return {
].sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()), messagesByConversation: {
}, ...state.messagesByConversation,
})); [message.conversation_id]: [...existing, message]
.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()),
},
};
});
}, },
updateMessage: (message) => { updateMessage: (message) => {
set((state) => { set((state) => {