Move presentation and coordination logic from the RoomDetailsScreenCoordinator and into the RoomFlowCoordinator

This commit is contained in:
Stefan Ceriu
2023-11-29 10:13:49 +02:00
committed by Stefan Ceriu
parent 9a8c4d4ae5
commit 742a924037
5 changed files with 286 additions and 216 deletions
@@ -18,21 +18,18 @@ import Combine
import SwiftUI
struct RoomMembersListScreenCoordinatorParameters {
weak var navigationStackCoordinator: NavigationStackCoordinator?
let mediaProvider: MediaProviderProtocol
let roomProxy: RoomProxyProtocol
}
enum RoomMembersListScreenCoordinatorAction {
case invite
case selectedMember(RoomMemberProxyProtocol)
}
final class RoomMembersListScreenCoordinator: CoordinatorProtocol {
private let parameters: RoomMembersListScreenCoordinatorParameters
private var viewModel: RoomMembersListScreenViewModelProtocol
private var navigationStackCoordinator: NavigationStackCoordinator? {
parameters.navigationStackCoordinator
}
private let actionsSubject: PassthroughSubject<RoomMembersListScreenCoordinatorAction, Never> = .init()
private var cancellables = Set<AnyCancellable>()
@@ -56,7 +53,7 @@ final class RoomMembersListScreenCoordinator: CoordinatorProtocol {
switch action {
case let .selectMember(member):
selectMember(member)
actionsSubject.send(.selectedMember(member))
case .invite:
actionsSubject.send(.invite)
}
@@ -67,16 +64,4 @@ final class RoomMembersListScreenCoordinator: CoordinatorProtocol {
func toPresentable() -> AnyView {
AnyView(RoomMembersListScreen(context: viewModel.context))
}
// MARK: - Private
private func selectMember(_ member: RoomMemberProxyProtocol) {
let parameters = RoomMemberDetailsScreenCoordinatorParameters(roomProxy: parameters.roomProxy,
roomMemberProxy: member,
mediaProvider: parameters.mediaProvider,
userIndicatorController: ServiceLocator.shared.userIndicatorController)
let coordinator = RoomMemberDetailsScreenCoordinator(parameters: parameters)
navigationStackCoordinator?.push(coordinator)
}
}