diff --git a/src/renderer/components/team/members/MemberCard.tsx b/src/renderer/components/team/members/MemberCard.tsx index c0b69d2c..fac78f59 100644 --- a/src/renderer/components/team/members/MemberCard.tsx +++ b/src/renderer/components/team/members/MemberCard.tsx @@ -97,6 +97,7 @@ interface MemberCardProps { spawnRuntimeAlive?: boolean; isLaunchSettling?: boolean; runtimeTelemetryScale?: RuntimeTelemetryScale; + renderRuntimeTelemetryStrip?: boolean; onOpenTask?: () => void; onOpenReviewTask?: () => void; onClick?: () => void; @@ -575,6 +576,7 @@ export const MemberCard = memo(function MemberCard({ runtimeSummary, runtimeEntry, runtimeRunId, + renderRuntimeTelemetryStrip = true, taskCounts, isTeamAlive, isTeamProvisioning, @@ -1016,7 +1018,7 @@ export const MemberCard = memo(function MemberCard({ } }} > - {!isRemoved ? ( + {!isRemoved && renderRuntimeTelemetryStrip ? ( ) : null}
diff --git a/src/renderer/components/team/members/MemberList.tsx b/src/renderer/components/team/members/MemberList.tsx index 66fa2901..cddcdf55 100644 --- a/src/renderer/components/team/members/MemberList.tsx +++ b/src/renderer/components/team/members/MemberList.tsx @@ -512,6 +512,7 @@ interface MemberCardRowProps { leadActivity?: LeadActivityState; isLaunchSettling?: boolean; runtimeTelemetryScale?: RuntimeTelemetryScale; + renderRuntimeTelemetryStrip?: boolean; onOpenTask?: (taskId: string) => void; onMemberClick?: (member: ResolvedTeamMember) => void; onSendMessage?: (member: ResolvedTeamMember) => void; @@ -550,6 +551,7 @@ const MemberCardRow = memo(function MemberCardRow({ leadActivity, isLaunchSettling, runtimeTelemetryScale, + renderRuntimeTelemetryStrip, onOpenTask, onMemberClick, onSendMessage, @@ -603,6 +605,7 @@ const MemberCardRow = memo(function MemberCardRow({ spawnRuntimeAlive={spawnRuntimeAlive} isLaunchSettling={isLaunchSettling} runtimeTelemetryScale={runtimeTelemetryScale} + renderRuntimeTelemetryStrip={renderRuntimeTelemetryStrip} onOpenTask={currentTask ? handleOpenTask : undefined} onOpenReviewTask={reviewTask ? handleOpenReviewTask : undefined} onClick={handleClick} @@ -736,6 +739,7 @@ export const MemberList = memo(function MemberList({ const { t } = useAppTranslation('team'); const containerRef = useRef(null); const [isWide, setIsWide] = useState(false); + const [runtimeTelemetryPreviewActive, setRuntimeTelemetryPreviewActive] = useState(false); const handleResize = useCallback((entries: ResizeObserverEntry[]) => { const entry = entries[0]; @@ -753,6 +757,25 @@ export const MemberList = memo(function MemberList({ return () => observer.disconnect(); }, [handleResize]); + const activateRuntimeTelemetryPreview = useCallback(() => { + setRuntimeTelemetryPreviewActive(true); + }, []); + + const deactivateRuntimeTelemetryPreview = useCallback(() => { + setRuntimeTelemetryPreviewActive(false); + }, []); + + const handleRuntimeTelemetryPreviewBlur = useCallback( + (event: React.FocusEvent) => { + const nextTarget = event.relatedTarget; + if (nextTarget instanceof Node && event.currentTarget.contains(nextTarget)) { + return; + } + deactivateRuntimeTelemetryPreview(); + }, + [deactivateRuntimeTelemetryPreview] + ); + const gridClass = isWide ? 'grid grid-cols-2 gap-1' : 'grid grid-cols-1 gap-1'; const activeMembers = useMemo( () => @@ -936,7 +959,14 @@ export const MemberList = memo(function MemberList({ } return ( -
+
{activeMembers.map((member) => { const spawnEntry = memberSpawnStatuses?.get(member.name); @@ -1057,6 +1087,7 @@ export const MemberList = memo(function MemberList({ leadActivity={leadActivity} isLaunchSettling={isLaunchSettling} runtimeTelemetryScale={runtimeTelemetryScale} + renderRuntimeTelemetryStrip={runtimeTelemetryPreviewActive} onOpenTask={onOpenTask} onMemberClick={onMemberClick} onSendMessage={onSendMessage} @@ -1105,6 +1136,7 @@ export const MemberList = memo(function MemberList({ leadActivity={leadActivity} isLaunchSettling={false} runtimeTelemetryScale={runtimeTelemetryScale} + renderRuntimeTelemetryStrip={runtimeTelemetryPreviewActive} onOpenTask={onOpenTask} onMemberClick={onMemberClick} onSendMessage={onSendMessage}