import React from 'react'; import classNames from 'classnames'; import { Avatar, Box, Header, Icon, IconButton, Icons, MenuItem, Scroll, Text, as, config, } from 'folds'; import { Room } from 'matrix-js-sdk'; import { useRoomEventReaders } from '../../hooks/useRoomEventReaders'; import { getMemberDisplayName } from '../../utils/room'; import { getMxIdLocalPart } from '../../utils/matrix'; import * as css from './EventReaders.css'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { UserAvatar } from '../user-avatar'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { useOpenUserRoomProfile } from '../../state/hooks/userRoomProfile'; import { useSpaceOptionally } from '../../hooks/useSpace'; import { getMouseEventCords } from '../../utils/dom'; export type EventReadersProps = { room: Room; eventId: string; requestClose: () => void; }; export const EventReaders = as<'div', EventReadersProps>( ({ className, room, eventId, requestClose, ...props }, ref) => { const mx = useMatrixClient(); const useAuthentication = useMediaAuthentication(); const latestEventReaders = useRoomEventReaders(room, eventId); const openProfile = useOpenUserRoomProfile(); const space = useSpaceOptionally(); const getName = (userId: string) => getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; return (
Seen by
{latestEventReaders.map((readerId) => { const name = getName(readerId); const avatarMxcUrl = room.getMember(readerId)?.getMxcAvatarUrl(); const avatarUrl = avatarMxcUrl ? mx.mxcUrlToHttp( avatarMxcUrl, 100, 100, 'crop', undefined, false, useAuthentication ) : undefined; return ( { openProfile( room.roomId, space?.roomId, readerId, getMouseEventCords(event.nativeEvent), 'Bottom' ); }} before={ } /> } > {name} ); })}
); } );