From 64d2bae98dda5d572b5594bc057a368ec87e8989 Mon Sep 17 00:00:00 2001 From: 777genius Date: Sun, 31 May 2026 02:14:32 +0300 Subject: [PATCH] perf(renderer): memoize member card row controls --- .../components/team/members/MemberCard.tsx | 188 +++++++++++------- 1 file changed, 120 insertions(+), 68 deletions(-) diff --git a/src/renderer/components/team/members/MemberCard.tsx b/src/renderer/components/team/members/MemberCard.tsx index fac78f59..e62680c8 100644 --- a/src/renderer/components/team/members/MemberCard.tsx +++ b/src/renderer/components/team/members/MemberCard.tsx @@ -567,6 +567,118 @@ const MemberRuntimeTelemetryStrip = memo(function MemberRuntimeTelemetryStrip({ ); }); +interface MemberActionButtonProps { + label: string; + children: React.ReactNode; + onClick?: () => void; +} + +const MemberActionButton = memo(function MemberActionButton({ + label, + children, + onClick, +}: MemberActionButtonProps): React.JSX.Element { + const [tooltipOpen, setTooltipOpen] = useState(false); + + return ( + + + + + {tooltipOpen ? {label} : null} + + ); +}); + +interface MemberQuickActionsProps { + onSendMessage?: () => void; + onAssignTask?: () => void; +} + +const MemberQuickActions = memo(function MemberQuickActions({ + onSendMessage, + onAssignTask, +}: MemberQuickActionsProps): React.JSX.Element { + const { t } = useAppTranslation('team'); + + return ( +
+ + + + + + +
+ ); +}); + +interface MemberTaskProgressBadgeProps { + showStartingSkeleton: boolean; + memberTaskCount: number; + completed: number; + totalTasks: number; + progressPercent: number; +} + +const MemberTaskProgressBadge = memo(function MemberTaskProgressBadge({ + showStartingSkeleton, + memberTaskCount, + completed, + totalTasks, + progressPercent, +}: MemberTaskProgressBadgeProps): React.JSX.Element { + if (showStartingSkeleton) { + return ( +