From 5635f483e4ad7d1413eb85242981d8efff45f1b8 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Fri, 9 Jan 2026 20:59:12 +0100 Subject: [PATCH] Fixed message dupes --- src/hooks/use-app.ts | 17 ------------- src/hooks/use-messages.ts | 52 ++++++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/hooks/use-app.ts b/src/hooks/use-app.ts index 87ce7b0..dff41a5 100644 --- a/src/hooks/use-app.ts +++ b/src/hooks/use-app.ts @@ -27,7 +27,6 @@ export default function useApp(): App { >({}); const [speaking, setSpeaking] = useState>({}); - const [pmsLoaded, setPmsLoaded] = useState(false); useEffect(() => { const stored = Cookies.get("servers"); @@ -43,22 +42,6 @@ export default function useApp(): App { .catch(toast.error); }, []); - useEffect(() => { - const json = localStorage.getItem("privateMessages"); - if (json) { - privateMessages.setMessages(JSON.parse(json)); - } - setPmsLoaded(true); - }, []); - - useEffect(() => { - if (!pmsLoaded) return; - localStorage.setItem( - "privateMessages", - JSON.stringify(privateMessages.messages) - ); - }, [privateMessages.messages, pmsLoaded]); - return { speaking, setSpeaking, diff --git a/src/hooks/use-messages.ts b/src/hooks/use-messages.ts index 883d84a..fce9bec 100644 --- a/src/hooks/use-messages.ts +++ b/src/hooks/use-messages.ts @@ -10,23 +10,45 @@ export interface MessageStore { clearMessages: () => void; insertMessages: (msgs: Message[]) => void; } + export default function useMessages(): MessageStore { - const [messages, setMessages] = useState([]); + const [messages, setMessagesState] = useState([]); + + // Helper to ensure unique messages by id + const uniqueMessages = (msgs: Message[]) => { + const map = new Map(); + msgs.forEach((m) => map.set(m.id, m)); // duplicates overwrite + return Array.from(map.values()); + }; + + const setMessages = (msgs: Message[]) => + setMessagesState(uniqueMessages(msgs)); + + const addMessage = (msg: Message) => + setMessagesState((messages) => + messages.some((m) => m.id === msg.id) ? messages : [...messages, msg] + ); + + const insertMessages = (msgs: Message[]) => + setMessagesState((messages) => uniqueMessages([...msgs, ...messages])); + + const deleteMessage = (id: number) => + setMessagesState((messages) => messages.filter((m) => m.id !== id)); + + const editMessage = (id: number, contents: string) => + setMessagesState((messages) => + messages.map((m) => (m.id === id ? { ...m, contents } : m)) + ); + + const clearMessages = () => setMessagesState([]); return { - messages: messages, - setMessages: (msgs) => setMessages(msgs), - addMessage: (msg) => - setMessages((messages) => - messages.some((m) => m.id === msg.id) ? messages : [...messages, msg] - ), - deleteMessage: (id: number) => - setMessages((messages) => messages.filter((m) => m.id !== id)), - editMessage: (id: number, contents) => - setMessages((messages) => - messages.map((m) => (m.id === id ? { ...m, contents } : m)) - ), - clearMessages: () => setMessages([]), - insertMessages: (msgs) => setMessages((m) => [...msgs, ...m]), + messages, + setMessages, + addMessage, + deleteMessage, + editMessage, + clearMessages, + insertMessages, }; }