Make sure we pass the via parameters with all the routes.

Put the event ID first.

Fix tests.

Bump the SDK.
This commit is contained in:
Doug
2024-05-09 12:25:54 +01:00
committed by Stefan Ceriu
parent 52b6c25bd8
commit 1e0a6d76ae
23 changed files with 293 additions and 199 deletions
@@ -19,6 +19,7 @@ import SwiftUI
struct JoinRoomScreenCoordinatorParameters {
let roomID: String
let via: [String]
let clientProxy: ClientProxyProtocol
let mediaProvider: MediaProviderProtocol
let userIndicatorController: UserIndicatorControllerProtocol
@@ -44,6 +45,7 @@ final class JoinRoomScreenCoordinator: CoordinatorProtocol {
self.parameters = parameters
viewModel = JoinRoomScreenViewModel(roomID: parameters.roomID,
via: parameters.via,
clientProxy: parameters.clientProxy,
mediaProvider: parameters.mediaProvider,
userIndicatorController: parameters.userIndicatorController)
@@ -21,6 +21,7 @@ typealias JoinRoomScreenViewModelType = StateStoreViewModel<JoinRoomScreenViewSt
class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewModelProtocol {
private let roomID: String
private let via: [String]
private let clientProxy: ClientProxyProtocol
private let userIndicatorController: UserIndicatorControllerProtocol
@@ -30,10 +31,12 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
}
init(roomID: String,
via: [String],
clientProxy: ClientProxyProtocol,
mediaProvider: MediaProviderProtocol,
userIndicatorController: UserIndicatorControllerProtocol) {
self.roomID = roomID
self.via = via
self.clientProxy = clientProxy
self.userIndicatorController = userIndicatorController
@@ -74,6 +77,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
hideLoadingIndicator()
}
// We need an SDK update to pass the via into this preview.
switch await clientProxy.roomPreviewForIdentifier(roomID) {
case .success(let roomDetails):
state.roomDetails = roomDetails
@@ -89,7 +93,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
hideLoadingIndicator()
}
switch await clientProxy.joinRoom(roomID) {
switch await clientProxy.joinRoom(roomID, via: via) {
case .success:
actionsSubject.send(.joined)
case .failure(let error):
@@ -165,6 +165,7 @@ struct JoinRoomScreen_Previews: PreviewProvider, TestablePreview {
}
return JoinRoomScreenViewModel(roomID: "1",
via: [],
clientProxy: clientProxy,
mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController)
@@ -24,7 +24,8 @@ struct RoomDirectorySearchScreenCoordinatorParameters {
}
enum RoomDirectorySearchScreenCoordinatorAction {
case select(roomID: String)
case selectAlias(String)
case selectRoomID(String)
case dismiss
}
@@ -48,8 +49,10 @@ final class RoomDirectorySearchScreenCoordinator: CoordinatorProtocol {
viewModel.actionsPublisher.sink { [weak self] action in
guard let self else { return }
switch action {
case .select(let roomID):
actionsSubject.send(.select(roomID: roomID))
case .selectAlias(let alias):
actionsSubject.send(.selectAlias(alias))
case .selectRoomID(let roomID):
actionsSubject.send(.selectRoomID(roomID))
case .dismiss:
actionsSubject.send(.dismiss)
}
@@ -17,7 +17,8 @@
import Foundation
enum RoomDirectorySearchScreenViewModelAction {
case select(roomID: String)
case selectAlias(String)
case selectRoomID(String)
case dismiss
}
@@ -35,6 +36,6 @@ struct RoomDirectorySearchScreenViewStateBindings {
enum RoomDirectorySearchScreenViewAction {
case dismiss
case select(roomID: String)
case select(room: RoomDirectorySearchResult)
case reachedBottom
}
@@ -65,8 +65,12 @@ class RoomDirectorySearchScreenViewModel: RoomDirectorySearchScreenViewModelType
switch viewAction {
case .dismiss:
actionsSubject.send(.dismiss)
case .select(roomID: let roomID):
actionsSubject.send(.select(roomID: roomID))
case .select(let room):
if let alias = room.alias {
actionsSubject.send(.selectAlias(alias))
} else {
actionsSubject.send(.selectRoomID(room.id))
}
case .reachedBottom:
loadNextPage()
}
@@ -26,7 +26,7 @@ struct RoomDirectorySearchScreen: View {
Section {
ForEach(context.viewState.rooms) { room in
RoomDirectorySearchCell(result: room, imageProvider: context.imageProvider) {
context.send(viewAction: .select(roomID: room.id))
context.send(viewAction: .select(room: room))
}
}
} footer: {