perf(renderer): skip avatar lookups for hidden member badges
This commit is contained in:
parent
c02565b07d
commit
b8f394d9f7
1 changed files with 10 additions and 3 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue