From 75617ae49b66aa343d53f828cc0ea42ead91ef9b Mon Sep 17 00:00:00 2001 From: ssbg04 Date: Sun, 18 Oct 2026 13:31:18 +0800 Subject: [PATCH] fix: merge incoming live chat replies using map deduplication and reduce polling interval to 2.5s --- src/components/LiveChatBox.tsx | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/LiveChatBox.tsx b/src/components/LiveChatBox.tsx index bc5a006..1f21b4f 100644 --- a/src/components/LiveChatBox.tsx +++ b/src/components/LiveChatBox.tsx @@ -44,14 +44,28 @@ export default function LiveChatBox() { .then((res) => { if (res?.messages && res.messages.length > 0) { setMessages((prev) => { + const map = new Map(); + // Keep welcome message const welcome = prev.find((m) => m.id === 'welcome'); - const combined = welcome ? [welcome, ...res.messages] : res.messages; - return combined; + if (welcome) map.set(welcome.id, welcome); + + // Add current messages (including optimistic ones) + for (const m of prev) { + map.set(m.id, m); + } + + // Merge incoming server messages (replacing or adding) + for (const m of res.messages as ChatMessage[]) { + map.set(m.id, m); + } + + // Sort by timestamp + return Array.from(map.values()).sort((a, b) => a.time - b.time); }); } }) .catch(() => {}); - }, 4000); + }, 2500); return () => clearInterval(interval); }, [sessionId]);