import * as React from 'react'; import classNames from 'classnames'; import noop from 'lodash/noop'; import { Tooltip as BPTooltip, TooltipProvider as BPTooltipProvider } from '@box/blueprint-web'; // @ts-ignore flow import import PresenceAvatar from './PresenceAvatar'; import PresenceAvatarTooltipContent from './PresenceAvatarTooltipContent'; import Tooltip, { TooltipPosition } from '../../components/tooltip'; import { withBlueprintModernization } from '../../elements/common/withBlueprintModernization'; import './PresenceAvatarList.scss'; export type Collaborator = { avatarUrl?: string; id: string; isActive: boolean; interactedAt: number; interactionType: string; name: string; profileUrl?: string; }; export type Props = { avatarAttributes?: React.HTMLAttributes; className?: string; collaborators: Array; enableModernizedComponents?: boolean; hideAdditionalCount?: boolean; hideTooltips?: boolean; maxAdditionalCollaborators?: number; maxDisplayedAvatars?: number; onAvatarMouseEnter?: (id: string) => void; onAvatarMouseLeave?: () => void; isPreviewModernizationEnabled?: boolean; }; function PresenceAvatarList(props: Props, ref: React.Ref): JSX.Element | null { const { avatarAttributes, className, collaborators, hideAdditionalCount, hideTooltips, maxAdditionalCollaborators = 99, maxDisplayedAvatars = 3, onAvatarMouseEnter = noop, onAvatarMouseLeave = noop, isPreviewModernizationEnabled = false, ...rest } = props; const [activeTooltip, setActiveTooltip] = React.useState(null); const hideTooltip = (): void => { setActiveTooltip(null); if (onAvatarMouseLeave) { onAvatarMouseLeave(); } }; const showTooltip = (id: string): void => { setActiveTooltip(id); if (onAvatarMouseEnter) { onAvatarMouseEnter(id); } }; if (!collaborators.length) { return null; } const renderAvatar = (collaborator: Collaborator) => { const { id, avatarUrl, name, isActive, interactedAt, interactionType } = collaborator; const avatarElement = (