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);