Fixes #2518, fixes #2590 - Implement public room search list paginati… (#2607)

* Fixes #2518, fixes #2590 - Implement public room search list pagination and room joining

* Address PR comments
This commit is contained in:
Stefan Ceriu
2024-03-27 10:50:53 +02:00
committed by GitHub
parent d72fa02ac6
commit be9cf8713e
16 changed files with 248 additions and 59 deletions
@@ -577,14 +577,19 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
// MARK: Room Directory Search
private func presentRoomDirectorySearch() {
let coordinator = RoomDirectorySearchScreenCoordinator(parameters: .init(roomDirectorySearchProxy: userSession.clientProxy.roomDirectorySearchProxy(),
let coordinator = RoomDirectorySearchScreenCoordinator(parameters: .init(clientProxy: userSession.clientProxy,
imageProvider: userSession.mediaProvider,
userIndicatorController: ServiceLocator.shared.userIndicatorController))
coordinator.actionsPublisher.sink { [weak self] action in
guard let self else { return }
switch action {
case .joined(let roomID):
stateMachine.processEvent(.dismissedRoomDirectorySearchScreen)
handleAppRoute(.room(roomID: roomID), animated: true)
case .dismiss:
self?.stateMachine.processEvent(.dismissedRoomDirectorySearchScreen(joinedRoomID: nil))
stateMachine.processEvent(.dismissedRoomDirectorySearchScreen)
}
}
.store(in: &cancellables)
@@ -86,7 +86,8 @@ class UserSessionFlowCoordinatorStateMachine {
case dismissedLogoutConfirmationScreen
case showRoomDirectorySearchScreen
case dismissedRoomDirectorySearchScreen(joinedRoomID: String?)
case dismissedRoomDirectorySearchScreen
}
private let stateMachine: StateMachine<State, Event>
@@ -144,10 +145,7 @@ class UserSessionFlowCoordinatorStateMachine {
case (.roomList(let selectedRoomID), .showRoomDirectorySearchScreen):
return .roomDirectorySearchScreen(selectedRoomID: selectedRoomID)
case (.roomDirectorySearchScreen(let selectedRoomID), .dismissedRoomDirectorySearchScreen(let joinedRoomID)):
if let joinedRoomID {
return .roomList(selectedRoomID: joinedRoomID)
}
case (.roomDirectorySearchScreen(let selectedRoomID), .dismissedRoomDirectorySearchScreen):
return .roomList(selectedRoomID: selectedRoomID)
default: