diff --git a/frontend-modern/src/components/Settings/InfrastructureSourceManager.tsx b/frontend-modern/src/components/Settings/InfrastructureSourceManager.tsx index 21c359ff7..ab8602a62 100644 --- a/frontend-modern/src/components/Settings/InfrastructureSourceManager.tsx +++ b/frontend-modern/src/components/Settings/InfrastructureSourceManager.tsx @@ -26,6 +26,7 @@ import { connectionAgentVersionPresentation, infrastructureSourcePresentation, surfaceLabel, + type InfrastructureSystemMemberRow, type InfrastructureSystemRow, } from './connectionsTableModel'; import type { DiscoveredServer, DiscoveryScanStatus } from './infrastructureSettingsModel'; @@ -72,7 +73,18 @@ const workspaceSecondaryButtonClass = 'inline-flex min-h-9 items-center justify-center gap-2 rounded-md border border-border bg-surface px-3 py-2 text-sm font-medium text-base-content transition-colors hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-60'; const discoveryRowClass = 'border-b border-border-subtle bg-blue-50/30 hover:bg-blue-50/40 dark:bg-blue-950/10 dark:hover:bg-blue-950/20'; -const wrappedFieldClass = 'whitespace-normal break-words leading-4'; +// The system column shows just the name on a single line. The OS / version +// (standalone) or cluster identity (cluster) descriptor that used to sit on a +// second line moves into the name's hover title, so every row stays one line +// like the platform overview tables. Discovery rows already fold version into +// the name title the same way. +const rowSystemTitle = (row: InfrastructureSystemRow): string => { + const detail = row.isCluster ? row.subtitle : row.identitySubtitle; + return detail ? `${row.name} · ${detail}` : row.name; +}; + +const memberSystemTitle = (member: InfrastructureSystemMemberRow): string => + member.subtitle ? `${member.name} · ${member.subtitle}` : member.name; // The connected-systems table sets `min-w-[820px]`; switch to the card // layout whenever the measured container can't fit that, otherwise the // table renders but overflows horizontally inside the settings panel. @@ -660,13 +672,19 @@ export const InfrastructureSourceManager: Component - + System - + + Method + + + Host + + Coverage - + Status @@ -702,7 +720,7 @@ export const InfrastructureSourceManager: Component - +
{group.label}
@@ -711,7 +729,7 @@ export const InfrastructureSourceManager: Component - +
{group.label} - +
{row.name}
- -
- {row.subtitle} -
-
- -
- {row.identitySubtitle} -
-
+
+ + {(() => { const presentation = infrastructureSourcePresentation( row.source, @@ -773,27 +784,35 @@ export const InfrastructureSourceManager: Component - - {presentation.label} - - - - {row.host} - - -
+ + {presentation.label} + ); })()}
- + + + + + 0} fallback={ @@ -803,7 +822,7 @@ export const InfrastructureSourceManager: Component
{row.coverageLabels.join(', ')} @@ -811,8 +830,8 @@ export const InfrastructureSourceManager: Component - -
+ +
@@ -822,11 +841,11 @@ export const InfrastructureSourceManager: Component {row.agentUpdateCount === 1 ? 'Agent update' - : `${row.agentUpdateCount} agent updates`} + : `${row.agentUpdateCount} updates`}
- - {(problem) => ( -
- {problem().label} -
- )} -
- + Read only } > -
+
{/* Row-level install-agent shortcut, scoped to Proxmox VE: the agent adds node-local telemetry (temps, SMART, host identity) that the PVE API doesn't expose. PBS and other API-only sources are fully covered without an agent, so we don't nudge for - one there. */} + one there. Rendered icon-only so the row + stays a single line; the full guided flow + lives behind Manage. */} - - Install agent +