mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
implemented the flow to create room in a selected space
This commit is contained in:
@@ -29,6 +29,7 @@ enum SpaceScreenCoordinatorAction {
|
||||
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
||||
case displayRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol)
|
||||
case addExistingChildren
|
||||
case displayCreateChildRoomFlow(space: SpaceServiceRoomProtocol)
|
||||
}
|
||||
|
||||
final class SpaceScreenCoordinator: CoordinatorProtocol {
|
||||
@@ -75,6 +76,8 @@ final class SpaceScreenCoordinator: CoordinatorProtocol {
|
||||
actionsSubject.send(.displayRolesAndPermissions(roomProxy: roomProxy))
|
||||
case .addExistingChildren:
|
||||
actionsSubject.send(.addExistingChildren)
|
||||
case .displayCreateChildRoomFlow(let space):
|
||||
actionsSubject.send(.displayCreateChildRoomFlow(space: space))
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
@@ -17,6 +17,7 @@ enum SpaceScreenViewModelAction {
|
||||
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
||||
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
||||
case addExistingChildren
|
||||
case displayCreateChildRoomFlow(space: SpaceServiceRoomProtocol)
|
||||
}
|
||||
|
||||
struct SpaceScreenViewState: BindableState {
|
||||
@@ -34,6 +35,7 @@ struct SpaceScreenViewState: BindableState {
|
||||
var canEditRolesAndPermissions = false
|
||||
var canEditSecurityAndPrivacy = false
|
||||
var canEditChildren = false
|
||||
var canCreateRoom = false
|
||||
|
||||
var editMode: EditMode = .inactive
|
||||
var editModeSelectedIDs: Set<String> = []
|
||||
@@ -72,6 +74,7 @@ enum SpaceScreenViewAction {
|
||||
case spaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
||||
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
||||
case addExistingRooms
|
||||
case createChildRoom
|
||||
case manageChildren
|
||||
case removeSelectedChildren
|
||||
case confirmRemoveSelectedChildren
|
||||
|
||||
@@ -75,6 +75,10 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
|
||||
.weakAssign(to: \.state.selectedSpaceRoomID, on: self)
|
||||
.store(in: &cancellables)
|
||||
|
||||
appSettings.$createSpaceEnabled
|
||||
.weakAssign(to: \.state.canCreateRoom, on: self)
|
||||
.store(in: &cancellables)
|
||||
|
||||
Task {
|
||||
if case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(spaceRoomListProxy.id) {
|
||||
// Required to listen for membership updates in the members flow
|
||||
@@ -155,6 +159,8 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
|
||||
} completion: {
|
||||
self.state.editModeSelectedIDs.removeAll()
|
||||
}
|
||||
case .createChildRoom:
|
||||
Task { await createChildRoom() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,6 +171,16 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func createChildRoom() async {
|
||||
switch await spaceServiceProxy.spaceForIdentifier(spaceID: spaceRoomListProxy.id) {
|
||||
case .success(.some(let space)):
|
||||
actionsSubject.send(.displayCreateChildRoomFlow(space: space))
|
||||
default:
|
||||
MXLog.error("Unable to create child room: space not found")
|
||||
userIndicatorController.submitIndicator(.init(title: L10n.errorUnknown))
|
||||
}
|
||||
}
|
||||
|
||||
private func join(_ spaceServiceRoom: SpaceServiceRoomProtocol) async {
|
||||
state.joiningRoomIDs.insert(spaceServiceRoom.id)
|
||||
defer { state.joiningRoomIDs.remove(spaceServiceRoom.id) }
|
||||
|
||||
@@ -121,6 +121,11 @@ struct SpaceScreen: View {
|
||||
Menu {
|
||||
if context.viewState.canEditChildren {
|
||||
Section {
|
||||
if context.viewState.canCreateRoom {
|
||||
Button { context.send(viewAction: .createChildRoom) } label: {
|
||||
Label(L10n.actionCreateARoom, icon: \.plus)
|
||||
}
|
||||
}
|
||||
Button { context.send(viewAction: .addExistingRooms) } label: {
|
||||
Label(L10n.actionAddExistingRooms, icon: \.room)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user