import React, { useState } from 'react'; import { Room } from 'matrix-js-sdk'; import { Icon, Icons, Modal, Overlay, OverlayBackdrop, OverlayCenter, Text, color, config, } from 'folds'; import FocusTrap from 'focus-trap-react'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useSetting } from '../../state/hooks/settings'; import { settingsAtom } from '../../state/settings'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { getMemberDisplayName } from '../../utils/room'; import { getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; import { UserAvatar } from '../user-avatar'; import { StackedAvatar } from '../stacked-avatar'; import { EventReaders } from '../event-readers'; import { stopPropagation } from '../../utils/keyboard'; import { useModalStyle } from '../../hooks/useModalStyle'; import * as css from './ReadReceiptAvatars.css'; const MAX_DISPLAY = 5; export function ReadReceiptAvatars({ room, eventId, userIds, }: { room: Room; eventId: string; userIds: string[]; }) { const mx = useMatrixClient(); const useAuthentication = useMediaAuthentication(); const [open, setOpen] = useState(false); const [lotusTerminal] = useSetting(settingsAtom, 'lotusTerminal'); const modalStyle = useModalStyle(360); if (userIds.length === 0) return null; const displayed = userIds.slice(0, MAX_DISPLAY); const extra = userIds.length - MAX_DISPLAY; const tooltipNames = userIds .slice(0, 5) .map((id) => getMemberDisplayName(room, id) ?? getMxIdLocalPart(id) ?? id) .join(', ') + (extra > 0 ? ` +${extra} more` : ''); return ( <> }> setOpen(false), clickOutsideDeactivates: true, escapeDeactivates: stopPropagation, }} > setOpen(false)} /> ); }