Add thread specific route mappings

This commit is contained in:
Stefan Ceriu
2025-05-28 18:26:55 +03:00
committed by Stefan Ceriu
parent 4cb8ae3ef6
commit 1ff1813b01
2 changed files with 76 additions and 42 deletions
@@ -346,24 +346,24 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.inviteUsersScreen, .dismissInviteUsersScreen, .roomMembersList): case (.inviteUsersScreen, .dismissInviteUsersScreen, .roomMembersList):
break break
case (.room, .presentReportContent, .reportContent(let itemID, let senderID)): case (.room, .presentReportContent, .reportContent(let itemID, let senderID, _)):
presentReportContent(for: itemID, from: senderID) presentReportContent(for: itemID, from: senderID)
case (.reportContent, .dismissReportContent, .room): case (.reportContent, .dismissReportContent, .room):
break break
case (.room, .presentMediaUploadPicker, .mediaUploadPicker(let source)): case (.room, .presentMediaUploadPicker, .mediaUploadPicker(let source, _)):
presentMediaUploadPickerWithSource(source) presentMediaUploadPickerWithSource(source)
case (.mediaUploadPicker, .dismissMediaUploadPicker, .room): case (.mediaUploadPicker, .dismissMediaUploadPicker, .room):
break break
case (.mediaUploadPicker, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL)): case (.mediaUploadPicker, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated) presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (.room, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL)): case (.room, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated) presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (.mediaUploadPreview, .dismissMediaUploadPreview, .room): case (.mediaUploadPreview, .dismissMediaUploadPreview, .room):
break break
case (_, .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, _): case (.emojiPicker, .dismissEmojiPicker, _):
break break
@@ -57,18 +57,18 @@ extension RoomFlowCoordinator {
case roomMemberDetails(userID: String, previousState: State) case roomMemberDetails(userID: String, previousState: State)
case userProfile(userID: String, previousState: State) case userProfile(userID: String, previousState: State)
case inviteUsersScreen(previousState: State) case inviteUsersScreen(previousState: State)
case mediaUploadPicker(source: MediaPickerScreenSource) case mediaUploadPicker(source: MediaPickerScreenSource, previousState: State)
case mediaUploadPreview(fileURL: URL) case mediaUploadPreview(fileURL: URL, previousState: State)
case emojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>) case emojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>, previousState: State)
case mapNavigator case mapNavigator(previousState: State)
case messageForwarding(forwardingItem: MessageForwardingItem) case messageForwarding(forwardingItem: MessageForwardingItem, previousState: State)
case reportContent(itemID: TimelineItemIdentifier, senderID: String) case reportContent(itemID: TimelineItemIdentifier, senderID: String, previousState: State)
case pollForm case pollForm(previousState: State)
case pollsHistory case pollsHistory
case pollsHistoryForm case pollsHistoryForm
case rolesAndPermissions case rolesAndPermissions
case pinnedEventsTimeline(previousState: State) case pinnedEventsTimeline(previousState: State)
case resolveSendFailure case resolveSendFailure(previousState: State)
case knockRequestsList(previousState: State) case knockRequestsList(previousState: State)
case mediaEventsTimeline(previousState: State) case mediaEventsTimeline(previousState: State)
case securityAndPrivacy(previousState: State) case securityAndPrivacy(previousState: State)
@@ -182,41 +182,27 @@ extension RoomFlowCoordinator {
return .complete return .complete
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, previousState: fromState)
case (.reportContent, .dismissReportContent):
return .room
case (.room, .presentMediaUploadPicker(let source)): case (.room, .presentMediaUploadPicker(let source)):
return .mediaUploadPicker(source: source) return .mediaUploadPicker(source: source, previousState: fromState)
case (.mediaUploadPicker, .dismissMediaUploadPicker):
return .room
case (.mediaUploadPicker, .presentMediaUploadPreview(let fileURL)): case (.mediaUploadPicker, .presentMediaUploadPreview(let fileURL)):
return .mediaUploadPreview(fileURL: fileURL) return .mediaUploadPreview(fileURL: fileURL, previousState: fromState)
case (.room, .presentMediaUploadPreview(let fileURL)): case (.room, .presentMediaUploadPreview(let fileURL)):
return .mediaUploadPreview(fileURL: fileURL) return .mediaUploadPreview(fileURL: fileURL, previousState: fromState)
case (.mediaUploadPreview, .dismissMediaUploadPreview):
return .room
case (.room, .presentEmojiPicker(let itemID, let selectedEmoji)): case (.room, .presentEmojiPicker(let itemID, let selectedEmoji)):
return .emojiPicker(itemID: itemID, selectedEmojis: selectedEmoji) return .emojiPicker(itemID: itemID, selectedEmojis: selectedEmoji, previousState: fromState)
case (.emojiPicker, .dismissEmojiPicker):
return .room
case (.room, .presentMessageForwarding(let forwardingItem)): case (.room, .presentMessageForwarding(let forwardingItem)):
return .messageForwarding(forwardingItem: forwardingItem) return .messageForwarding(forwardingItem: forwardingItem, previousState: fromState)
case (.messageForwarding, .dismissMessageForwarding):
return .room
case (.room, .presentMapNavigator): case (.room, .presentMapNavigator):
return .mapNavigator return .mapNavigator(previousState: fromState)
case (.mapNavigator, .dismissMapNavigator):
return .room
case (.room, .presentPollForm): case (.room, .presentPollForm):
return .pollForm return .pollForm(previousState: fromState)
case (.pollForm, .dismissPollForm):
return .room
case (.room, .presentPinnedEventsTimeline): case (.room, .presentPinnedEventsTimeline):
return .pinnedEventsTimeline(previousState: fromState) return .pinnedEventsTimeline(previousState: fromState)
@@ -226,16 +212,61 @@ extension RoomFlowCoordinator {
return previousState return previousState
case (.room, .presentResolveSendFailure): case (.room, .presentResolveSendFailure):
return .resolveSendFailure return .resolveSendFailure(previousState: fromState)
case (.resolveSendFailure, .dismissResolveSendFailure):
return .room
// Thread // Thread
case (_, .presentThread(let itemID)): case (.room, .presentThread(let itemID)):
return .thread(itemID: itemID) return .thread(itemID: itemID)
case (_, .dismissThread): case (.thread, .dismissThread):
return .room return .room
case (.thread, .presentReportContent(let itemID, let senderID)):
return .reportContent(itemID: itemID, senderID: senderID, previousState: fromState)
case (.thread, .presentMediaUploadPicker(let source)):
return .mediaUploadPicker(source: source, previousState: fromState)
case (.thread, .presentMediaUploadPreview(let fileURL)):
return .mediaUploadPreview(fileURL: fileURL, previousState: fromState)
case (.thread, .presentEmojiPicker(let itemID, let selectedEmoji)):
return .emojiPicker(itemID: itemID, selectedEmojis: selectedEmoji, previousState: fromState)
case (.thread, .presentMessageForwarding(let forwardingItem)):
return .messageForwarding(forwardingItem: forwardingItem, previousState: fromState)
case (.thread, .presentMapNavigator):
return .mapNavigator(previousState: fromState)
case (.thread, .presentPollForm):
return .pollForm(previousState: fromState)
case (.thread, .presentResolveSendFailure):
return .resolveSendFailure(previousState: fromState)
// Room + Thread
case (.mediaUploadPicker(_, let previousState), .dismissMediaUploadPicker):
return previousState
case (.emojiPicker(_, _, let previouState), .dismissEmojiPicker):
return previouState
case (.reportContent(_, _, let previousState), .dismissReportContent):
return previousState
case (.messageForwarding(_, let previousState), .dismissMessageForwarding):
return previousState
case (.mapNavigator(let previousState), .dismissMapNavigator):
return previousState
case (.pollForm(let previousState), .dismissPollForm):
return previousState
case (.resolveSendFailure(let previousState), .dismissResolveSendFailure):
return previousState
// Room Details // Room Details
case (.initial, .presentRoomDetails): case (.initial, .presentRoomDetails):
@@ -319,6 +350,9 @@ extension RoomFlowCoordinator {
case (.knockRequestsList(let previousState), .dismissKnockRequestsListScreen): case (.knockRequestsList(let previousState), .dismissKnockRequestsListScreen):
return previousState return previousState
case (.mediaUploadPreview(_, let previousState), .dismissMediaUploadPreview):
return previousState
case (.notificationSettings, .presentGlobalNotificationSettingsScreen): case (.notificationSettings, .presentGlobalNotificationSettingsScreen):
return .globalNotificationSettings return .globalNotificationSettings
case (.globalNotificationSettings, .dismissGlobalNotificationSettingsScreen): case (.globalNotificationSettings, .dismissGlobalNotificationSettingsScreen):