import type { IUser, IRoom } from '@rocket.chat/core-typings'; import { Callout } from '@rocket.chat/fuselage'; import { ContextualbarHeader, ContextualbarBack, ContextualbarIcon, ContextualbarTitle, ContextualbarClose, ContextualbarContent, ContextualbarDialog, } from '@rocket.chat/ui-client'; import { useEndpoint, useRolesDescription } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import UserInfoActions from './UserInfoActions'; import { getUserEmailAddress } from '../../../../../lib/getUserEmailAddress'; import { FormSkeleton } from '../../../../components/Skeleton'; import { UserCardRole } from '../../../../components/UserCard'; import { UserInfo } from '../../../../components/UserInfo'; import { ReactiveUserStatus } from '../../../../components/UserStatus'; import { ReactiveUserStatusText } from '../../../../components/UserStatusText'; import { usersQueryKeys } from '../../../../lib/queryKeys'; import { getUserEmailVerified } from '../../../../lib/utils/getUserEmailVerified'; export type UserInfoWithDataProps = { uid?: IUser['_id']; username?: IUser['username']; rid: IRoom['_id']; invitationDate?: string; onClose: () => void; onClickBack?: () => void; }; const UserInfoWithData = ({ uid, username, rid, invitationDate, onClose, onClickBack }: UserInfoWithDataProps) => { const { t } = useTranslation(); const getRoles = useRolesDescription(); const getUserInfo = useEndpoint('GET', '/v1/users.info'); const { isPending, isError, data } = useQuery({ queryKey: usersQueryKeys.userInfo({ uid, username }), queryFn: () => { if (uid) return getUserInfo({ userId: uid }); if (username) return getUserInfo({ username }); throw new Error('userId or username is required'); }, }); const user = useMemo(() => { if (!data?.user) { return; } const { _id, name, username, roles = [], bio, utcOffset, lastLogin, customFields, phone, nickname, createdAt, canViewAllInfo, freeSwitchExtension, } = data.user; return { _id, name, username, lastLogin, /** * TODO: We shouldn't use UserCard components outside UserCard */ roles: roles && getRoles(roles).map((role, index) => {role}), bio, canViewAllInfo, phone, customFields, verified: getUserEmailVerified(data.user), email: getUserEmailAddress(data.user), utcOffset, createdAt, status: , customStatus: , nickname, freeSwitchExtension, }; }, [data, getRoles]); return ( {onClickBack && } {!onClickBack && } {t('User_Info')} {onClose && } {isPending && ( )} {isError && !user && ( {t('User_not_found')} )} {!isPending && user && ( } /> )} ); }; export default UserInfoWithData;