From fd98c5e11ad750388b1b11df4d9ab05839fc3d0c Mon Sep 17 00:00:00 2001 From: Ishaan Gupta Date: Tue, 9 Jun 2026 19:17:08 +0530 Subject: [PATCH] Make Nova connector list click expandable --- .../components/chat/message/agent-message.tsx | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/apps/web/components/chat/message/agent-message.tsx b/apps/web/components/chat/message/agent-message.tsx index 09add29b..b30b92f7 100644 --- a/apps/web/components/chat/message/agent-message.tsx +++ b/apps/web/components/chat/message/agent-message.tsx @@ -211,6 +211,10 @@ function connectorIconSrc( return connector.icon } +function connectorCardKey(connector: NovaConnectorCardData): string { + return `${connector.kind ?? "connector"}-${connector.id ?? connector.name ?? "unknown"}` +} + function connectorIdentity( output: NovaConnectorToolOutput | null, ): string | null { @@ -503,15 +507,26 @@ function NovaConnectorCard({ function NovaConnectorCompactCard({ connector, + expanded, + onToggle, }: { connector: NovaConnectorCardData + expanded: boolean + onToggle: () => void }) { const iconSrc = connectorIconSrc(connector) return ( -
+
-
- -
) } function NovaConnectorToolDisplay({ part }: { part: ToolCallDisplayPart }) { + const [expandedConnectorKey, setExpandedConnectorKey] = useState< + string | null + >(null) const toolName = connectorToolName(part) const output = unwrapToolOutput(part.output) const isLoading = @@ -585,6 +605,12 @@ function NovaConnectorToolDisplay({ part }: { part: ToolCallDisplayPart }) { : (output.connectors ?? []) const isConnectorList = toolName === "listNovaConnectors" && connectors.length > 1 + const expandedConnector = + isConnectorList && expandedConnectorKey + ? connectors.find( + (connector) => connectorCardKey(connector) === expandedConnectorKey, + ) + : null return (
{isConnectorList ? ( @@ -601,17 +627,29 @@ function NovaConnectorToolDisplay({ part }: { part: ToolCallDisplayPart }) { {connectors.map((connector) => isConnectorList ? ( { + const nextKey = connectorCardKey(connector) + setExpandedConnectorKey((current) => + current === nextKey ? null : nextKey, + ) + }} /> ) : ( ), )}
+ {expandedConnector ? ( +
+ +
+ ) : null}
) }