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) => {
|
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) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user