Setup thread specific transitions and more reordering.

This commit is contained in:
Stefan Ceriu
2025-05-29 08:35:42 +03:00
committed by Stefan Ceriu
parent dc76e8f7e7
commit bc1f7ca646
2 changed files with 65 additions and 75 deletions
@@ -265,7 +265,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
.store(in: &cancellables) .store(in: &cancellables)
} }
// swiftlint:disable:next function_body_length
private func setupStateMachine() { private func setupStateMachine() {
addRouteMapping(stateMachine: stateMachine) addRouteMapping(stateMachine: stateMachine)
@@ -286,46 +285,37 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (_, .dismissFlow, .complete): case (_, .dismissFlow, .complete):
dismissFlow(animated: animated) dismissFlow(animated: animated)
case (.room, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)):
presentRoomMemberDetails(userID: userID)
case (.room, .presentKnockRequestsListScreen, .knockRequestsList):
presentKnockRequestsList()
case (.room, .presentReportContent, .reportContent(let itemID, let senderID, _)):
presentReportContent(for: itemID, from: senderID)
case (.room, .presentMediaUploadPicker, .mediaUploadPicker(let source, _)):
presentMediaUploadPickerWithSource(source)
case (.mediaUploadPicker, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (.room, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (_, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji, _)):
presentEmojiPicker(for: itemID, selectedEmoji: selectedEmoji)
case (.room, .presentMessageForwarding(let forwardingItem), .messageForwarding):
presentMessageForwarding(with: forwardingItem)
case (.room, .presentMapNavigator(let mode), .mapNavigator):
presentMapNavigator(interactionMode: mode)
case (.room, .presentPollForm(let mode), .pollForm):
presentPollForm(mode: mode)
case (.room, .presentPinnedEventsTimeline, .pinnedEventsTimeline): case (.room, .presentPinnedEventsTimeline, .pinnedEventsTimeline):
startPinnedEventsTimelineFlow() startPinnedEventsTimelineFlow()
case (.room, .presentResolveSendFailure(let failure, let sendHandle), .resolveSendFailure):
presentResolveSendFailure(failure: failure, sendHandle: sendHandle)
// Thread // Thread
case (.room, .presentThread(let itemID), .thread): case (.room, .presentThread(let itemID), .thread):
Task { await self.presentThread(itemID: itemID) } Task { await self.presentThread(itemID: itemID) }
// Thread + Room
case (_, .presentReportContent, .reportContent(let itemID, let senderID, _)):
presentReportContent(for: itemID, from: senderID)
case (_, .presentMediaUploadPicker, .mediaUploadPicker(let source, _)):
presentMediaUploadPickerWithSource(source)
case (_, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji, _)):
presentEmojiPicker(for: itemID, selectedEmoji: selectedEmoji)
case (_, .presentMessageForwarding(let forwardingItem), .messageForwarding):
presentMessageForwarding(with: forwardingItem)
case (_, .presentMapNavigator(let mode), .mapNavigator):
presentMapNavigator(interactionMode: mode)
case (_, .presentPollForm(let mode), .pollForm):
presentPollForm(mode: mode)
case (_, .presentResolveSendFailure(let failure, let sendHandle), .resolveSendFailure):
presentResolveSendFailure(failure: failure, sendHandle: sendHandle)
// Room Details // Room Details
case (.initial, .presentRoomDetails, .roomDetails(let isRoot)), case (.initial, .presentRoomDetails, .roomDetails(let isRoot)),
@@ -342,18 +332,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.roomDetails, .presentRoomMembersList, .roomMembersList): case (.roomDetails, .presentRoomMembersList, .roomMembersList):
presentRoomMembersList() presentRoomMembersList()
case (.roomDetails, .presentInviteUsersScreen, .inviteUsersScreen):
presentInviteUsersScreen()
case (.notificationSettings, .presentGlobalNotificationSettingsScreen, .globalNotificationSettings):
presentGlobalNotificationSettingsScreen()
case (.roomMembersList, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)):
presentRoomMemberDetails(userID: userID)
case (.roomMemberDetails, .presentUserProfile(let userID), .userProfile):
replaceRoomMemberDetailsWithUserProfile(userID: userID)
case (.roomDetails, .presentPollsHistory, .pollsHistory): case (.roomDetails, .presentPollsHistory, .pollsHistory):
presentPollsHistory() presentPollsHistory()
@@ -365,12 +343,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.rolesAndPermissions, .dismissRolesAndPermissionsScreen, .roomDetails): case (.rolesAndPermissions, .dismissRolesAndPermissionsScreen, .roomDetails):
rolesAndPermissionsFlowCoordinator = nil rolesAndPermissionsFlowCoordinator = nil
case (.roomDetails, .presentRoomMemberDetails(let userID), .roomMemberDetails):
presentRoomMemberDetails(userID: userID)
case (.roomDetails, .presentKnockRequestsListScreen, .knockRequestsList):
presentKnockRequestsList()
case (.roomDetails, .presentMediaEventsTimeline, .mediaEventsTimeline): case (.roomDetails, .presentMediaEventsTimeline, .mediaEventsTimeline):
Task { await self.startMediaEventsTimelineFlow() } Task { await self.startMediaEventsTimelineFlow() }
@@ -380,18 +352,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.roomDetails, .presentReportRoomScreen, .reportRoom): case (.roomDetails, .presentReportRoomScreen, .reportRoom):
presentReportRoom() presentReportRoom()
// Other // Join room
case (_, .startChildFlow(let roomID, let via, let entryPoint), .presentingChild):
Task { await self.startChildFlow(for: roomID, via: via, entryPoint: entryPoint) }
case (.presentingChild, .dismissChildFlow, _):
childRoomFlowCoordinator = nil
case (.roomMembersList, .presentInviteUsersScreen, .inviteUsersScreen):
presentInviteUsersScreen()
case (.pollsHistory, .presentPollForm(let mode), .pollsHistoryForm):
presentPollForm(mode: mode)
case (_, .presentJoinRoomScreen(let via), .joinRoomScreen): case (_, .presentJoinRoomScreen(let via), .joinRoomScreen):
presentJoinRoomScreen(via: via, animated: true) presentJoinRoomScreen(via: via, animated: true)
@@ -401,6 +362,34 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.joinRoomScreen, .presentDeclineAndBlockScreen(let userID), .declineAndBlockScreen): case (.joinRoomScreen, .presentDeclineAndBlockScreen(let userID), .declineAndBlockScreen):
presentDeclineAndBlockScreen(userID: userID) presentDeclineAndBlockScreen(userID: userID)
// Other
case (_, .startChildFlow(let roomID, let via, let entryPoint), .presentingChild):
Task { await self.startChildFlow(for: roomID, via: via, entryPoint: entryPoint) }
case (.presentingChild, .dismissChildFlow, _):
childRoomFlowCoordinator = nil
case (_, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)):
presentRoomMemberDetails(userID: userID)
case (_, .presentKnockRequestsListScreen, .knockRequestsList):
presentKnockRequestsList()
case (.notificationSettings, .presentGlobalNotificationSettingsScreen, .globalNotificationSettings):
presentGlobalNotificationSettingsScreen()
case (.roomMemberDetails, .presentUserProfile(let userID), .userProfile):
replaceRoomMemberDetailsWithUserProfile(userID: userID)
case (.pollsHistory, .presentPollForm(let mode), .pollsHistoryForm):
presentPollForm(mode: mode)
case (_, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (_, .presentInviteUsersScreen, .inviteUsersScreen):
presentInviteUsersScreen()
default: default:
break break
} }
@@ -187,8 +187,6 @@ extension RoomFlowCoordinator {
case (.room, .presentMediaUploadPicker(let source)): case (.room, .presentMediaUploadPicker(let source)):
return .mediaUploadPicker(source: source, previousState: fromState) return .mediaUploadPicker(source: source, previousState: fromState)
case (.mediaUploadPicker, .presentMediaUploadPreview(let fileURL)):
return .mediaUploadPreview(fileURL: fileURL, previousState: fromState)
case (.room, .presentMediaUploadPreview(let fileURL)): case (.room, .presentMediaUploadPreview(let fileURL)):
return .mediaUploadPreview(fileURL: fileURL, previousState: fromState) return .mediaUploadPreview(fileURL: fileURL, previousState: fromState)
@@ -204,6 +202,9 @@ extension RoomFlowCoordinator {
case (.room, .presentPollForm): case (.room, .presentPollForm):
return .pollForm(previousState: fromState) return .pollForm(previousState: fromState)
case (.room, .presentResolveSendFailure):
return .resolveSendFailure(previousState: fromState)
case (.room, .presentPinnedEventsTimeline): case (.room, .presentPinnedEventsTimeline):
return .pinnedEventsTimeline(previousState: fromState) return .pinnedEventsTimeline(previousState: fromState)
case (.roomDetails, .presentPinnedEventsTimeline): case (.roomDetails, .presentPinnedEventsTimeline):
@@ -211,9 +212,6 @@ extension RoomFlowCoordinator {
case (.pinnedEventsTimeline(let previousState), .dismissPinnedEventsTimeline): case (.pinnedEventsTimeline(let previousState), .dismissPinnedEventsTimeline):
return previousState return previousState
case (.room, .presentResolveSendFailure):
return .resolveSendFailure(previousState: fromState)
// Thread // Thread
case (.room, .presentThread(let itemID)): case (.room, .presentThread(let itemID)):
return .thread(itemID: itemID) return .thread(itemID: itemID)
@@ -330,11 +328,6 @@ extension RoomFlowCoordinator {
// Other // Other
case (_, .presentInviteUsersScreen):
return .inviteUsersScreen(previousState: fromState)
case (.inviteUsersScreen(let previousState), .dismissInviteUsersScreen):
return previousState
case (_, .startChildFlow(let roomID, _, _)): case (_, .startChildFlow(let roomID, _, _)):
return .presentingChild(childRoomID: roomID, previousState: fromState) return .presentingChild(childRoomID: roomID, previousState: fromState)
case (.presentingChild(_, let previousState), .dismissChildFlow): case (.presentingChild(_, let previousState), .dismissChildFlow):
@@ -368,6 +361,14 @@ extension RoomFlowCoordinator {
case (.pollsHistoryForm, .dismissPollForm): case (.pollsHistoryForm, .dismissPollForm):
return .pollsHistory return .pollsHistory
case (.mediaUploadPicker, .presentMediaUploadPreview(let fileURL)):
return .mediaUploadPreview(fileURL: fileURL, previousState: fromState)
case (_, .presentInviteUsersScreen):
return .inviteUsersScreen(previousState: fromState)
case (.inviteUsersScreen(let previousState), .dismissInviteUsersScreen):
return previousState
default: default:
return nil return nil
} }