perf(renderer): pass composer member avatars

This commit is contained in:
777genius 2026-05-31 05:37:33 +03:00
parent 4d0f3d802b
commit db2c82475b
2 changed files with 9 additions and 3 deletions

View file

@ -26,6 +26,8 @@ interface MemberBadgeProps {
teamName?: string; teamName?: string;
/** Avatar + badge size variant */ /** Avatar + badge size variant */
size?: 'xs' | 'sm' | 'md'; size?: 'xs' | 'sm' | 'md';
/** Pre-resolved avatar URL from a caller that already owns the member roster. */
avatarUrl?: string;
/** Hide the avatar icon, show only the name badge */ /** Hide the avatar icon, show only the name badge */
hideAvatar?: boolean; hideAvatar?: boolean;
onClick?: (name: string) => void; onClick?: (name: string) => void;
@ -59,6 +61,7 @@ export const MemberBadge = memo(
color, color,
teamName, teamName,
size = 'sm', size = 'sm',
avatarUrl,
hideAvatar, hideAvatar,
onClick, onClick,
disableHoverCard, disableHoverCard,
@ -66,7 +69,7 @@ export const MemberBadge = memo(
const colors = getTeamColorSet(color ?? ''); const colors = getTeamColorSet(color ?? '');
const { isLight } = useTheme(); const { isLight } = useTheme();
const effectiveAvatarTeamName = useStore((s) => const effectiveAvatarTeamName = useStore((s) =>
hideAvatar ? null : (teamName ?? s.selectedTeamName) hideAvatar || avatarUrl != null ? null : (teamName ?? s.selectedTeamName)
); );
const teamMembers = useStore((s) => const teamMembers = useStore((s) =>
effectiveAvatarTeamName effectiveAvatarTeamName
@ -87,7 +90,7 @@ export const MemberBadge = memo(
const avatar = ( const avatar = (
<img <img
src={avatarMap.get(name) ?? agentAvatarUrl(name, avatarSize)} src={avatarUrl ?? avatarMap.get(name) ?? agentAvatarUrl(name, avatarSize)}
alt="" alt=""
className={`${avatarClass} shrink-0 rounded-full bg-[var(--color-surface-raised)]`} className={`${avatarClass} shrink-0 rounded-full bg-[var(--color-surface-raised)]`}
loading="lazy" loading="lazy"

View file

@ -26,7 +26,7 @@ import {
validateAttachmentPayloadsForMember, validateAttachmentPayloadsForMember,
} from '@renderer/utils/attachmentRecipientCapabilities'; } from '@renderer/utils/attachmentRecipientCapabilities';
import { formatAgentRole } from '@renderer/utils/formatAgentRole'; import { formatAgentRole } from '@renderer/utils/formatAgentRole';
import { buildMemberColorMap } from '@renderer/utils/memberHelpers'; import { buildMemberAvatarMap, buildMemberColorMap } from '@renderer/utils/memberHelpers';
import { isOpenCodeRuntimeDeliveryHardUxFailureFromDebugDetails } from '@renderer/utils/openCodeRuntimeDeliveryDiagnostics'; import { isOpenCodeRuntimeDeliveryHardUxFailureFromDebugDetails } from '@renderer/utils/openCodeRuntimeDeliveryDiagnostics';
import { nameColorSet } from '@renderer/utils/projectColor'; import { nameColorSet } from '@renderer/utils/projectColor';
import { getSuggestedSlashCommandsForProvider } from '@renderer/utils/providerSlashCommands'; import { getSuggestedSlashCommandsForProvider } from '@renderer/utils/providerSlashCommands';
@ -293,6 +293,7 @@ export const MessageComposer = ({
const slashCommandDataEnabled = textHasSlashCommandTrigger; const slashCommandDataEnabled = textHasSlashCommandTrigger;
const colorMap = useMemo(() => buildMemberColorMap(members), [members]); const colorMap = useMemo(() => buildMemberColorMap(members), [members]);
const avatarMap = useMemo(() => buildMemberAvatarMap(members), [members]);
const mentionSuggestions = useMemo<MentionSuggestion[]>( const mentionSuggestions = useMemo<MentionSuggestion[]>(
() => () =>
@ -1129,6 +1130,7 @@ export const MessageComposer = ({
name={recipient} name={recipient}
color={selectedResolvedColor} color={selectedResolvedColor}
size="sm" size="sm"
avatarUrl={avatarMap.get(recipient)}
hideAvatar={recipient === 'user'} hideAvatar={recipient === 'user'}
disableHoverCard disableHoverCard
/> />
@ -1207,6 +1209,7 @@ export const MessageComposer = ({
name={m.name} name={m.name}
color={resolvedColor} color={resolvedColor}
size="sm" size="sm"
avatarUrl={avatarMap.get(m.name)}
hideAvatar={m.name === 'user'} hideAvatar={m.name === 'user'}
disableHoverCard disableHoverCard
/> />