fix adding messages

This commit is contained in:
nflnkr 2023-03-22 12:24:12 +03:00
parent 88b2a25b00
commit 8b656fc350
2 changed files with 14 additions and 3 deletions

@ -1,5 +1,5 @@
import { Box, IconButton, InputAdornment, TextField, useTheme } from "@mui/material";
import { addMessages, setMessages, useMessageStore } from "@root/stores/messages";
import { addOrUpdateMessage, setMessages, useMessageStore } from "@root/stores/messages";
import Message from "./Message";
import SendIcon from "@mui/icons-material/Send";
import AttachFileIcon from "@mui/icons-material/AttachFile";
@ -66,7 +66,7 @@ export default function Chat() {
try {
const newMessage = JSON.parse(event.data) as TicketMessage;
addMessages([newMessage]);
addOrUpdateMessage(newMessage);
} catch (error) {
console.log("Error parsing message SSE", error);
}

@ -20,4 +20,15 @@ export const useMessageStore = create<MessageStore>()(
);
export const setMessages = (messages: TicketMessage[]) => useMessageStore.setState(({ messages }));
export const addMessages = (messages: TicketMessage[]) => useMessageStore.setState(state => ({ messages: [...state.messages, ...messages] }));
export const addOrUpdateMessage = (newMessage: TicketMessage) => {
const state = useMessageStore.getState();
const ticketIndex = state.messages.findIndex(message => message.id === newMessage.id);
if (ticketIndex === -1) {
return useMessageStore.setState({ messages: [...state.messages, newMessage] });
}
const newMessages = state.messages.slice().splice(ticketIndex, 1, newMessage);
useMessageStore.setState({ messages: newMessages });
};