mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Add invites badges (#819)
This commit is contained in:
@@ -22,6 +22,7 @@ typealias InvitesViewModelType = StateStoreViewModel<InvitesViewState, InvitesVi
|
||||
class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
private var actionsSubject: PassthroughSubject<InvitesViewModelAction, Never> = .init()
|
||||
private let userSession: UserSessionProtocol
|
||||
private let previouslySeenInvites: Set<String>
|
||||
|
||||
var actions: AnyPublisher<InvitesViewModelAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
@@ -29,6 +30,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
|
||||
init(userSession: UserSessionProtocol) {
|
||||
self.userSession = userSession
|
||||
previouslySeenInvites = ServiceLocator.shared.settings.seenInvites
|
||||
super.init(initialViewState: InvitesViewState(), imageProvider: userSession.mediaProvider)
|
||||
setupSubscriptions()
|
||||
}
|
||||
@@ -65,7 +67,8 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
.sink { [weak self] roomSummaries in
|
||||
guard let self else { return }
|
||||
|
||||
let invites = roomSummaries.invites
|
||||
let invites = self.buildInvites(from: roomSummaries)
|
||||
ServiceLocator.shared.settings.seenInvites = Set(invites.map(\.roomDetails.id))
|
||||
self.state.invites = invites
|
||||
|
||||
for invite in invites {
|
||||
@@ -75,6 +78,15 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private func buildInvites(from summaries: [RoomSummary]) -> [InvitesRoomDetails] {
|
||||
summaries.compactMap { summary in
|
||||
guard case .filled(let details) = summary else {
|
||||
return nil
|
||||
}
|
||||
return InvitesRoomDetails(roomDetails: details, isUnread: !previouslySeenInvites.contains(details.id))
|
||||
}
|
||||
}
|
||||
|
||||
private func fetchInviter(for roomID: String) {
|
||||
Task {
|
||||
guard let room: RoomProxyProtocol = await self.clientProxy.roomForIdentifier(roomID) else {
|
||||
@@ -154,14 +166,3 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
message: L10n.errorUnknown)
|
||||
}
|
||||
}
|
||||
|
||||
private extension Array where Element == RoomSummary {
|
||||
var invites: [InvitesRoomDetails] {
|
||||
compactMap { summary in
|
||||
guard case .filled(let details) = summary else {
|
||||
return nil
|
||||
}
|
||||
return .init(roomDetails: details)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user