import React, { useMemo } from 'react';
import { View } from 'react-native';
import { STACKED_AVATARS_OVERFLOW_COUNTER } from '../../../constants/test-ids';
import { useStyles } from '../../hooks';
import { BaseAvatarSize } from '../BaseAvatar';
import BaseText, { BaseTextVariant } from '../BaseText';
import TokenAvatar from '../TokenAvatar';
import styleSheet from './StackedAvatars.styles';
import { StackedAvatarsProps } from './StackedAvatars.types';
const MAX_STACKED_AVATARS = 4;
const StackedAvatars = ({ tokenList }: StackedAvatarsProps) => {
const extraSmallSize = BaseAvatarSize.Xs;
const sizeAsNumber = Number(extraSmallSize);
const overflowCounter = tokenList.length - MAX_STACKED_AVATARS;
const avatarSpacing = sizeAsNumber / 2;
const amountOfVisibleAvatars =
overflowCounter > 0 ? MAX_STACKED_AVATARS : tokenList.length;
const stackWidth = avatarSpacing * (amountOfVisibleAvatars + 1);
const shouldRenderOverflowCounter = overflowCounter > 0;
const { styles } = useStyles(styleSheet, { stackWidth });
const renderTokenList = useMemo(
() =>
tokenList
.slice(0, MAX_STACKED_AVATARS)
.map(({ name, imageUrl, id }, index) => {
const leftOffset = avatarSpacing * index;
return (
);
}),
[tokenList, avatarSpacing, extraSmallSize, styles.stackedAvatarWrapper],
);
return (
{renderTokenList}
{shouldRenderOverflowCounter && (
{`+${overflowCounter}`}
)}
);
};
export default StackedAvatars;