import { useFocusRing } from '@react-aria/focus'; import type { IRoom } from '@rocket.chat/core-typings'; import { Option, OptionAvatar, OptionColumn, OptionDescription, OptionMenu, OptionContent, Icon, IconButton, OptionSkeleton, } from '@rocket.chat/fuselage'; import { usePrefersReducedMotion } from '@rocket.chat/fuselage-hooks'; import { UserAvatar } from '@rocket.chat/ui-avatar'; import type { KeyboardEvent, MouseEvent } from 'react'; import { useState } from 'react'; import UserActions from './RoomMembersActions'; import { getUserDisplayNames } from '../../../../../lib/getUserDisplayNames'; import InvitationBadge from '../../../../components/InvitationBadge'; import { ReactiveUserStatus } from '../../../../components/UserStatus'; import { usePreventPropagation } from '../../../../hooks/usePreventPropagation'; import { useUserStatusTooltip } from '../../../../hooks/useUserStatusTooltip'; import type { RoomMember } from '../../../hooks/useMembersList'; export type RoomMembersItemProps = Pick & { rid: IRoom['_id']; useRealName: boolean; reload: () => void; onClickView: (e: MouseEvent) => void; }; const RoomMembersItem = ({ _id, name, username, federated, freeSwitchExtension, onClickView, rid, subscription, reload, useRealName, }: RoomMembersItemProps) => { const [showButton, setShowButton] = useState(false); const isReduceMotionEnabled = usePrefersReducedMotion(); const { focusProps, isFocusVisible } = useFocusRing(); const isInvited = subscription?.status === 'INVITED'; const invitationDate = isInvited ? subscription?.ts : undefined; const preventPropagation = usePreventPropagation(); const [nameOrUsername, displayUsername] = getUserDisplayNames(name, username, useRealName); const statusTooltipHandlers = useUserStatusTooltip(_id); const handleMenuEvent = isReduceMotionEnabled ? { ...statusTooltipHandlers, onMouseEnter: (e: MouseEvent) => { setShowButton(true); statusTooltipHandlers.onMouseEnter(e); }, } : { ...statusTooltipHandlers, onTransitionEnd: () => setShowButton(true), }; return ( ); }; export default Object.assign(RoomMembersItem, { Skeleton: OptionSkeleton, });