From 874432becfe0f9d53490223a6e2d6e8dd0d8bb36 Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 11 Aug 2026 22:16:51 +0200 Subject: [PATCH] Handle provider activity load failures --- .../assistant-provider-activity.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/docs/src/components/assistant-provider/assistant-provider-activity.tsx b/apps/docs/src/components/assistant-provider/assistant-provider-activity.tsx index 45a91d094..b2ed38bec 100644 --- a/apps/docs/src/components/assistant-provider/assistant-provider-activity.tsx +++ b/apps/docs/src/components/assistant-provider/assistant-provider-activity.tsx @@ -33,11 +33,18 @@ const mergeActivity = (current: WorkshopAssistantActivity[], next: WorkshopAssis const mergeActivities = (current: WorkshopAssistantActivity[], next: WorkshopAssistantActivity[]) => next.reduce(mergeActivity, current); +const getEmptyLabel = (loading: boolean, loadFailed: boolean, connected: boolean) => { + if (loading) return "Loading recent activity…"; + if (loadFailed) return connected ? "Waiting for live provider activity…" : "Recent provider activity is unavailable."; + return "No provider requests yet today."; +}; + export const AssistantProviderActivity = ({ compact = false }: { compact?: boolean }) => { const { siteConfig } = useDocusaurusContext(); const configuredWorkshopUrl = (siteConfig.customFields?.workshopUrl as string | undefined) ?? ""; const [activities, setActivities] = useState([]); const [loading, setLoading] = useState(true); + const [loadFailed, setLoadFailed] = useState(false); const [connected, setConnected] = useState(false); const workshopUrl = useMemo(() => getRuntimeWorkshopApiUrl(configuredWorkshopUrl), [configuredWorkshopUrl]); @@ -64,9 +71,12 @@ export const AssistantProviderActivity = ({ compact = false }: { compact?: boole } try { const initial = await backend.listAssistantActivity(10); - if (active) setActivities((current) => mergeActivities(current, initial)); + if (active) { + setActivities((current) => mergeActivities(current, initial)); + setLoadFailed(false); + } } catch { - // Realtime activity can still populate this view when the initial list request fails. + if (active) setLoadFailed(true); } finally { if (active) setLoading(false); } @@ -127,7 +137,7 @@ export const AssistantProviderActivity = ({ compact = false }: { compact?: boole ) : ( -
{loading ? "Loading recent activity…" : "No provider requests yet today."}
+
{getEmptyLabel(loading, loadFailed, connected)}
)} );