import React, { useState } from 'react'; import { Avatar, Box, Icon, Icons, Modal, Overlay, OverlayBackdrop, OverlayCenter, Text, } from 'folds'; import classNames from 'classnames'; import FocusTrap from 'focus-trap-react'; import * as css from './styles.css'; import { UserAvatar } from '../user-avatar'; import colorMXID from '../../../util/colorMXID'; import { getMxIdLocalPart } from '../../utils/matrix'; import { BreakWord, LineClamp2, LineClamp3 } from '../../styles/Text.css'; import { UserPresence } from '../../hooks/useUserPresence'; import { AvatarPresence, PresenceBadge } from '../presence'; import { ImageViewer } from '../image-viewer'; import { stopPropagation } from '../../utils/keyboard'; import { useSetting } from '../../state/hooks/settings'; import { settingsAtom } from '../../state/settings'; import { useLocalTime } from '../../hooks/useLocalTime'; type UserHeroProps = { userId: string; avatarUrl?: string; presence?: UserPresence; }; export function UserHero({ userId, avatarUrl, presence }: UserHeroProps) { const [viewAvatar, setViewAvatar] = useState(); return (
{avatarUrl && ( {userId} )}
} > setViewAvatar(avatarUrl) : undefined} className={css.UserHeroAvatar} size="500" > } /> {viewAvatar && ( }> setViewAvatar(undefined), clickOutsideDeactivates: true, escapeDeactivates: stopPropagation, }} > evt.stopPropagation()}> setViewAvatar(undefined)} /> )}
); } type UserHeroNameProps = { displayName?: string; userId: string; status?: string; pronouns?: string; timezone?: string; }; export function UserHeroName({ displayName, userId, status, pronouns, timezone, }: UserHeroNameProps) { const username = getMxIdLocalPart(userId); const [hour24Clock] = useSetting(settingsAtom, 'hour24Clock'); const localTimeInfo = useLocalTime(timezone, !hour24Clock); return ( {displayName ?? username ?? userId} {pronouns && ( {pronouns} )} @{username} {localTimeInfo && ( {localTimeInfo.time} {localTimeInfo.abbr && {` ${localTimeInfo.abbr}`}} )} {status && ( {status} )} ); }