Skip to content

Commit fbca3a7

Browse files
committed
added dropdown
1 parent dbc08bc commit fbca3a7

File tree

4 files changed

+85
-52
lines changed

4 files changed

+85
-52
lines changed

packages/react/src/views/RoomMembers/RoomMember.js

Lines changed: 64 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@ import {
44
Box,
55
Button,
66
Icon,
7-
Sidebar,
8-
Input,
97
Popup,
8+
Sidebar,
109
useComponentOverrides,
1110
useTheme,
1211
} from '@embeddedchat/ui-elements';
12+
1313
import RoomMemberItem from './RoomMemberItem';
1414
import RCContext, { useRCContext } from '../../context/RCInstance';
1515
import useInviteStore from '../../store/inviteStore';
1616
import InviteMembers from './InviteMembers';
1717
import { getRoomMemberStyles } from './RoomMembers.styles';
1818
import LoadingIndicator from '../MessageAggregators/common/LoadingIndicator';
1919
import useSetExclusiveState from '../../hooks/useSetExclusiveState';
20+
import NoMessagesIndicator from '../MessageAggregators/common/NoMessageIndicator';
2021

2122
const RoomMembers = ({ members }) => {
2223
const { RCInstance } = useContext(RCContext);
@@ -30,17 +31,29 @@ const RoomMembers = ({ members }) => {
3031
const [isLoading, setIsLoading] = useState(true);
3132
const { variantOverrides } = useComponentOverrides('RoomMember');
3233
const viewType = variantOverrides.viewType || 'Sidebar';
33-
3434
const [userInfo, setUserInfo] = useState(null);
3535
const setExclusiveState = useSetExclusiveState();
36-
3736
const [searchTerm, setSearchTerm] = useState('');
37+
const [statusFilter, setStatusFilter] = useState('All');
3838
const [filteredMembers, setFilteredMembers] = useState(members);
3939

40+
const filterOptions = [
41+
{ value: 'All', label: 'All' },
42+
{ value: 'Online', label: 'Online' },
43+
{ value: 'Offline', label: 'Offline' },
44+
];
45+
const iconName = 'Members';
46+
const noMessageInfo = 'No Members Found';
47+
48+
const handleInputChange = (e) => {
49+
setSearchTerm(e.target.value);
50+
};
51+
4052
useEffect(() => {
4153
const getUserInfo = async () => {
4254
try {
4355
const res = await RCInstance.me();
56+
console.log('User info:', res);
4457
setUserInfo(res);
4558
setIsLoading(false);
4659
} catch (error) {
@@ -55,22 +68,48 @@ const RoomMembers = ({ members }) => {
5568
setFilteredMembers(
5669
members.filter(
5770
(member) =>
58-
member.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
59-
member.username?.toLowerCase().includes(searchTerm.toLowerCase())
71+
(member.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
72+
member.username
73+
?.toLowerCase()
74+
.includes(searchTerm.toLowerCase())) &&
75+
(statusFilter === 'All' ||
76+
(statusFilter === 'Online' && member.status === 'online') ||
77+
(statusFilter === 'Offline' && member.status === 'offline'))
6078
)
6179
);
62-
}, [searchTerm, members]);
80+
}, [searchTerm, statusFilter, members]);
81+
console.log('filtered', filteredMembers);
6382

83+
const handleFilterSelect = (val) => {
84+
setStatusFilter(val);
85+
};
6486
const roles = userInfo && userInfo.roles ? userInfo.roles : [];
6587
const isAdmin = roles.includes('admin');
88+
6689
const ViewComponent = viewType === 'Popup' ? Popup : Sidebar;
6790

6891
return (
6992
<ViewComponent
7093
title="Members"
71-
iconName="members"
94+
iconName={iconName}
7295
onClose={() => setExclusiveState(null)}
73-
style={{ width: '400px', zIndex: window.innerWidth <= 780 ? 1 : null }}
96+
style={{
97+
width: '400px',
98+
padding: 0,
99+
zIndex: window.innerWidth <= 780 ? 1 : null,
100+
}}
101+
filterProps={{
102+
isFile: false,
103+
options: filterOptions,
104+
value: statusFilter,
105+
handleFilterSelect,
106+
}}
107+
noMessageInfo="No Files Found"
108+
searchProps={{
109+
isSearch: true,
110+
handleInputChange,
111+
placeholder: 'Search members',
112+
}}
74113
{...(viewType === 'Popup'
75114
? {
76115
isPopupHeader: true,
@@ -95,28 +134,26 @@ const RoomMembers = ({ members }) => {
95134
<Icon size="1em" name="link" /> Invite Link
96135
</Button>
97136
)}
98-
<Box css={styles.searchContainer}>
99-
<Input
100-
css={styles.textInput}
101-
value={searchTerm}
102-
onChange={(e) => setSearchTerm(e.target.value)}
103-
placeholder="Search members"
104-
/>
105-
<Icon name="magnifier" size="1.5rem" css={styles.searchIcon} />
106-
</Box>
107-
<Box css={styles.memberList}>
137+
<Box
138+
css={
139+
filteredMembers.length > 0
140+
? styles.memberList
141+
: styles.noMembers
142+
}
143+
>
108144
{filteredMembers.length > 0 ? (
109145
filteredMembers.map((member) => (
110-
<>
111-
<RoomMemberItem
112-
user={member}
113-
host={host}
114-
key={member._id}
115-
/>
116-
</>
146+
<RoomMemberItem
147+
user={member}
148+
host={host}
149+
key={member._id}
150+
/>
117151
))
118152
) : (
119-
<Box css={styles.noMembers}>No members found</Box>
153+
<NoMessagesIndicator
154+
iconName={iconName}
155+
message={noMessageInfo}
156+
/>
120157
)}
121158
</Box>
122159
</>

packages/react/src/views/RoomMembers/RoomMembers.styles.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,13 @@ export const getRoomMemberStyles = (theme) => {
4141
margin-top: 1rem;
4242
`,
4343
noMembers: css`
44-
text-align: center;
44+
display: flex;
45+
flex-direction: column;
46+
align-items: center;
47+
justify-content: center;
4548
color: ${theme.colors.textSecondary};
46-
margin-top: 1rem;
49+
height: 100%;
50+
text-align: center;
4751
`,
4852
};
4953

packages/ui-elements/src/components/Sidebar/SidebarContent.js

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const SidebarContent = ({
4343
style={{
4444
position: 'relative',
4545
marginBottom: '0.5rem',
46-
width: isFile ? '60%' : '100%',
46+
width: '60%',
4747
}}
4848
ref={searchContainerRef}
4949
>
@@ -57,20 +57,19 @@ const SidebarContent = ({
5757
<Icon name="magnifier" size="1.25rem" css={styles.noInfoIcon} />
5858
</Box>
5959
)}
60-
{isFile && (
61-
<Box>
62-
<StaticSelect
63-
style={{
64-
position: 'relative',
65-
marginBottom: '0.5rem',
66-
}}
67-
isFile={isFile}
68-
options={options}
69-
value={value}
70-
onSelect={handleFilterSelect}
71-
/>
72-
</Box>
73-
)}
60+
61+
<Box>
62+
<StaticSelect
63+
style={{
64+
position: 'relative',
65+
marginBottom: '0.5rem',
66+
}}
67+
isFile={isFile}
68+
options={options}
69+
value={value}
70+
onSelect={handleFilterSelect}
71+
/>
72+
</Box>
7473
</Box>
7574
{children}
7675
</Box>

packages/ui-elements/src/components/StaticSelect/StaticSelect.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,7 @@ const StaticSelect = ({
9393
<Icon name="chevron-down" />
9494
</Box>
9595

96-
{isOpen && !isFile && (
97-
<ListBox
98-
options={options}
99-
onSelect={handleSelect}
100-
value={internalValue}
101-
/>
102-
)}
103-
{isOpen && isFile && (
96+
{isOpen && (
10497
<Box css={styles.fileTypeSelect}>
10598
<ListBox
10699
options={options}

0 commit comments

Comments
 (0)