Rearrange room flow coordinator state machine transitions

This commit is contained in:
Stefan Ceriu
2025-05-28 15:53:39 +03:00
committed by Stefan Ceriu
parent 99c3cd7872
commit 4cb8ae3ef6
2 changed files with 86 additions and 78 deletions
@@ -363,9 +363,9 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.mediaUploadPreview, .dismissMediaUploadPreview, .room): case (.mediaUploadPreview, .dismissMediaUploadPreview, .room):
break break
case (.room, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji)): case (_, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji)):
presentEmojiPicker(for: itemID, selectedEmoji: selectedEmoji) presentEmojiPicker(for: itemID, selectedEmoji: selectedEmoji)
case (.emojiPicker, .dismissEmojiPicker, .room): case (.emojiPicker, .dismissEmojiPicker, _):
break break
case (.room, .presentMessageForwarding(let forwardingItem), .messageForwarding): case (.room, .presentMessageForwarding(let forwardingItem), .messageForwarding):
@@ -175,63 +175,12 @@ extension RoomFlowCoordinator {
func addRouteMapping(stateMachine: StateMachine<State, Event>) { func addRouteMapping(stateMachine: StateMachine<State, Event>) {
stateMachine.addRouteMapping { event, fromState, _ in stateMachine.addRouteMapping { event, fromState, _ in
switch (fromState, event) { switch (fromState, event) {
case (_, .presentJoinRoomScreen): // Room
return .joinRoomScreen
case (_, .dismissJoinRoomScreen):
return .complete
case (_, .presentRoom): case (_, .presentRoom):
return .room return .room
case (_, .dismissFlow): case (_, .dismissFlow):
return .complete return .complete
case (_, .presentThread(let itemID)):
return .thread(itemID: itemID)
case (_, .dismissThread):
return .room
case (.initial, .presentRoomDetails):
return .roomDetails(isRoot: true)
case (.room, .presentRoomDetails):
return .roomDetails(isRoot: false)
case (.roomDetails, .dismissRoomDetails):
return .room
case (.roomDetails, .presentRoomDetailsEditScreen):
return .roomDetailsEditScreen
case (.roomDetailsEditScreen, .dismissRoomDetailsEditScreen):
return .roomDetails(isRoot: false)
case (.roomDetails, .presentNotificationSettingsScreen):
return .notificationSettings
case (.notificationSettings, .dismissNotificationSettingsScreen):
return .roomDetails(isRoot: false)
case (.notificationSettings, .presentGlobalNotificationSettingsScreen):
return .globalNotificationSettings
case (.globalNotificationSettings, .dismissGlobalNotificationSettingsScreen):
return .notificationSettings
case (.roomDetails, .presentRoomMembersList):
return .roomMembersList
case (.roomMembersList, .dismissRoomMembersList):
return .roomDetails(isRoot: false)
case (_, .presentRoomMemberDetails(userID: let userID)):
return .roomMemberDetails(userID: userID, previousState: fromState)
case (.roomMemberDetails(_, let previousState), .dismissRoomMemberDetails):
return previousState
case (.roomMemberDetails(_, let previousState), .presentUserProfile(let userID)):
return .userProfile(userID: userID, previousState: previousState)
case (.userProfile(_, let previousState), .dismissUserProfile):
return previousState
case (_, .presentInviteUsersScreen):
return .inviteUsersScreen(previousState: fromState)
case (.inviteUsersScreen(let previousState), .dismissInviteUsersScreen):
return previousState
case (.room, .presentReportContent(let itemID, let senderID)): case (.room, .presentReportContent(let itemID, let senderID)):
return .reportContent(itemID: itemID, senderID: senderID) return .reportContent(itemID: itemID, senderID: senderID)
case (.reportContent, .dismissReportContent): case (.reportContent, .dismissReportContent):
@@ -276,35 +225,50 @@ extension RoomFlowCoordinator {
case (.pinnedEventsTimeline(let previousState), .dismissPinnedEventsTimeline): case (.pinnedEventsTimeline(let previousState), .dismissPinnedEventsTimeline):
return previousState return previousState
case (.roomDetails, .presentPollsHistory):
return .pollsHistory
case (.pollsHistory, .dismissPollsHistory):
return .roomDetails(isRoot: false)
case (.pollsHistory, .presentPollForm):
return .pollsHistoryForm
case (.pollsHistoryForm, .dismissPollForm):
return .pollsHistory
case (.roomDetails, .presentRolesAndPermissionsScreen):
return .rolesAndPermissions
case (.rolesAndPermissions, .dismissRolesAndPermissionsScreen):
return .roomDetails(isRoot: false)
case (.room, .presentResolveSendFailure): case (.room, .presentResolveSendFailure):
return .resolveSendFailure return .resolveSendFailure
case (.resolveSendFailure, .dismissResolveSendFailure): case (.resolveSendFailure, .dismissResolveSendFailure):
return .room return .room
case (_, .startChildFlow(let roomID, _, _)):
return .presentingChild(childRoomID: roomID, previousState: fromState)
case (.presentingChild(_, let previousState), .dismissChildFlow):
return previousState
case (_, .presentKnockRequestsListScreen): // Thread
return .knockRequestsList(previousState: fromState) case (_, .presentThread(let itemID)):
case (.knockRequestsList(let previousState), .dismissKnockRequestsListScreen): return .thread(itemID: itemID)
return previousState case (_, .dismissThread):
return .room
// Room Details
case (.initial, .presentRoomDetails):
return .roomDetails(isRoot: true)
case (.room, .presentRoomDetails):
return .roomDetails(isRoot: false)
case (.roomDetails, .dismissRoomDetails):
return .room
case (.roomDetails, .presentRoomDetailsEditScreen):
return .roomDetailsEditScreen
case (.roomDetailsEditScreen, .dismissRoomDetailsEditScreen):
return .roomDetails(isRoot: false)
case (.roomDetails, .presentRoomMembersList):
return .roomMembersList
case (.roomMembersList, .dismissRoomMembersList):
return .roomDetails(isRoot: false)
case (.roomDetails, .presentNotificationSettingsScreen):
return .notificationSettings
case (.notificationSettings, .dismissNotificationSettingsScreen):
return .roomDetails(isRoot: false)
case (.roomDetails, .presentPollsHistory):
return .pollsHistory
case (.pollsHistory, .dismissPollsHistory):
return .roomDetails(isRoot: false)
case (.roomDetails, .presentRolesAndPermissionsScreen):
return .rolesAndPermissions
case (.rolesAndPermissions, .dismissRolesAndPermissionsScreen):
return .roomDetails(isRoot: false)
case (.roomDetails, .presentMediaEventsTimeline): case (.roomDetails, .presentMediaEventsTimeline):
return .mediaEventsTimeline(previousState: fromState) return .mediaEventsTimeline(previousState: fromState)
@@ -321,10 +285,54 @@ extension RoomFlowCoordinator {
case (.reportRoom(let previousState), .dismissReportRoomScreen): case (.reportRoom(let previousState), .dismissReportRoomScreen):
return previousState return previousState
// Join room
case (_, .presentJoinRoomScreen):
return .joinRoomScreen
case (_, .dismissJoinRoomScreen):
return .complete
case (.joinRoomScreen, .presentDeclineAndBlockScreen): case (.joinRoomScreen, .presentDeclineAndBlockScreen):
return .declineAndBlockScreen return .declineAndBlockScreen
case (.declineAndBlockScreen, .dismissDeclineAndBlockScreen): case (.declineAndBlockScreen, .dismissDeclineAndBlockScreen):
return .joinRoomScreen return .joinRoomScreen
// Other
case (_, .presentInviteUsersScreen):
return .inviteUsersScreen(previousState: fromState)
case (.inviteUsersScreen(let previousState), .dismissInviteUsersScreen):
return previousState
case (_, .startChildFlow(let roomID, _, _)):
return .presentingChild(childRoomID: roomID, previousState: fromState)
case (.presentingChild(_, let previousState), .dismissChildFlow):
return previousState
case (_, .presentRoomMemberDetails(userID: let userID)):
return .roomMemberDetails(userID: userID, previousState: fromState)
case (.roomMemberDetails(_, let previousState), .dismissRoomMemberDetails):
return previousState
case (_, .presentKnockRequestsListScreen):
return .knockRequestsList(previousState: fromState)
case (.knockRequestsList(let previousState), .dismissKnockRequestsListScreen):
return previousState
case (.notificationSettings, .presentGlobalNotificationSettingsScreen):
return .globalNotificationSettings
case (.globalNotificationSettings, .dismissGlobalNotificationSettingsScreen):
return .notificationSettings
case (.roomMemberDetails(_, let previousState), .presentUserProfile(let userID)):
return .userProfile(userID: userID, previousState: previousState)
case (.userProfile(_, let previousState), .dismissUserProfile):
return previousState
case (.pollsHistory, .presentPollForm):
return .pollsHistoryForm
case (.pollsHistoryForm, .dismissPollForm):
return .pollsHistory
default: default:
return nil return nil