always present the space selection even for pre selected spaces

This commit is contained in:
Mauro Romito
2026-02-10 13:22:10 +01:00
committed by Mauro
parent da0fce5123
commit 3a499e44eb
15 changed files with 50 additions and 47 deletions

View File

@@ -137,20 +137,20 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol {
self?.presentStartChatScreen()
}
stateMachine.addRoutes(event: .createRoom(isSpace: true), transitions: [.initial => .createRoom]) { [weak self] _ in
self?.presentCreateRoomScreen(isSpace: true, spaceSelectionMode: nil, isRoot: true)
self?.presentCreateRoomScreen(isSpace: true, spaceSelectionMode: .none, isRoot: true)
}
stateMachine.addRoutes(event: .createRoom(isSpace: false), transitions: [.initial => .createRoom]) { [weak self] context in
guard context.fromState == .initial else { return } // Required check because the event is used in another route.
guard let space = context.userInfo as? SpaceServiceRoom else {
fatalError("This transition only supports creating a room in a pre-selected space.")
}
self?.presentCreateRoomScreen(isSpace: false, spaceSelectionMode: .preSelected(space), isRoot: true)
self?.presentCreateRoomScreen(isSpace: false, spaceSelectionMode: .editableSpacesList(preSelectedSpace: space), isRoot: true)
}
stateMachine.addRoutes(event: .createRoom(isSpace: false), transitions: [.startChat => .createRoom]) { [weak self] context in
guard let self, context.fromState == .startChat else { return } // Required check because the event is used in another route.
presentCreateRoomScreen(isSpace: false,
spaceSelectionMode: flowParameters.appSettings.createSpaceEnabled ? .editableSpacesList : nil,
spaceSelectionMode: flowParameters.appSettings.createSpaceEnabled ? .editableSpacesList(preSelectedSpace: nil) : .none,
isRoot: false)
}
stateMachine.addRoutes(event: .dismissedCreateRoom, transitions: [.createRoom => .startChat]) { [weak self] _ in
@@ -208,7 +208,7 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol {
}
private func presentCreateRoomScreen(isSpace: Bool,
spaceSelectionMode: CreateRoomScreenSpaceSelectionMode?,
spaceSelectionMode: CreateRoomScreenSpaceSelectionMode,
isRoot: Bool) {
let createParameters = CreateRoomScreenCoordinatorParameters(isSpace: isSpace,
spaceSelectionMode: spaceSelectionMode,

View File

@@ -11,7 +11,7 @@ import SwiftUI
struct CreateRoomScreenCoordinatorParameters {
let isSpace: Bool
let spaceSelectionMode: CreateRoomScreenSpaceSelectionMode?
let spaceSelectionMode: CreateRoomScreenSpaceSelectionMode
let shouldShowCancelButton: Bool
let userSession: UserSessionProtocol
let userIndicatorController: UserIndicatorControllerProtocol

View File

@@ -143,6 +143,6 @@ enum CreateRoomScreenAccessType {
}
enum CreateRoomScreenSpaceSelectionMode {
case editableSpacesList
case preSelected(SpaceServiceRoom)
case editableSpacesList(preSelectedSpace: SpaceServiceRoom?)
case none
}

View File

@@ -28,7 +28,7 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen
}
init(isSpace: Bool,
spaceSelectionMode: CreateRoomScreenSpaceSelectionMode?,
spaceSelectionMode: CreateRoomScreenSpaceSelectionMode,
shouldShowCancelButton: Bool,
userSession: UserSessionProtocol,
analytics: AnalyticsService,
@@ -40,18 +40,19 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen
self.userIndicatorController = userIndicatorController
var selectedSpace: SpaceServiceRoom?
var canSelectSpace = false
let canSelectSpace: Bool
var selectedAccessType = CreateRoomScreenAccessType.private
switch spaceSelectionMode {
case .editableSpacesList:
case .editableSpacesList(let preSelectedSpace):
canSelectSpace = true
case .preSelected(let value):
selectedSpace = value
if value.joinRule != .public {
selectedAccessType = .spaceMembers
if let preSelectedSpace {
selectedSpace = preSelectedSpace
if preSelectedSpace.joinRule != .public {
selectedAccessType = .spaceMembers
}
}
case .none:
break
canSelectSpace = false
}
let bindings = CreateRoomScreenViewStateBindings(roomTopic: "",

View File

@@ -337,10 +337,10 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
return viewModel
}()
static let spaceViewModel = makeViewModel(isSpace: true, selectionMode: nil)
static let spaceViewModel = makeViewModel(isSpace: true, selectionMode: .none)
static let spaceWithAvatarViewModel = {
let viewModel = makeViewModel(isSpace: true, selectionMode: nil)
let viewModel = makeViewModel(isSpace: true, selectionMode: .none)
viewModel.updateAvatar(fileURL: Bundle.main.url(forResource: "preview_avatar_room", withExtension: "jpg") ?? .picturesDirectory)
return viewModel
}()
@@ -371,9 +371,10 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
return viewModel
}()
static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space",
isSpace: true,
joinRule: .invite)))
static let selectedSpaceViewModel = makeViewModel(selectionMode: .editableSpacesList(preSelectedSpace: SpaceServiceRoom.mock(id: "awesome-space-id",
name: "Awesome Space",
isSpace: true,
joinRule: .invite)))
static let selectedSpaceWithListViewModel = {
let viewModel = makeViewModel()
@@ -383,9 +384,10 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
static let selectedSpaceWithAskToJoinViewModel = {
let viewModel = makeViewModel(isKnockingEnabled: true,
selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space",
isSpace: true,
joinRule: .invite)))
selectionMode: .editableSpacesList(preSelectedSpace: SpaceServiceRoom.mock(id: "awesome-space-id",
name: "Awesome Space",
isSpace: true,
joinRule: .invite)))
viewModel.context.selectedAccessType = .askToJoinWithSpaceMembers
return viewModel
}()
@@ -453,7 +455,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
private static func makeViewModel(isKnockingEnabled: Bool = false,
isSpace: Bool = false,
selectionMode: CreateRoomScreenSpaceSelectionMode? = .editableSpacesList,
selectionMode: CreateRoomScreenSpaceSelectionMode = .editableSpacesList(preSelectedSpace: nil),
isAliasAvailable: Bool = true) -> CreateRoomScreenViewModel {
AppSettings.resetAllSettings()
let appSettings = AppSettings()

View File

@@ -68,7 +68,7 @@ struct CreateRoomSpaceSelectionSheet_Previews: PreviewProvider, TestablePreview
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
return CreateRoomScreenViewModel(isSpace: false,
spaceSelectionMode: .editableSpacesList,
spaceSelectionMode: .editableSpacesList(preSelectedSpace: nil),
shouldShowCancelButton: false,
userSession: userSession,
analytics: ServiceLocator.shared.analytics,