import React, { FC, HTMLAttributes } from 'react'; import { getClassName } from '../../helpers/getClassName'; import { classNames } from '../../lib/classNames'; import { createMasks } from './masks'; import { useBrowserInfo } from '../../hooks/useBrowserInfo'; import { usePlatform } from '../../hooks/usePlatform'; import { System } from '../../lib/browser'; import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect'; import Caption from '../Typography/Caption/Caption'; export interface UsersStackProps extends HTMLAttributes { /** * Массив ссылок на фотографии */ photos?: string[]; /** * Размер аватарок */ size?: 'xs' | 's' | 'm'; /** * Вертикальный режим рекомендуется использовать с размером `m` */ layout?: 'vertical' | 'horizontal'; /** * Количество аватарок, которые будут показаны. * Если в массиве `photos` больше элементов и используется размер `m`, то будет показано количество остальных элементов */ visibleCount?: number; } const UsersStack: FC = (props) => { const { system, systemVersion } = useBrowserInfo(); const platform = usePlatform(); const { className, photos, visibleCount, size, layout, children, ...restProps } = props; useIsomorphicLayoutEffect(() => { createMasks(); }, []); const othersCount = Math.max(0, photos.length - visibleCount); const canShowOthers = othersCount > 0 && size === 'm'; const photosShown = photos.slice(0, visibleCount); let canUseClipPath = true; if (system === System.IOS) { canUseClipPath = systemVersion && systemVersion.major >= 12; } return (
{photosShown.map((photo, i) => (
))} {canShowOthers && +{othersCount} }
{children && {children} }
); }; UsersStack.defaultProps = { photos: [], size: 's', visibleCount: 3, layout: 'horizontal', }; export default React.memo(UsersStack);