Skip to content
Snippets Groups Projects
Unverified Commit 629aaf72 authored by gabriellsh's avatar gabriellsh Committed by GitHub
Browse files

[FIX] User Info: Email and name/username display (#18976)

parent 4b57c0df
No related branches found
No related tags found
No related merge requests found
import React, { useMemo, useState } from 'react'; import React, { useMemo } from 'react';
import { Box } from '@rocket.chat/fuselage'; import { Box } from '@rocket.chat/fuselage';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import { UserInfo } from '../../components/basic/UserInfo'; import { UserInfo } from '../../components/basic/UserInfo';
import { useEndpointDataExperimental, ENDPOINT_STATES } from '../../hooks/useEndpointDataExperimental'; import { useEndpointDataExperimental, ENDPOINT_STATES } from '../../hooks/useEndpointDataExperimental';
...@@ -12,14 +13,12 @@ import { FormSkeleton } from './Skeleton'; ...@@ -12,14 +13,12 @@ import { FormSkeleton } from './Skeleton';
export function UserInfoWithData({ uid, username, ...props }) { export function UserInfoWithData({ uid, username, ...props }) {
const t = useTranslation(); const t = useTranslation();
const [cache, setCache] = useState();
const showRealNames = useSetting('UI_Use_Real_Name'); const showRealNames = useSetting('UI_Use_Real_Name');
const approveManuallyUsers = useSetting('Accounts_ManuallyApproveNewUsers'); const approveManuallyUsers = useSetting('Accounts_ManuallyApproveNewUsers');
const onChange = () => setCache(new Date()); const { data, state, error, reload } = useEndpointDataExperimental('users.info', useMemo(() => ({ ...uid && { userId: uid }, ...username && { username } }), [uid, username]));
// TODO: remove cache. Is necessary for data invalidation const onChange = useMutableCallback(() => reload());
const { data, state, error } = useEndpointDataExperimental('users.info', useMemo(() => ({ ...uid && { userId: uid }, ...username && { username } }), [uid, username, cache]));
const user = useMemo(() => { const user = useMemo(() => {
const { user } = data || { user: {} }; const { user } = data || { user: {} };
...@@ -35,9 +34,10 @@ export function UserInfoWithData({ uid, username, ...props }) { ...@@ -35,9 +34,10 @@ export function UserInfoWithData({ uid, username, ...props }) {
nickname, nickname,
} = user; } = user;
return { return {
name: showRealNames ? name : username, name,
username, username,
lastLogin, lastLogin,
showRealNames,
roles: roles.map((role, index) => ( roles: roles.map((role, index) => (
<UserCard.Role key={index}>{role}</UserCard.Role> <UserCard.Role key={index}>{role}</UserCard.Role>
)), )),
...@@ -45,13 +45,13 @@ export function UserInfoWithData({ uid, username, ...props }) { ...@@ -45,13 +45,13 @@ export function UserInfoWithData({ uid, username, ...props }) {
phone: user.phone, phone: user.phone,
utcOffset, utcOffset,
customFields: { ...user.customFields, ...approveManuallyUsers && user.active === false && user.reason && { Reason: user.reason } }, customFields: { ...user.customFields, ...approveManuallyUsers && user.active === false && user.reason && { Reason: user.reason } },
email: user.emails?.find(({ address }) => !!address)?.address, email: user.emails?.find(({ address }) => !!address),
createdAt: user.createdAt, createdAt: user.createdAt,
status: UserStatus.getStatus(status), status: UserStatus.getStatus(status),
customStatus: statusText, customStatus: statusText,
nickname, nickname,
}; };
}, [data, showRealNames]); }, [approveManuallyUsers, data, showRealNames]);
if (state === ENDPOINT_STATES.LOADING) { if (state === ENDPOINT_STATES.LOADING) {
return <FormSkeleton/>; return <FormSkeleton/>;
......
...@@ -117,9 +117,9 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange }) ...@@ -117,9 +117,9 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange })
}, [deleteUser, erasureType, setModal, t]); }, [deleteUser, erasureType, setModal, t]);
const setAdminStatus = useMethod('setAdminStatus'); const setAdminStatus = useMethod('setAdminStatus');
const changeAdminStatus = useCallback(() => { const changeAdminStatus = useCallback(async () => {
try { try {
setAdminStatus(_id, !isAdmin); await setAdminStatus(_id, !isAdmin);
const message = isAdmin ? 'User_is_no_longer_an_admin' : 'User_is_now_an_admin'; const message = isAdmin ? 'User_is_no_longer_an_admin' : 'User_is_now_an_admin';
dispatchToastMessage({ type: 'success', message: t(message) }); dispatchToastMessage({ type: 'success', message: t(message) });
onChange(); onChange();
...@@ -187,7 +187,7 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange }) ...@@ -187,7 +187,7 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange })
label: t('Edit'), label: t('Edit'),
action: editUserClick, action: editUserClick,
} }, } },
...canAssignAdminRole && { makeAdmin: { ...canAssignAdminRole && username && { makeAdmin: {
icon: 'key', icon: 'key',
label: isAdmin ? t('Remove_Admin') : t('Make_Admin'), label: isAdmin ? t('Remove_Admin') : t('Make_Admin'),
action: changeAdminStatus, action: changeAdminStatus,
...@@ -224,6 +224,7 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange }) ...@@ -224,6 +224,7 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange })
enforcePassword, enforcePassword,
canResetE2EEKey, canResetE2EEKey,
confirmResetE2EEKey, confirmResetE2EEKey,
username,
]); ]);
const { actions: actionsDefinition, menu: menuOptions } = useUserInfoActionsSpread(options); const { actions: actionsDefinition, menu: menuOptions } = useUserInfoActionsSpread(options);
......
...@@ -24,6 +24,7 @@ export const UserInfo = React.memo(function UserInfo({ ...@@ -24,6 +24,7 @@ export const UserInfo = React.memo(function UserInfo({
username, username,
bio, bio,
email, email,
showRealNames,
status, status,
phone, phone,
customStatus, customStatus,
...@@ -45,12 +46,12 @@ export const UserInfo = React.memo(function UserInfo({ ...@@ -45,12 +46,12 @@ export const UserInfo = React.memo(function UserInfo({
return <VerticalBar.ScrollableContent p='x24' {...props}> return <VerticalBar.ScrollableContent p='x24' {...props}>
<Avatar margin='auto' size={'x332'} username={username}/> <Avatar size={'x332'} username={username}/>
{actions} {actions}
<Margins block='x4'> <Margins block='x4'>
<UserCard.Username name={name || username} status={status} /> <UserCard.Username name={(showRealNames && name) || username || name} status={status} />
<Info>{customStatus}</Info> <Info>{customStatus}</Info>
{!!roles && <> {!!roles && <>
...@@ -63,7 +64,7 @@ export const UserInfo = React.memo(function UserInfo({ ...@@ -63,7 +64,7 @@ export const UserInfo = React.memo(function UserInfo({
<Info><UTCClock utcOffset={utcOffset}/></Info> <Info><UTCClock utcOffset={utcOffset}/></Info>
</>} </>}
{username !== name && <> {username && username !== name && <>
<Label>{t('Username')}</Label> <Label>{t('Username')}</Label>
<Info>{username}</Info> <Info>{username}</Info>
</>} </>}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment