@@ -32,6 +32,10 @@ import { useSelectedIsGroupV2 } from '../../state/selectors/selectedConversation
32
32
import { SessionSpinner } from '../loading' ;
33
33
import { SessionToggle } from '../basic/SessionToggle' ;
34
34
import { localize } from '../../localization/localeTools' ;
35
+ import { SessionSearchInput } from '../SessionSearchInput' ;
36
+ import { NoGroupMembers } from '../search/NoResults' ;
37
+ import { useContactsToInviteTo } from '../../hooks/useContactsToInviteToGroup' ;
38
+ import { searchActions } from '../../state/ducks/search' ;
35
39
36
40
type Props = {
37
41
conversationId : string ;
@@ -41,10 +45,35 @@ const StyledMemberList = styled.div`
41
45
max-height: 240px;
42
46
` ;
43
47
44
- /**
45
- * Admins are always put first in the list of group members.
46
- * Also, admins have a little crown on their avatar.
47
- */
48
+ function useSortedListOfMembers ( convoId : string ) {
49
+ const groupMembersLegacy = useSortedGroupMembers ( convoId ) ;
50
+ const groupMembers03Group = useStateOf03GroupMembers ( convoId ) ;
51
+ const isV2Group = useSelectedIsGroupV2 ( ) ;
52
+ const groupAdmins = useGroupAdmins ( convoId ) ;
53
+
54
+ const sortedMembersNon03 = useMemo (
55
+ ( ) => [ ...groupMembersLegacy ] . sort ( m => ( groupAdmins ?. includes ( m ) ? - 1 : 0 ) ) ,
56
+ [ groupMembersLegacy , groupAdmins ]
57
+ ) ;
58
+ const sortedMembers = isV2Group ? groupMembers03Group . map ( m => m . pubkeyHex ) : sortedMembersNon03 ;
59
+
60
+ return sortedMembers ;
61
+ }
62
+
63
+ const useFilteredSortedListOfMembers = ( convoId : string ) => {
64
+ const sortedMembers = useSortedListOfMembers ( convoId ) ;
65
+ const { contactsToInvite : globalSearchResults , searchTerm } =
66
+ useContactsToInviteTo ( 'manage-group-members' ) ;
67
+
68
+ return useMemo (
69
+ ( ) =>
70
+ ! searchTerm || globalSearchResults === undefined
71
+ ? sortedMembers
72
+ : sortedMembers . filter ( m => globalSearchResults . includes ( m ) ) ,
73
+ [ sortedMembers , globalSearchResults , searchTerm ]
74
+ ) ;
75
+ } ;
76
+
48
77
const MemberList = ( props : {
49
78
convoId : string ;
50
79
selectedMembers : Array < string > ;
@@ -54,17 +83,8 @@ const MemberList = (props: {
54
83
const { onSelect, convoId, onUnselect, selectedMembers } = props ;
55
84
const weAreAdmin = useWeAreAdmin ( convoId ) ;
56
85
const isV2Group = useSelectedIsGroupV2 ( ) ;
57
-
58
86
const groupAdmins = useGroupAdmins ( convoId ) ;
59
- const groupMembersLegacy = useSortedGroupMembers ( convoId ) ;
60
- const groupMembers03Group = useStateOf03GroupMembers ( convoId ) ;
61
-
62
- const sortedMembersNon03 = useMemo (
63
- ( ) => [ ...groupMembersLegacy ] . sort ( m => ( groupAdmins ?. includes ( m ) ? - 1 : 0 ) ) ,
64
- [ groupMembersLegacy , groupAdmins ]
65
- ) ;
66
-
67
- const sortedMembers = isV2Group ? groupMembers03Group . map ( m => m . pubkeyHex ) : sortedMembersNon03 ;
87
+ const sortedMembers = useFilteredSortedListOfMembers ( convoId ) ;
68
88
69
89
return (
70
90
< >
@@ -114,6 +134,7 @@ export const UpdateGroupMembersDialog = (props: Props) => {
114
134
115
135
const closeDialog = ( ) => {
116
136
dispatch ( updateGroupMembersModal ( null ) ) ;
137
+ dispatch ( searchActions . clearSearch ( ) ) ;
117
138
} ;
118
139
119
140
const onClickOK = async ( ) => {
@@ -165,8 +186,6 @@ export const UpdateGroupMembersDialog = (props: Props) => {
165
186
removeFrom ( member ) ;
166
187
} ;
167
188
168
- const showNoMembersMessage = existingMembers . length === 0 ;
169
-
170
189
return (
171
190
< SessionWrapperModal
172
191
title = {
@@ -194,15 +213,19 @@ export const UpdateGroupMembersDialog = (props: Props) => {
194
213
</ span >
195
214
</ >
196
215
) : null }
216
+ < SessionSearchInput searchType = "manage-group-members" />
197
217
< StyledMemberList className = "contact-selection-list" >
198
- < MemberList
199
- convoId = { conversationId }
200
- onSelect = { onSelect }
201
- onUnselect = { onUnselect }
202
- selectedMembers = { membersToRemove }
203
- />
218
+ { ! existingMembers . length ? (
219
+ < NoGroupMembers />
220
+ ) : (
221
+ < MemberList
222
+ convoId = { conversationId }
223
+ onSelect = { onSelect }
224
+ onUnselect = { onUnselect }
225
+ selectedMembers = { membersToRemove }
226
+ />
227
+ ) }
204
228
</ StyledMemberList >
205
- { showNoMembersMessage && < p > { window . i18n ( 'groupMembersNone' ) } </ p > }
206
229
207
230
< SpacerLG />
208
231
< SessionSpinner loading = { isProcessingUIChange } />
0 commit comments