Create room: add selectable state for security, add navigation to screen

This commit is contained in:
Flavio Alescio
2023-04-21 17:56:04 +02:00
committed by Flescio
parent a4334ebb0d
commit 4eb8906b6b
9 changed files with 57 additions and 29 deletions
@@ -18,6 +18,7 @@ import Combine
import SwiftUI
struct InviteUsersScreenCoordinatorParameters {
let navigationStackCoordinator: NavigationStackCoordinator?
let userSession: UserSessionProtocol
let userDiscoveryService: UserDiscoveryServiceProtocol
}
@@ -47,7 +48,10 @@ final class InviteUsersScreenCoordinator: CoordinatorProtocol {
guard let self else { return }
switch action {
case .close:
self.actionsSubject.send(.close)
case .proceed(let users):
self.openCreateRoomScreenWith(users)
}
}
.store(in: &cancellables)
@@ -56,4 +60,10 @@ final class InviteUsersScreenCoordinator: CoordinatorProtocol {
func toPresentable() -> AnyView {
AnyView(InviteUsersScreen(context: viewModel.context))
}
private func openCreateRoomScreenWith(_ users: [UserProfile]) {
let paramenters = CreateRoomCoordinatorParameters(userSession: parameters.userSession, selectedUsers: users)
let createRoomCoordinator = CreateRoomCoordinator(parameters: paramenters)
parameters.navigationStackCoordinator?.push(createRoomCoordinator)
}
}
@@ -22,6 +22,7 @@ enum InviteUsersScreenErrorType: Error {
enum InviteUsersScreenViewModelAction {
case close
case proceed(users: [UserProfile])
}
struct InviteUsersScreenViewState: BindableState {
@@ -43,7 +43,7 @@ class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScr
case .close:
actionsSubject.send(.close)
case .proceed:
break
actionsSubject.send(.proceed(users: state.selectedUsers))
case .tapUser(let user):
if state.isUserSelected(user) {
deselect(user)