import React, { memo, forwardRef } from 'react';
import Flex from '../../primitives/Flex';
import { usePropsResolution } from '../../../hooks/useThemeProps';
import isNil from 'lodash.isnil';
import type { IAvatarGroupProps } from './types';
import { default as Avatar } from './Avatar';
// Todo: Try using HStack instead
const getAvatarGroupChildren = (
children?: JSX.Element[] | JSX.Element,
space?: number,
max?: number,
plusAvatarBg?: string,
props?: any
) => {
let childrenArray: any = React.Children.toArray(children);
let plusAvatars: number = 0;
if (!isNil(max) && max < childrenArray.length && max > 0) {
plusAvatars = childrenArray.length - max;
childrenArray = childrenArray.slice(0, max);
}
let trailingChildren = childrenArray.slice(1);
const defaultProps = {
ml: space,
};
return [
plusAvatars > 0 ? (
{'+ ' + plusAvatars}
) : null,
React.Children.map(
trailingChildren.reverse(),
(child: any, index: number) => {
return React.cloneElement(
child,
{
key: `avatar-group-child-${index}`,
...props,
...defaultProps,
...child.props,
},
child.props.children
);
}
),
React.cloneElement(
childrenArray[0],
{
...props,
...childrenArray[0].props,
},
childrenArray[0].props.children
),
];
};
const AvatarGroup = (allProps: IAvatarGroupProps, ref: any) => {
const { children, max, ...props } = allProps;
const { borderColor, borderWidth, bg, space } = usePropsResolution(
'AvatarGroup',
props
);
return (
{getAvatarGroupChildren(children, space, max, bg, {
borderColor,
borderWidth,
...props,
})}
);
};
export default memo(forwardRef(AvatarGroup));