forked from RocketChat/EmbeddedChat
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoomMember.js
More file actions
98 lines (90 loc) · 2.87 KB
/
RoomMember.js
File metadata and controls
98 lines (90 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import {
Box,
Button,
Icon,
Sidebar,
Popup,
useComponentOverrides,
useTheme,
} from '@embeddedchat/ui-elements';
import RoomMemberItem from './RoomMemberItem';
import RCContext, { useRCContext } from '../../context/RCInstance';
import useInviteStore from '../../store/inviteStore';
import InviteMembers from './InviteMembers';
import { getRoomMemberStyles } from './RoomMembers.styles';
import LoadingIndicator from '../MessageAggregators/common/LoadingIndicator';
import useSetExclusiveState from '../../hooks/useSetExclusiveState';
const RoomMembers = ({ members }) => {
const { RCInstance } = useContext(RCContext);
const { ECOptions } = useRCContext();
const { host } = ECOptions;
const { theme } = useTheme();
const styles = getRoomMemberStyles(theme);
const toggleInviteView = useInviteStore((state) => state.toggleInviteView);
const showInvite = useInviteStore((state) => state.showInvite);
const [isLoading, setIsLoading] = useState(true);
const { variantOverrides } = useComponentOverrides('RoomMember');
const viewType = variantOverrides.viewType || 'Sidebar';
const [userInfo, setUserInfo] = useState(null);
const setExclusiveState = useSetExclusiveState();
useEffect(() => {
const getUserInfo = async () => {
try {
const res = await RCInstance.me();
setUserInfo(res);
setIsLoading(false);
} catch (error) {
console.error('Error fetching user info:', error);
}
};
getUserInfo();
}, [RCInstance]);
const roles = userInfo && userInfo.roles ? userInfo.roles : [];
const isAdmin = roles.includes('admin');
const ViewComponent = viewType === 'Popup' ? Popup : Sidebar;
return (
<ViewComponent
title="Members"
iconName="members"
onClose={() => setExclusiveState(null)}
style={{ zIndex: window.innerWidth <= 780 ? 1 : null }}
{...(viewType === 'Popup'
? {
isPopupHeader: true,
}
: {})}
>
{isLoading ? (
<LoadingIndicator />
) : (
<Box css={styles.container}>
{showInvite ? (
<InviteMembers />
) : (
<>
{members.map((member) => (
<RoomMemberItem user={member} host={host} key={member._id} />
))}
{isAdmin && (
<Button
style={{ marginTop: '10px', width: '100%' }}
onClick={async () => {
toggleInviteView();
}}
>
<Icon size="1em" name="link" /> Invite Link
</Button>
)}
</>
)}
</Box>
)}
</ViewComponent>
);
};
export default RoomMembers;
RoomMembers.propTypes = {
members: PropTypes.arrayOf(PropTypes.shape),
};