Navigate to the Pinned events timeline (#3139)

This commit is contained in:
Mauro
2024-08-08 18:29:39 +02:00
committed by GitHub
parent 0ad8f3cae8
commit ed7d3b0b13
65 changed files with 655 additions and 156 deletions
@@ -325,7 +325,19 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
return .pollForm
case (.pollForm, .dismissPollForm):
return .room
case (.room, .presentPinnedEventsTimeline):
return .pinnedEventsTimeline(previousState: .room)
case (.roomDetails(let isRoot), .presentPinnedEventsTimeline):
return .pinnedEventsTimeline(previousState: .details(isRoot: isRoot))
case (.pinnedEventsTimeline(let previousState), .dismissPinnedEventsTimeline):
switch previousState {
case .room:
return .room
case .details(let isRoot):
return .roomDetails(isRoot: isRoot)
}
case (.roomDetails, .presentPollsHistory):
return .pollsHistory
case (.pollsHistory, .dismissPollsHistory):
@@ -457,11 +469,21 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
presentPollForm(mode: mode)
case (.pollForm, .dismissPollForm, .room):
break
case (.room, .presentPinnedEventsTimeline, .pinnedEventsTimeline):
presentPinnedEventsTimeline()
case (.pinnedEventsTimeline, .dismissPinnedEventsTimeline, .room):
break
case (.roomDetails, .presentPollsHistory, .pollsHistory):
presentPollsHistory()
case (.pollsHistory, .dismissPollsHistory, .roomDetails):
break
case (.roomDetails, .presentPinnedEventsTimeline, .pinnedEventsTimeline):
presentPinnedEventsTimeline()
case (.pinnedEventsTimeline, .dismissPinnedEventsTimeline, .roomDetails):
break
case (.pollsHistory, .presentPollForm(let mode), .pollsHistoryForm):
presentPollForm(mode: mode)
@@ -595,6 +617,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
stateMachine.tryEvent(.presentMessageForwarding(forwardingItem: forwardingItem))
case .presentCallScreen:
actionsSubject.send(.presentCallScreen(roomProxy: roomProxy))
case .presentPinnedEventsTimeline:
stateMachine.tryEvent(.presentPinnedEventsTimeline)
}
}
.store(in: &cancellables)
@@ -693,7 +717,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
analyticsService: analytics,
userIndicatorController: userIndicatorController,
notificationSettings: userSession.clientProxy.notificationSettings,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()))
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
appMediator: appMediator)
let coordinator = RoomDetailsScreenCoordinator(parameters: params)
coordinator.actions.sink { [weak self] action in
guard let self else { return }
@@ -715,6 +740,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
stateMachine.tryEvent(.presentRolesAndPermissionsScreen)
case .presentCall:
actionsSubject.send(.presentCallScreen(roomProxy: roomProxy))
case .presentPinnedEventsTimeline:
stateMachine.tryEvent(.presentPinnedEventsTimeline)
}
}
.store(in: &cancellables)
@@ -937,6 +964,28 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
self?.stateMachine.tryEvent(.dismissMapNavigator)
}
}
private func presentPinnedEventsTimeline() {
let stackCoordinator = NavigationStackCoordinator()
let coordinator = PinnedEventsTimelineScreenCoordinator(parameters: .init())
coordinator.actions
.sink { [weak self] action in
guard let self else { return }
switch action {
case .dismiss:
navigationStackCoordinator.setSheetCoordinator(nil)
}
}
.store(in: &cancellables)
stackCoordinator.setRootCoordinator(coordinator)
navigationStackCoordinator.setSheetCoordinator(stackCoordinator) { [weak self] in
self?.stateMachine.tryEvent(.dismissPinnedEventsTimeline)
}
}
private func presentPollForm(mode: PollFormMode) {
let stackCoordinator = NavigationStackCoordinator()
@@ -1356,6 +1405,7 @@ private extension RoomFlowCoordinator {
case pollsHistory
case pollsHistoryForm
case rolesAndPermissions
case pinnedEventsTimeline(previousState: PinnedEventsTimelineSource)
/// A child flow is in progress.
case presentingChild(childRoomID: String, previousState: State)
@@ -1425,6 +1475,9 @@ private extension RoomFlowCoordinator {
case presentRolesAndPermissionsScreen
case dismissRolesAndPermissionsScreen
case presentPinnedEventsTimeline
case dismissPinnedEventsTimeline
// Child room flow events
case startChildFlow(roomID: String, via: [String], entryPoint: RoomFlowCoordinatorEntryPoint)
case dismissChildFlow
@@ -1447,3 +1500,8 @@ private extension Result {
}
}
}
private enum PinnedEventsTimelineSource: Hashable {
case room
case details(isRoot: Bool)
}
@@ -602,7 +602,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
private func presentSecureBackupLogoutConfirmationScreen() {
let coordinator = SecureBackupLogoutConfirmationScreenCoordinator(parameters: .init(secureBackupController: userSession.clientProxy.secureBackupController,
networkMonitor: ServiceLocator.shared.networkMonitor))
appMediator: appMediator))
coordinator.actions
.sink { [weak self] action in