diff --git a/src/script/components/Avatar/Avatar.tsx b/src/script/components/Avatar/Avatar.tsx index d3567ae1ae0..ca428e0f4e3 100644 --- a/src/script/components/Avatar/Avatar.tsx +++ b/src/script/components/Avatar/Avatar.tsx @@ -122,7 +122,7 @@ const Avatar: FC = ({ } if (!participant.isAvailable()) { - return onAvatarClick?.(participant)} />; + return onAvatarClick?.(participant)} />; } const isMe = participant?.isMe; diff --git a/src/script/components/Avatar/PlaceholderAvatar/PlaceholderAvatar.tsx b/src/script/components/Avatar/PlaceholderAvatar/PlaceholderAvatar.tsx index 8613e7e950c..4996c389d52 100644 --- a/src/script/components/Avatar/PlaceholderAvatar/PlaceholderAvatar.tsx +++ b/src/script/components/Avatar/PlaceholderAvatar/PlaceholderAvatar.tsx @@ -17,19 +17,24 @@ * */ +import React from 'react'; + import {AVATAR_SIZE, DIAMETER} from 'Components/Avatar'; import {DefaultAvatarImageSmall, DefaultAvatarImageLarge} from './DefaultAvatarImage'; import {AvatarWrapper} from '../AvatarWrapper'; -type PlaceholderAvatarProps = {size: AVATAR_SIZE; onClick: () => void}; +interface PlaceholderAvatarProps extends React.HTMLProps { + avatarSize: AVATAR_SIZE; + onClick?: () => void; +} -export function PlaceholderAvatar({size, onClick}: PlaceholderAvatarProps) { +export function PlaceholderAvatar({avatarSize: size, onClick, ...props}: PlaceholderAvatarProps) { const diameter = DIAMETER[size]; const ImageComponent = diameter >= DIAMETER[AVATAR_SIZE.LARGE] ? DefaultAvatarImageLarge : DefaultAvatarImageSmall; return ( - + ); diff --git a/src/script/components/MessagesList/Message/ContentMessage/MessageHeader.tsx b/src/script/components/MessagesList/Message/ContentMessage/MessageHeader.tsx index ce8e5fc6fe7..28ea6859999 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/MessageHeader.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/MessageHeader.tsx @@ -106,7 +106,7 @@ export function MessageHeader({

diff --git a/src/script/components/panel/UserDetails.test.tsx b/src/script/components/panel/UserDetails.test.tsx index 1d32d9495a5..73483bc5169 100644 --- a/src/script/components/panel/UserDetails.test.tsx +++ b/src/script/components/panel/UserDetails.test.tsx @@ -19,6 +19,7 @@ import {render} from '@testing-library/react'; +import {t} from 'Util/LocalizerUtil'; import {createRandomUuid} from 'Util/util'; import {UserDetails} from './UserDetails'; @@ -88,6 +89,7 @@ describe('UserDetails', () => { const expirationText = '1h remaining'; const participant = new User(createRandomUuid()); participant.isGuest(true); + participant.name("I'm a guest"); participant.isTemporaryGuest(true); participant.expirationText(expirationText); @@ -103,4 +105,20 @@ describe('UserDetails', () => { expect(getByTestId('status-guest')).not.toBeNull(); expect(getByText(expirationText)).not.toBeNull(); }); + + it('renders the placeholder avatar for a user that could not be loaded', () => { + const participant = new User(createRandomUuid()); + participant.name(''); + + const props = { + isGroupAdmin: false, + isSelfVerified: true, + isVerified: false, + participant, + }; + + const {getByTestId} = render(); + + expect(getByTestId('status-name').textContent).toBe(t('unavailableUser')); + }); }); diff --git a/src/script/components/panel/UserDetails.tsx b/src/script/components/panel/UserDetails.tsx index 05c3f098ca8..edf84e8024b 100644 --- a/src/script/components/panel/UserDetails.tsx +++ b/src/script/components/panel/UserDetails.tsx @@ -44,7 +44,7 @@ export interface UserDetailsProps { avatarStyles?: React.CSSProperties; } -const UserDetailsComponent: React.FC = ({ +export const UserDetailsComponent: React.FC = ({ badge, participant, isSelfVerified, @@ -60,9 +60,11 @@ const UserDetailsComponent: React.FC = ({ 'name', 'availability', 'is_verified', + 'isAvailable', ]); useEffect(() => { + // This will trigger a user refresh amplify.publish(WebAppEvents.USER.UPDATE, participant.qualifiedId); }, [participant]); @@ -80,8 +82,12 @@ const UserDetailsComponent: React.FC = ({ dataUieName="status-name" /> ) : ( -

- {user.name} +

+ {user.isAvailable ? user.name : t('unavailableUser')}

)} @@ -123,14 +129,14 @@ const UserDetailsComponent: React.FC = ({

)} - {isGuest && ( + {isGuest && user.isAvailable && (
{t('conversationGuestIndicator')}
)} - {user.isTemporaryGuest && ( + {user.isTemporaryGuest && user.isAvailable && (
{user.expirationText}
@@ -146,12 +152,10 @@ const UserDetailsComponent: React.FC = ({ ); }; -const UserDetails: React.FC = props => { +export const UserDetails: React.FC = props => { return ( ); }; - -export {UserDetails};