added the create button in the empty state of the space screen and refactored some code

This commit is contained in:
Mauro Romito
2026-01-22 17:18:12 +01:00
committed by Mauro
parent d012380b01
commit ab1ed9e671
18 changed files with 96 additions and 70 deletions
@@ -143,6 +143,6 @@ enum CreateRoomScreenAccessType {
}
enum CreateRoomScreenSpaceSelectionMode {
case list
case selected(SpaceServiceRoomProtocol)
case editableSpacesList
case preSelected(SpaceServiceRoomProtocol)
}
@@ -42,9 +42,9 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen
var selectedSpace: SpaceServiceRoomProtocol?
var canSelectSpace = false
switch spaceSelectionMode {
case .list:
case .editableSpacesList:
canSelectSpace = true
case .selected(let value):
case .preSelected(let value):
selectedSpace = value
case .none:
break
@@ -378,9 +378,9 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
return viewModel
}()
static let selectedSpaceViewModel = makeViewModel(selectionMode: .selected(SpaceServiceRoomMock(.init(name: "Awesome Space",
isSpace: true,
joinRule: .private))))
static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoomMock(.init(name: "Awesome Space",
isSpace: true,
joinRule: .private))))
static let selectedSpaceWithListViewModel = {
let viewModel = makeViewModel()
@@ -390,9 +390,9 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
static let selectedSpaceWithAskToJoinViewModel = {
let viewModel = makeViewModel(isKnockingEnabled: true,
selectionMode: .selected(SpaceServiceRoomMock(.init(name: "Awesome Space",
isSpace: true,
joinRule: .private))))
selectionMode: .preSelected(SpaceServiceRoomMock(.init(name: "Awesome Space",
isSpace: true,
joinRule: .private))))
viewModel.context.selectedAccessType = .askToJoinWithSpaceMembers
return viewModel
}()
@@ -460,7 +460,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
private static func makeViewModel(isKnockingEnabled: Bool = false,
isSpace: Bool = false,
selectionMode: CreateRoomScreenSpaceSelectionMode? = .list,
selectionMode: CreateRoomScreenSpaceSelectionMode? = .editableSpacesList,
isAliasAvailable: Bool = true) -> CreateRoomScreenViewModel {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
@@ -75,7 +75,7 @@ struct CreateRoomSpaceSelectionSheet_Previews: PreviewProvider, TestablePreview
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
return CreateRoomScreenViewModel(isSpace: false,
spaceSelectionMode: .list,
spaceSelectionMode: .editableSpacesList,
shouldShowCancelButton: false,
userSession: userSession,
analytics: ServiceLocator.shared.analytics,
@@ -76,7 +76,12 @@ struct SpaceScreen: View {
}
.buttonStyle(.compound(.primary))
// @Velin92 Create Room button goes here.
if context.viewState.canCreateRoom {
Button(L10n.actionCreateRoom) {
context.send(viewAction: .createChildRoom)
}
.buttonStyle(.compound(.secondary))
}
}
.padding(.horizontal, 16)
}
@@ -123,7 +128,7 @@ struct SpaceScreen: View {
Section {
if context.viewState.canCreateRoom {
Button { context.send(viewAction: .createChildRoom) } label: {
Label(L10n.actionCreateARoom, icon: \.plus)
Label(L10n.actionCreateRoom, icon: \.plus)
}
}
Button { context.send(viewAction: .addExistingRooms) } label: {
@@ -195,7 +200,9 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview {
SpaceScreen(context: newSpaceViewModel.context)
}
.previewDisplayName("New Space")
.snapshotPreferences(expect: newSpaceViewModel.context.observe(\.viewState.shouldShowEmptyState))
.snapshotPreferences(expect: newSpaceViewModel.context.observe(\.viewState).map {
$0.canCreateRoom && $0.canEditChildren
})
}
static func makeViewModel(isManagingRooms: Bool = false, isNewSpace: Bool = false) -> SpaceScreenViewModel {