pr suggestions and implemented a simpler way to clear the route, that always brings back to the initial coordinator

This commit is contained in:
Mauro Romito
2025-11-05 16:05:09 +01:00
committed by Mauro
parent e597dd8722
commit 6dee4176f2
7 changed files with 136 additions and 50 deletions
@@ -59,6 +59,8 @@ final class RoomMembersFlowCoordinator: FlowCoordinatorProtocol {
private let entryPoint: RoomMembersFlowCoordinatorEntryPoint
private let roomProxy: JoinedRoomProxyProtocol
private let navigationStackCoordinator: NavigationStackCoordinator
/// The last coordinator in the `navigationStackCoordinator` stack at the initial state
private let initialCoordinator: CoordinatorProtocol?
private let flowParameters: CommonFlowParameters
private let stateMachine: StateMachine<State, Event>
@@ -79,8 +81,9 @@ final class RoomMembersFlowCoordinator: FlowCoordinatorProtocol {
self.roomProxy = roomProxy
self.flowParameters = flowParameters
self.navigationStackCoordinator = navigationStackCoordinator
initialCoordinator = navigationStackCoordinator.stackCoordinators.last ?? navigationStackCoordinator.rootCoordinator
stateMachine = .init(state: .initial)
stateMachine = flowParameters.stateMachineFactory.makeMembersFlowStateMachine(state: .initial)
configureStateMachine()
}
@@ -123,14 +126,21 @@ final class RoomMembersFlowCoordinator: FlowCoordinatorProtocol {
}
func clearRoute(animated: Bool) {
if stateMachine.state == .inviteUsersScreen {
switch stateMachine.state {
case .inviteUsersScreen:
navigationStackCoordinator.setSheetCoordinator(nil, animated: animated)
} else if let roomFlowCoordinator {
roomFlowCoordinator.clearRoute(animated: animated)
clearRoute(animated: animated)
case .roomFlow:
roomFlowCoordinator?.clearRoute(animated: animated)
clearRoute(animated: animated)
case .initial:
break
case .roomMemberDetails, .roomMembersList, .userProfile:
guard let initialCoordinator else {
return
}
navigationStackCoordinator.pop(to: initialCoordinator, animated: animated)
}
// We don't support dismissing a sub flow by itself, only the entire chain.
// The presenter flow will take care of dismissing it
actionsSubject.send(.finished)
}
private func configureStateMachine() {
@@ -59,14 +59,11 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
private let roomProxy: JoinedRoomProxyProtocol
private let navigationStackCoordinator: NavigationStackCoordinator
private let initialCoordinator: CoordinatorProtocol?
private let flowParameters: CommonFlowParameters
private let stateMachine: StateMachine<State, Event>
private var cancellables = Set<AnyCancellable>()
private var modalNavigationStackCoordinator: NavigationStackCoordinator?
private var membersFlowCoordinator: RoomMembersFlowCoordinator?
private var rolesAndPermissionsFlowCoordinator: RoomRolesAndPermissionsFlowCoordinator?
private var membersFlowCoordinator: RoomMembersFlowCoordinator?
private var rolesAndPermissionsFlowCoordinator: RoomRolesAndPermissionsFlowCoordinator?
@@ -82,6 +79,7 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
self.roomProxy = roomProxy
self.flowParameters = flowParameters
self.navigationStackCoordinator = navigationStackCoordinator
initialCoordinator = navigationStackCoordinator.stackCoordinators.last ?? navigationStackCoordinator.rootCoordinator
stateMachine = .init(state: .initial)
configureStateMachine()
@@ -99,11 +97,9 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
switch stateMachine.state {
case .initial:
break
case .spaceSettings:
navigationStackCoordinator.pop(animated: animated)
case .securityAndPrivacy:
navigationStackCoordinator.pop(animated: animated)
clearRoute(animated: animated)
case .spaceSettings, .securityAndPrivacy:
guard let initialCoordinator else { return }
navigationStackCoordinator.pop(to: initialCoordinator, animated: animated)
case .editDetailsScreen, .editAddress:
navigationStackCoordinator.setSheetCoordinator(nil, animated: animated)
clearRoute(animated: animated)