diff --git a/frontend/src/pages/AgentsPage.tsx b/frontend/src/pages/AgentsPage.tsx index b260ecbb..4fd0dd81 100644 --- a/frontend/src/pages/AgentsPage.tsx +++ b/frontend/src/pages/AgentsPage.tsx @@ -1075,26 +1075,100 @@ function ChannelsTab({ agentId }: { agentId: string }) { {connected.map((c) => { const meta = SOURCE_CATALOG.find(s => s.connector_id === c.connector_id); const unit = meta?.unitLabel || 'items'; + const isReconnecting = expandedId === c.connector_id; return (
- {iconMap[c.connector_id] || '\uD83D\uDD17'} -
-
- {c.display_name} -
-
- {c.chunks.toLocaleString()} {unit} +
+ {iconMap[c.connector_id] || '\uD83D\uDD17'} +
+
+ {c.display_name} +
+
0 ? '#4ade80' : '#f59e0b' }}> + {c.chunks > 0 + ? `${c.chunks.toLocaleString()} ${unit}` + : 'Connected — no data synced yet'} +
+
- {'\u2713'} + {isReconnecting && meta?.steps && ( +
+
+ Re-enter credentials to reconnect this source. +
+ {meta.steps.map((step, i) => ( +
+
+ STEP {i + 1} +
+
+ {step.label} +
+ {step.url && ( + + {step.urlLabel || 'Open'} → + + )} +
+ ))} + {meta.inputFields && ( + handleConnect(c.connector_id, req)} + /> + )} +
+ )}
); })}