From 7da7ad5041931e6ee3186d65db97d2f22f8df43b Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Fri, 29 May 2026 00:54:29 +0200 Subject: [PATCH] auto-refresh teamsbot session list every 10s to catch new/changed sessions Co-authored-by: Cursor --- .../views/teamsbot/TeamsbotSessionView.tsx | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/pages/views/teamsbot/TeamsbotSessionView.tsx b/src/pages/views/teamsbot/TeamsbotSessionView.tsx index e1b382f..9e8febd 100644 --- a/src/pages/views/teamsbot/TeamsbotSessionView.tsx +++ b/src/pages/views/teamsbot/TeamsbotSessionView.tsx @@ -436,6 +436,28 @@ export const TeamsbotSessionView: React.FC = () => { }); }, [session?.id, session?.status, session?.botName, session?.startedAt, session?.endedAt]); + // Periodically refresh the full session list to discover new/changed/ended sessions. + useEffect(() => { + if (!instanceId) return; + const listPollRef = setInterval(async () => { + try { + const listResult = await teamsbotApi.listSessions(instanceId, true); + const fresh = listResult.sessions || []; + setAllSessions((prev) => { + if (prev.length !== fresh.length) return fresh; + const changed = fresh.some((s, i) => { + const old = prev[i]; + return !old || old.id !== s.id || old.status !== s.status + || old.endedAt !== s.endedAt || old.startedAt !== s.startedAt; + }); + return changed ? fresh : prev; + }); + if (noSessions && fresh.length > 0) setNoSessions(false); + } catch { /* ignore */ } + }, 10_000); + return () => clearInterval(listPollRef); + }, [instanceId, noSessions]); + // Polling: while joining/pending, poll even if SSE is connected (status may not arrive on stream). // For active-only, poll only when SSE is down (previous behavior). const pollRef = useRef | null>(null);