Small recently visited room tweaks following PR review

This commit is contained in:
Stefan Ceriu 2024-04-05 09:16:31 +03:00 committed by Stefan Ceriu
parent 5221e9fb5d
commit d996c69a66
8 changed files with 28 additions and 28 deletions

View File

@ -1010,11 +1010,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
let stackCoordinator = NavigationStackCoordinator() let stackCoordinator = NavigationStackCoordinator()
let inviteParameters = InviteUsersScreenCoordinatorParameters(clientProxy: userSession.clientProxy, let inviteParameters = InviteUsersScreenCoordinatorParameters(clientProxy: userSession.clientProxy,
selectedUsers: .init(selectedUsersSubject),
roomType: .room(roomProxy: roomProxy),
mediaProvider: userSession.mediaProvider, mediaProvider: userSession.mediaProvider,
userDiscoveryService: UserDiscoveryService(clientProxy: userSession.clientProxy), userDiscoveryService: UserDiscoveryService(clientProxy: userSession.clientProxy),
userIndicatorController: userIndicatorController, userIndicatorController: userIndicatorController)
selectedUsers: .init(selectedUsersSubject),
roomType: .room(roomProxy: roomProxy))
let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters) let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters)
stackCoordinator.setRootCoordinator(coordinator) stackCoordinator.setRootCoordinator(coordinator)

View File

@ -19,12 +19,11 @@ import SwiftUI
struct InviteUsersScreenCoordinatorParameters { struct InviteUsersScreenCoordinatorParameters {
let clientProxy: ClientProxyProtocol let clientProxy: ClientProxyProtocol
let selectedUsers: CurrentValuePublisher<[UserProfileProxy], Never>
let roomType: InviteUsersScreenRoomType
let mediaProvider: MediaProviderProtocol let mediaProvider: MediaProviderProtocol
let userDiscoveryService: UserDiscoveryServiceProtocol let userDiscoveryService: UserDiscoveryServiceProtocol
let userIndicatorController: UserIndicatorControllerProtocol let userIndicatorController: UserIndicatorControllerProtocol
let selectedUsers: CurrentValuePublisher<[UserProfileProxy], Never>
let roomType: InviteUsersScreenRoomType
} }
enum InviteUsersScreenCoordinatorAction { enum InviteUsersScreenCoordinatorAction {
@ -45,11 +44,11 @@ final class InviteUsersScreenCoordinator: CoordinatorProtocol {
init(parameters: InviteUsersScreenCoordinatorParameters) { init(parameters: InviteUsersScreenCoordinatorParameters) {
viewModel = InviteUsersScreenViewModel(clientProxy: parameters.clientProxy, viewModel = InviteUsersScreenViewModel(clientProxy: parameters.clientProxy,
selectedUsers: parameters.selectedUsers,
roomType: parameters.roomType,
mediaProvider: parameters.mediaProvider, mediaProvider: parameters.mediaProvider,
userDiscoveryService: parameters.userDiscoveryService, userDiscoveryService: parameters.userDiscoveryService,
userIndicatorController: parameters.userIndicatorController, userIndicatorController: parameters.userIndicatorController)
selectedUsers: parameters.selectedUsers,
roomType: parameters.roomType)
} }
func start() { func start() {

View File

@ -34,17 +34,16 @@ class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScr
} }
init(clientProxy: ClientProxyProtocol, init(clientProxy: ClientProxyProtocol,
selectedUsers: CurrentValuePublisher<[UserProfileProxy], Never>,
roomType: InviteUsersScreenRoomType,
mediaProvider: MediaProviderProtocol, mediaProvider: MediaProviderProtocol,
userDiscoveryService: UserDiscoveryServiceProtocol, userDiscoveryService: UserDiscoveryServiceProtocol,
userIndicatorController: UserIndicatorControllerProtocol, userIndicatorController: UserIndicatorControllerProtocol) {
selectedUsers: CurrentValuePublisher<[UserProfileProxy], Never>,
roomType: InviteUsersScreenRoomType) {
self.clientProxy = clientProxy self.clientProxy = clientProxy
self.roomType = roomType
self.userDiscoveryService = userDiscoveryService self.userDiscoveryService = userDiscoveryService
self.userIndicatorController = userIndicatorController self.userIndicatorController = userIndicatorController
self.roomType = roomType
super.init(initialViewState: InviteUsersScreenViewState(selectedUsers: selectedUsers.value, isCreatingRoom: roomType.isCreatingRoom), imageProvider: mediaProvider) super.init(initialViewState: InviteUsersScreenViewState(selectedUsers: selectedUsers.value, isCreatingRoom: roomType.isCreatingRoom), imageProvider: mediaProvider)
setupSubscriptions(selectedUsers: selectedUsers) setupSubscriptions(selectedUsers: selectedUsers)

View File

@ -161,11 +161,11 @@ struct InviteUsersScreen_Previews: PreviewProvider, TestablePreview {
let userDiscoveryService = UserDiscoveryServiceMock() let userDiscoveryService = UserDiscoveryServiceMock()
userDiscoveryService.searchProfilesWithReturnValue = .success([.mockAlice]) userDiscoveryService.searchProfilesWithReturnValue = .success([.mockAlice])
return InviteUsersScreenViewModel(clientProxy: ClientProxyMock(.init()), return InviteUsersScreenViewModel(clientProxy: ClientProxyMock(.init()),
selectedUsers: .init([]),
roomType: .draft,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
userDiscoveryService: userDiscoveryService, userDiscoveryService: userDiscoveryService,
userIndicatorController: UserIndicatorControllerMock(), userIndicatorController: UserIndicatorControllerMock())
selectedUsers: .init([]),
roomType: .draft)
}() }()
static var previews: some View { static var previews: some View {

View File

@ -85,11 +85,11 @@ final class StartChatScreenCoordinator: CoordinatorProtocol {
private func presentInviteUsersScreen() { private func presentInviteUsersScreen() {
let inviteParameters = InviteUsersScreenCoordinatorParameters(clientProxy: parameters.userSession.clientProxy, let inviteParameters = InviteUsersScreenCoordinatorParameters(clientProxy: parameters.userSession.clientProxy,
selectedUsers: selectedUsersPublisher,
roomType: .draft,
mediaProvider: parameters.userSession.mediaProvider, mediaProvider: parameters.userSession.mediaProvider,
userDiscoveryService: parameters.userDiscoveryService, userDiscoveryService: parameters.userDiscoveryService,
userIndicatorController: parameters.userIndicatorController, userIndicatorController: parameters.userIndicatorController)
selectedUsers: selectedUsersPublisher,
roomType: .draft)
let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters) let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters)
coordinator.actions.sink { [weak self] action in coordinator.actions.sink { [weak self] action in
guard let self else { return } guard let self else { return }

View File

@ -16,8 +16,10 @@
import Combine import Combine
import CryptoKit import CryptoKit
import Foundation
import OrderedCollections
import MatrixRustSDK import MatrixRustSDK
import SwiftUI
class ClientProxy: ClientProxyProtocol { class ClientProxy: ClientProxyProtocol {
private let client: ClientProtocol private let client: ClientProtocol
@ -625,7 +627,7 @@ class ClientProxy: ClientProxyProtocol {
return [] return []
} }
var users = [UserProfileProxy]() var users: OrderedSet<UserProfileProxy> = []
for roomID in roomIdentifiers { for roomID in roomIdentifiers {
guard let room = await roomForIdentifier(roomID), guard let room = await roomForIdentifier(roomID),
@ -639,12 +641,12 @@ class ClientProxy: ClientProxyProtocol {
// Return early to avoid unnecessary work // Return early to avoid unnecessary work
if users.count >= maxResultsToReturn { if users.count >= maxResultsToReturn {
return users return users.elements
} }
} }
} }
return users return users.elements
} }
// MARK: - Private // MARK: - Private

View File

@ -17,7 +17,7 @@
import Foundation import Foundation
import MatrixRustSDK import MatrixRustSDK
struct UserProfileProxy: Equatable { struct UserProfileProxy: Equatable, Hashable {
let userID: String let userID: String
let displayName: String? let displayName: String?
let avatarURL: URL? let avatarURL: URL?

View File

@ -99,11 +99,11 @@ class InviteUsersScreenViewModelTests: XCTestCase {
userDiscoveryService.searchProfilesWithReturnValue = .success([]) userDiscoveryService.searchProfilesWithReturnValue = .success([])
usersSubject.send([]) usersSubject.send([])
let viewModel = InviteUsersScreenViewModel(clientProxy: ClientProxyMock(.init()), let viewModel = InviteUsersScreenViewModel(clientProxy: ClientProxyMock(.init()),
selectedUsers: usersSubject.asCurrentValuePublisher(),
roomType: roomType,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
userDiscoveryService: userDiscoveryService, userDiscoveryService: userDiscoveryService,
userIndicatorController: UserIndicatorControllerMock(), userIndicatorController: UserIndicatorControllerMock())
selectedUsers: usersSubject.asCurrentValuePublisher(),
roomType: roomType)
viewModel.state.usersSection = .init(type: .suggestions, users: [.mockAlice, .mockBob, .mockCharlie]) viewModel.state.usersSection = .init(type: .suggestions, users: [.mockAlice, .mockBob, .mockCharlie])
self.viewModel = viewModel self.viewModel = viewModel