mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Prevent mapping members on the main queue inside the room screen view model
This commit is contained in:
committed by
Stefan Ceriu
parent
c2a1560b1d
commit
82981f33e9
@@ -793,11 +793,11 @@ class RoomProxyMock: RoomProxyProtocol {
|
|||||||
var displayName: String?
|
var displayName: String?
|
||||||
var topic: String?
|
var topic: String?
|
||||||
var avatarURL: URL?
|
var avatarURL: URL?
|
||||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> {
|
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
|
||||||
get { return underlyingMembersPublisher }
|
get { return underlyingMembers }
|
||||||
set(value) { underlyingMembersPublisher = value }
|
set(value) { underlyingMembers = value }
|
||||||
}
|
}
|
||||||
var underlyingMembersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never>!
|
var underlyingMembers: CurrentValuePublisher<[RoomMemberProxyProtocol], Never>!
|
||||||
var invitedMembersCount: Int {
|
var invitedMembersCount: Int {
|
||||||
get { return underlyingInvitedMembersCount }
|
get { return underlyingInvitedMembersCount }
|
||||||
set(value) { underlyingInvitedMembersCount = value }
|
set(value) { underlyingInvitedMembersCount = value }
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ extension RoomProxyMock {
|
|||||||
activeMembersCount = configuration.activeMembersCount
|
activeMembersCount = configuration.activeMembersCount
|
||||||
ownUserID = configuration.ownUserID
|
ownUserID = configuration.ownUserID
|
||||||
|
|
||||||
if let members = configuration.members {
|
if let configuredMembers = configuration.members {
|
||||||
membersPublisher = Just(members).eraseToAnyPublisher()
|
members = CurrentValueSubject(configuredMembers).asCurrentValuePublisher()
|
||||||
} else {
|
} else {
|
||||||
membersPublisher = Just([]).eraseToAnyPublisher()
|
members = CurrentValueSubject([]).asCurrentValuePublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
if let inviter = configuration.inviter {
|
if let inviter = configuration.inviter {
|
||||||
|
|||||||
@@ -119,9 +119,10 @@ class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScr
|
|||||||
hideLoader()
|
hideLoader()
|
||||||
}
|
}
|
||||||
|
|
||||||
roomProxy.membersPublisher
|
roomProxy.members
|
||||||
.filter { !$0.isEmpty }
|
.filter { !$0.isEmpty }
|
||||||
.first()
|
.first()
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] members in
|
.sink { [weak self] members in
|
||||||
self?.buildMembershipStateIfNeeded(members: members)
|
self?.buildMembershipStateIfNeeded(members: members)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,8 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
roomProxy.membersPublisher
|
roomProxy.members
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] members in
|
.sink { [weak self] members in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
let dmRecipient = members.first(where: { !$0.isAccountOwner })
|
let dmRecipient = members.first(where: { !$0.isAccountOwner })
|
||||||
|
|||||||
@@ -67,8 +67,9 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
|||||||
hideLoader()
|
hideLoader()
|
||||||
}
|
}
|
||||||
|
|
||||||
roomProxy.membersPublisher
|
roomProxy.members
|
||||||
.filter { !$0.isEmpty }
|
.filter { !$0.isEmpty }
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] members in
|
.sink { [weak self] members in
|
||||||
self?.updateState(members: members)
|
self?.updateState(members: members)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -210,12 +210,13 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
|||||||
.weakAssign(to: \.state.readReceiptsEnabled, on: self)
|
.weakAssign(to: \.state.readReceiptsEnabled, on: self)
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
|
|
||||||
roomProxy.membersPublisher
|
roomProxy.members
|
||||||
.map { members in
|
.map { members in
|
||||||
members.reduce(into: [String: RoomMemberState]()) { dictionary, member in
|
members.reduce(into: [String: RoomMemberState]()) { dictionary, member in
|
||||||
dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL)
|
dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
.weakAssign(to: \.state.members, on: self)
|
.weakAssign(to: \.state.members, on: self)
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,10 +40,8 @@ class RoomProxy: RoomProxyProtocol {
|
|||||||
|
|
||||||
private let backPaginationStateSubject = PassthroughSubject<BackPaginationStatus, Never>()
|
private let backPaginationStateSubject = PassthroughSubject<BackPaginationStatus, Never>()
|
||||||
private let membersSubject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
private let membersSubject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
||||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> {
|
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
|
||||||
membersSubject
|
membersSubject.asCurrentValuePublisher()
|
||||||
.receive(on: DispatchQueue.main)
|
|
||||||
.eraseToAnyPublisher()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private var timelineListener: RoomTimelineListener?
|
private var timelineListener: RoomTimelineListener?
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ protocol RoomProxyProtocol {
|
|||||||
|
|
||||||
var avatarURL: URL? { get }
|
var avatarURL: URL? { get }
|
||||||
|
|
||||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> { get }
|
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
|
||||||
|
|
||||||
var invitedMembersCount: Int { get }
|
var invitedMembersCount: Int { get }
|
||||||
|
|
||||||
@@ -206,6 +206,6 @@ extension RoomProxyProtocol {
|
|||||||
|
|
||||||
func members() async -> [RoomMemberProxyProtocol]? {
|
func members() async -> [RoomMemberProxyProtocol]? {
|
||||||
await updateMembers()
|
await updateMembers()
|
||||||
return await membersPublisher.values.first()
|
return members.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user