Skip to content

Commit 5384a8a

Browse files
feat: added invitation badge to room members list
1 parent 0d14b19 commit 5384a8a

File tree

6 files changed

+45
-8
lines changed

6 files changed

+45
-8
lines changed

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { IRoom, IUser, IRole } from '@rocket.chat/core-typings';
1+
import type { IRoom } from '@rocket.chat/core-typings';
22
import type { SelectOption } from '@rocket.chat/fuselage';
33
import { Box, Icon, TextInput, Select, Throbber, ButtonGroup, Button, Callout } from '@rocket.chat/fuselage';
44
import { useAutoFocus, useDebouncedCallback } from '@rocket.chat/fuselage-hooks';
@@ -21,10 +21,9 @@ import { GroupedVirtuoso } from 'react-virtuoso';
2121

2222
import { MembersListDivider } from './MembersListDivider';
2323
import RoomMembersRow from './RoomMembersRow';
24+
import type { RoomMemberUser } from './types';
2425
import InfiniteListAnchor from '../../../../components/InfiniteListAnchor';
2526

26-
export type RoomMemberUser = Pick<IUser, 'username' | '_id' | 'name' | 'status' | 'freeSwitchExtension'> & { roles?: IRole['_id'][] };
27-
2827
type RoomMembersProps = {
2928
rid: IRoom['_id'];
3029
isTeam?: boolean;

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersItem.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { IRoom, IUser } from '@rocket.chat/core-typings';
1+
import type { IRoom } from '@rocket.chat/core-typings';
22
import {
33
Option,
44
OptionAvatar,
@@ -16,22 +16,25 @@ import type { ReactElement, MouseEvent } from 'react';
1616
import { useState } from 'react';
1717

1818
import UserActions from './RoomMembersActions';
19+
import InvitationBadge from './badges/InvitationBadge';
20+
import type { RoomMemberUser } from './types';
1921
import { getUserDisplayNames } from '../../../../../lib/getUserDisplayNames';
2022
import { ReactiveUserStatus } from '../../../../components/UserStatus';
2123
import { usePreventPropagation } from '../../../../hooks/usePreventPropagation';
2224

23-
type RoomMembersItemProps = {
25+
type RoomMembersItemProps = RoomMemberUser & {
2426
onClickView: (e: MouseEvent<HTMLElement>) => void;
2527
rid: IRoom['_id'];
2628
reload: () => void;
2729
useRealName: boolean;
28-
} & Pick<IUser, 'federated' | 'username' | 'name' | '_id' | 'freeSwitchExtension'>;
30+
};
2931

3032
const RoomMembersItem = ({
3133
_id,
3234
name,
3335
username,
3436
federated,
37+
status,
3538
freeSwitchExtension,
3639
onClickView,
3740
rid,
@@ -57,6 +60,11 @@ const RoomMembersItem = ({
5760
<OptionContent data-qa={`MemberItem-${username}`}>
5861
{nameOrUsername} {displayUsername && <OptionDescription>({displayUsername})</OptionDescription>}
5962
</OptionContent>
63+
{status === 'INVITED' && (
64+
<OptionColumn>
65+
<InvitationBadge />
66+
</OptionColumn>
67+
)}
6068
<OptionMenu onClick={preventPropagation}>
6169
{showButton ? (
6270
<UserActions username={username} name={name} rid={rid} _id={_id} freeSwitchExtension={freeSwitchExtension} reload={reload} />

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersRow.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import type { IUser, IRoom } from '@rocket.chat/core-typings';
1+
import type { IRoom } from '@rocket.chat/core-typings';
22
import type { MouseEvent, ReactElement } from 'react';
33
import { memo } from 'react';
44

55
import RoomMembersItem from './RoomMembersItem';
6+
import type { RoomMemberUser } from './types';
67

78
type RoomMembersRowProps = {
8-
user: Pick<IUser, 'federated' | 'username' | 'name' | '_id' | 'freeSwitchExtension'>;
9+
user: RoomMemberUser;
910
data: {
1011
onClickView: (e: MouseEvent<HTMLElement>) => void;
1112
rid: IRoom['_id'];
@@ -25,6 +26,7 @@ const RoomMembersRow = ({ user, data: { onClickView, rid }, index, reload, useRe
2526
key={index}
2627
useRealName={useRealName}
2728
username={user.username}
29+
status={user.status}
2830
_id={user._id}
2931
rid={rid}
3032
name={user.name}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Icon } from '@rocket.chat/fuselage';
2+
import { useTranslation } from 'react-i18next';
3+
4+
const InvitationBadge = () => {
5+
const { t } = useTranslation();
6+
7+
return (
8+
<Icon
9+
role='status'
10+
name='mail'
11+
mbs={2}
12+
size='x20'
13+
color='info'
14+
title={t('Message_request')}
15+
aria-hidden='false'
16+
aria-label={t('Message_request')}
17+
/>
18+
);
19+
};
20+
21+
export default InvitationBadge;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import type { IUser, IRole, SubscriptionStatus, UserStatus } from '@rocket.chat/core-typings';
2+
3+
export type RoomMemberUser = Pick<IUser, 'username' | '_id' | 'name' | 'freeSwitchExtension' | 'federated'> & {
4+
roles?: IRole['_id'][];
5+
status?: UserStatus | SubscriptionStatus;
6+
};

packages/i18n/src/locales/en.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3448,6 +3448,7 @@
34483448
"Message_list": "Message list",
34493449
"Message_pinning": "Message pinning",
34503450
"Message_removed": "message removed",
3451+
"Message_request": "Message request",
34513452
"Message_sent": "Message sent",
34523453
"Message_sent_by_email": "Message sent by Email",
34533454
"Message_starring": "Message starring",

0 commit comments

Comments
 (0)