perf(renderer): skip avatar lookups for hidden member badges

This commit is contained in:
777genius 2026-05-31 03:21:21 +03:00
parent c02565b07d
commit b8f394d9f7

View file

@ -17,6 +17,8 @@ import {
import { MemberHoverCard } from './members/MemberHoverCard'; import { MemberHoverCard } from './members/MemberHoverCard';
import type { ResolvedTeamMember } from '@shared/types';
interface MemberBadgeProps { interface MemberBadgeProps {
name: string; name: string;
color?: string; color?: string;
@ -31,6 +33,8 @@ interface MemberBadgeProps {
disableHoverCard?: boolean; disableHoverCard?: boolean;
} }
const EMPTY_TEAM_MEMBERS: readonly ResolvedTeamMember[] = [];
/** /**
* Reusable member avatar + colored name badge. * Reusable member avatar + colored name badge.
* Avatar is rendered OUTSIDE the badge, to the left. * Avatar is rendered OUTSIDE the badge, to the left.
@ -49,10 +53,13 @@ export const MemberBadge = memo(
}: MemberBadgeProps): React.JSX.Element => { }: MemberBadgeProps): React.JSX.Element => {
const colors = getTeamColorSet(color ?? ''); const colors = getTeamColorSet(color ?? '');
const { isLight } = useTheme(); const { isLight } = useTheme();
const selectedTeamName = useStore((s) => s.selectedTeamName); const effectiveAvatarTeamName = useStore((s) =>
const effectiveTeamName = teamName ?? selectedTeamName; hideAvatar ? null : (teamName ?? s.selectedTeamName)
);
const teamMembers = useStore((s) => const teamMembers = useStore((s) =>
effectiveTeamName ? selectResolvedMembersForTeamName(s, effectiveTeamName) : [] effectiveAvatarTeamName
? selectResolvedMembersForTeamName(s, effectiveAvatarTeamName)
: EMPTY_TEAM_MEMBERS
); );
const avatarMap = useMemo(() => buildMemberAvatarMap(teamMembers), [teamMembers]); const avatarMap = useMemo(() => buildMemberAvatarMap(teamMembers), [teamMembers]);
const avatarSize = size === 'md' ? 32 : size === 'sm' ? 24 : 18; const avatarSize = size === 'md' ? 32 : size === 'sm' ? 24 : 18;