mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:02:10 +00:00
added the create button in the empty state of the space screen and refactored some code
This commit is contained in:
@@ -225,7 +225,7 @@ class SpacesTabFlowCoordinator: FlowCoordinatorProtocol {
|
||||
.store(in: &cancellables)
|
||||
|
||||
navigationSplitCoordinator.setSheetCoordinator(coordinator) { [weak self] in
|
||||
self?.stateMachine.tryEvent(.dismissedCreateSpaceFlow)
|
||||
self?.stateMachine.tryEvent(.dismissedCreateSpaceFlow, userInfo: spaceRoomListProxy)
|
||||
}
|
||||
|
||||
flowCoordinator.start(animated: true)
|
||||
|
||||
@@ -141,14 +141,17 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case .startChat:
|
||||
presentStartChatScreen()
|
||||
case .createSpace:
|
||||
presentCreateRoomScreen(isSpace: true, isRoot: true)
|
||||
presentCreateRoomScreen(isSpace: true, spaceSelectionMode: nil, isRoot: true)
|
||||
case .createRoomInSpace(let space):
|
||||
presentCreateRoomScreen(isSpace: false, selectedSpace: space, isRoot: true)
|
||||
presentCreateRoomScreen(isSpace: false, spaceSelectionMode: .preSelected(space), isRoot: true)
|
||||
}
|
||||
}
|
||||
|
||||
stateMachine.addRoutes(event: .createRoom, transitions: [.startChat => .createRoom]) { [weak self] _ in
|
||||
self?.presentCreateRoomScreen(isSpace: false, isRoot: false)
|
||||
guard let self else { return }
|
||||
presentCreateRoomScreen(isSpace: false,
|
||||
spaceSelectionMode: flowParameters.appSettings.createSpaceEnabled ? .editableSpacesList : nil,
|
||||
isRoot: false)
|
||||
}
|
||||
stateMachine.addRoutes(event: .dismissedCreateRoom, transitions: [.createRoom => .startChat]) { [weak self] _ in
|
||||
self?.createRoomScreenCoordinator = nil
|
||||
@@ -204,15 +207,9 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol {
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
}
|
||||
|
||||
private func presentCreateRoomScreen(isSpace: Bool, selectedSpace: SpaceServiceRoomProtocol? = nil, isRoot: Bool) {
|
||||
let spaceSelectionMode: CreateRoomScreenSpaceSelectionMode? = if let selectedSpace {
|
||||
.selected(selectedSpace)
|
||||
} else if !isSpace, flowParameters.appSettings.createSpaceEnabled {
|
||||
.list
|
||||
} else {
|
||||
nil
|
||||
}
|
||||
|
||||
private func presentCreateRoomScreen(isSpace: Bool,
|
||||
spaceSelectionMode: CreateRoomScreenSpaceSelectionMode?,
|
||||
isRoot: Bool) {
|
||||
let createParameters = CreateRoomScreenCoordinatorParameters(isSpace: isSpace,
|
||||
spaceSelectionMode: spaceSelectionMode,
|
||||
shouldShowCancelButton: isRoot,
|
||||
|
||||
@@ -169,7 +169,7 @@ internal enum L10n {
|
||||
/// Create
|
||||
internal static var actionCreate: String { return L10n.tr("Localizable", "action_create") }
|
||||
/// Create room
|
||||
internal static var actionCreateARoom: String { return L10n.tr("Localizable", "action_create_a_room") }
|
||||
internal static var actionCreateRoom: String { return L10n.tr("Localizable", "action_create_room") }
|
||||
/// Create space
|
||||
internal static var actionCreateSpace: String { return L10n.tr("Localizable", "action_create_space") }
|
||||
/// Deactivate
|
||||
@@ -640,6 +640,8 @@ internal enum L10n {
|
||||
internal static var commonReportSubmitted: String { return L10n.tr("Localizable", "common_report_submitted") }
|
||||
/// Rich text editor
|
||||
internal static var commonRichTextEditor: String { return L10n.tr("Localizable", "common_rich_text_editor") }
|
||||
/// Role
|
||||
internal static var commonRole: String { return L10n.tr("Localizable", "common_role") }
|
||||
/// Room
|
||||
internal static var commonRoom: String { return L10n.tr("Localizable", "common_room") }
|
||||
/// Room name
|
||||
@@ -3149,6 +3151,8 @@ internal enum L10n {
|
||||
internal static var screenSignoutSaveRecoveryKeySubtitle: String { return L10n.tr("Localizable", "screen_signout_save_recovery_key_subtitle") }
|
||||
/// Have you saved your recovery key?
|
||||
internal static var screenSignoutSaveRecoveryKeyTitle: String { return L10n.tr("Localizable", "screen_signout_save_recovery_key_title") }
|
||||
/// Room
|
||||
internal static var screenSpaceAddRoomAction: String { return L10n.tr("Localizable", "screen_space_add_room_action") }
|
||||
/// Adding a room will not affect the room access. To change the access go to Room settings > Security & privacy.
|
||||
internal static var screenSpaceAddRoomsRoomAccessDescription: String { return L10n.tr("Localizable", "screen_space_add_rooms_room_access_description") }
|
||||
/// View spaces you've created or joined
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -98,7 +98,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol {
|
||||
return .failure(.sdkError(error))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func handleSpaceListUpdates(_ updates: [SpaceListUpdate]) {
|
||||
|
||||
Reference in New Issue
Block a user