import React, { useState } from 'react'; import { Box, Icon, Icons, Modal, Overlay, OverlayBackdrop, OverlayCenter, Text, as, config, } from 'folds'; import { Room } from 'matrix-js-sdk'; import classNames from 'classnames'; import FocusTrap from 'focus-trap-react'; import { useTranslation } from 'react-i18next'; import { getMemberDisplayName } from '../../utils/room'; import { getMxIdLocalPart } from '../../utils/matrix'; import * as css from './RoomViewFollowing.css'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useRoomLatestRenderedEvent } from '../../hooks/useRoomLatestRenderedEvent'; import { useRoomEventReaders } from '../../hooks/useRoomEventReaders'; import { EventReaders } from '../../components/event-readers'; import { stopPropagation } from '../../utils/keyboard'; export function RoomViewFollowingPlaceholder() { return
; } export type RoomViewFollowingProps = { room: Room; }; export const RoomViewFollowing = as<'div', RoomViewFollowingProps>( ({ className, room, ...props }, ref) => { const { t } = useTranslation(); const mx = useMatrixClient(); const [open, setOpen] = useState(false); const latestEvent = useRoomLatestRenderedEvent(room); const latestEventReaders = useRoomEventReaders(room, latestEvent?.getId()); const names = latestEventReaders .filter((readerId) => readerId !== mx.getUserId()) .map( (readerId) => getMemberDisplayName(room, readerId) ?? getMxIdLocalPart(readerId) ?? readerId ); const eventId = latestEvent?.getId(); return ( <> {eventId && ( }> setOpen(false), clickOutsideDeactivates: true, escapeDeactivates: stopPropagation, }} > setOpen(false)} /> )} 0 ? 'button' : 'div'} onClick={names.length > 0 ? () => setOpen(true) : undefined} className={classNames(css.RoomViewFollowing({ clickable: names.length > 0 }), className)} alignItems="Center" justifyContent="End" gap="200" {...props} ref={ref} > {names.length > 0 && ( <> {names.length === 1 && ( <> {names[0]} {t('Room.is_following')} )} {names.length === 2 && ( <> {names[0]} {t('Room.and')} {names[1]} {t('Room.are_following')} )} {names.length === 3 && ( <> {names[0]} {', '} {names[1]} {t('Room.and')} {names[2]} {t('Room.are_following')} )} {names.length > 3 && ( <> {names[0]} {', '} {names[1]} {', '} {names[2]} {t('Room.and')} {t('Room.others_following_count', { count: names.length - 3 })} {t('Room.are_following')} )} )} ); } );