mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +00:00
Invited members in room's members list (#880)
* Add invited people in RoomMembersListScreen * Optimize main thread perfomance in RoomDetailsScreenViewModel * Fix member count in RoomDetailsScreenViewModel * Add warning * Add performance warnings * Build members in RoomMembersListScreenViewModel in global queue * Refactor RoomDetailsScreenViewModel build members process * Localize strings * Cleanup * Fix RoomDetailsScreenViewModelTests UTs * Fix UI tests * Add RoomMembersListScreenViewModel UTs * Add UI tests * Amend UI tests * Use clearAndTypeText
This commit is contained in:
@@ -21,19 +21,32 @@ enum RoomMembersListScreenViewModelAction {
|
||||
}
|
||||
|
||||
struct RoomMembersListScreenViewState: BindableState {
|
||||
var members: [RoomMemberDetails]
|
||||
|
||||
private var joinedMembers: [RoomMemberDetails]
|
||||
private var invitedMembers: [RoomMemberDetails]
|
||||
var bindings: RoomMembersListScreenViewStateBindings
|
||||
|
||||
init(joinedMembers: [RoomMemberDetails] = [], invitedMembers: [RoomMemberDetails] = [], bindings: RoomMembersListScreenViewStateBindings = .init()) {
|
||||
self.joinedMembers = joinedMembers
|
||||
self.invitedMembers = invitedMembers
|
||||
self.bindings = bindings
|
||||
}
|
||||
|
||||
var visibleMembers: [RoomMemberDetails] {
|
||||
if bindings.searchQuery.isEmpty {
|
||||
return members
|
||||
}
|
||||
|
||||
return members.lazy.filter { member in
|
||||
member.id.localizedCaseInsensitiveContains(bindings.searchQuery) ||
|
||||
member.name?.localizedCaseInsensitiveContains(bindings.searchQuery) ?? false
|
||||
}
|
||||
var visibleJoinedMembers: [RoomMemberDetails] {
|
||||
joinedMembers.lazy
|
||||
.filter { member in
|
||||
member.matches(searchQuery: bindings.searchQuery)
|
||||
}
|
||||
}
|
||||
|
||||
var visibleInvitedMembers: [RoomMemberDetails] {
|
||||
invitedMembers.lazy
|
||||
.filter { member in
|
||||
member.matches(searchQuery: bindings.searchQuery)
|
||||
}
|
||||
}
|
||||
|
||||
var joinedMembersCount: Int {
|
||||
joinedMembers.count
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,3 +60,13 @@ struct RoomMembersListScreenViewStateBindings {
|
||||
enum RoomMembersListScreenViewAction {
|
||||
case selectMember(id: String)
|
||||
}
|
||||
|
||||
private extension RoomMemberDetails {
|
||||
func matches(searchQuery: String) -> Bool {
|
||||
guard !searchQuery.isEmpty else {
|
||||
return true
|
||||
}
|
||||
|
||||
return id.localizedCaseInsensitiveContains(searchQuery) || name?.localizedCaseInsensitiveContains(searchQuery) ?? false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user