perf(renderer): pass composer member avatars
This commit is contained in:
parent
4d0f3d802b
commit
db2c82475b
2 changed files with 9 additions and 3 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue