import { css } from '@rocket.chat/css-in-js'; import { Box, IconButton, Skeleton } from '@rocket.chat/fuselage'; import { useTranslation } from '@rocket.chat/ui-contexts'; import type { ReactNode, ComponentProps, MouseEvent } from 'react'; import React, { forwardRef } from 'react'; import { useEmbeddedLayout } from '../../hooks/useEmbeddedLayout'; import MarkdownText from '../MarkdownText'; import * as Status from '../UserStatus'; import UserAvatar from '../avatar/UserAvatar'; import UserCardContainer from './UserCardContainer'; import UserCardInfo from './UserCardInfo'; import UserCardRoles from './UserCardRoles'; import UserCardUsername from './UserCardUsername'; const clampStyle = css` display: -webkit-box; overflow: hidden; -webkit-line-clamp: 3; -webkit-box-orient: vertical; word-break: break-all; `; type UserCardProps = { className?: string; style?: ComponentProps['style']; open?: (e: MouseEvent) => void; name?: string; username?: string; etag?: string; customStatus?: ReactNode; roles?: ReactNode; bio?: ReactNode; status?: ReactNode; actions?: ReactNode; localTime?: ReactNode; onClose?: () => void; nickname?: string; isLoading?: boolean; }; const UserCard = forwardRef(function UserCard( { className, style, open, name, username, etag, customStatus = , roles = ( <> ), bio = , status = , actions, localTime = , onClose, nickname, isLoading, }: UserCardProps, ref, ) { const t = useTranslation(); const isLayoutEmbedded = useEmbeddedLayout(); return ( {!isLoading && username ? ( ) : ( )} {isLoading ? ( <> ) : ( actions )} {isLoading ? : } {nickname && ( ({nickname}) )} {customStatus && ( {typeof customStatus === 'string' ? ( ) : ( customStatus )} )} {roles} {localTime} {bio && ( {typeof bio === 'string' ? : bio} )} {!isLoading && open && !isLayoutEmbedded && {t('See_full_profile')}} {onClose && ( )} ); }); export default UserCard;