fix(dm): remove local append on send to prevent double messages
This commit is contained in:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user