import React from 'react'; import { Tooltip, Avatar } from 'antd'; import classNames from 'classnames'; import styles from './index.less'; export declare type SizeType = number | 'small' | 'default' | 'large' | undefined; const avatarSizeToClassName: (size: SizeType) => string = size => classNames(styles.avatarItem, { [styles.avatarItemLarge]: size === 'large', [styles.avatarItemSmall]: size === 'small', [styles.avatarItemMini]: size === 'mini', }); interface AvatarItemProps { tips: React.ReactNode; src: string; size?: SizeType; style?: React.CSSProperties; onClick?: () => void; } interface AvatarListProps { Item?: React.ReactElement; size?: SizeType; maxLength?: number; excessItemsStyle?: React.CSSProperties; style?: React.CSSProperties; children: React.ReactElement | Array>; } export const AvatarList: React.FC = ({ children, size, maxLength, excessItemsStyle, ...other }) => { const numOfChildren = React.Children.count(children); const numToShow = maxLength >= numOfChildren ? numOfChildren : maxLength; const childrenWithProps = React.Children.toArray(children) .slice(0, numToShow) .map((child: React.ReactElement) => React.cloneElement(child, { size, }), ); if (numToShow < numOfChildren) { const cls = avatarSizeToClassName(size); childrenWithProps.push(
  • {`+${numOfChildren - maxLength}`}
  • , ); } return (
      {childrenWithProps}
    ); }; export const AvatarListItem: React.FC = ({ src, size, tips, onClick = () => {}, }) => { const cls = avatarSizeToClassName(size); return (
  • {tips ? ( ) : ( )}
  • ); };