mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 03:06:37 +00:00
3dccdf6685
* Add the menu entries to add/remove rooms to/from a space. * Add a user indicator to SpaceAddRoomsScreen. * Reset the SpaceRoomListProxy after adding/removing any children. * Calm the animations down a bit when entering EditMode on the SpaceScreen.
76 lines
2.2 KiB
Swift
76 lines
2.2 KiB
Swift
//
|
|
// Copyright 2025 Element Creations Ltd.
|
|
// Copyright 2025 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
enum SpaceScreenViewModelAction {
|
|
case selectSpace(SpaceRoomListProxyProtocol)
|
|
case selectUnjoinedSpace(SpaceServiceRoomProtocol)
|
|
case selectRoom(roomID: String)
|
|
case leftSpace
|
|
case presentRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol)
|
|
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
|
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
|
case addExistingChildren
|
|
}
|
|
|
|
struct SpaceScreenViewState: BindableState {
|
|
var space: SpaceServiceRoomProtocol
|
|
|
|
var permalink: URL?
|
|
var roomProxy: JoinedRoomProxyProtocol?
|
|
|
|
var isPaginating = false
|
|
var rooms: [SpaceServiceRoomProtocol]
|
|
var selectedSpaceRoomID: String?
|
|
var joiningRoomIDs: Set<String> = []
|
|
|
|
var canEditBaseInfo = false
|
|
var canEditRolesAndPermissions = false
|
|
var canEditSecurityAndPrivacy = false
|
|
var canEditChildren = false
|
|
|
|
var editMode: EditMode = .inactive
|
|
var editModeSelectedIDs: Set<String> = []
|
|
|
|
var bindings = SpaceScreenViewStateBindings()
|
|
|
|
var visibleRooms: [SpaceServiceRoomProtocol] {
|
|
if editMode == .inactive {
|
|
rooms
|
|
} else {
|
|
rooms.filter { !$0.isSpace }
|
|
}
|
|
}
|
|
|
|
var isSpaceManagementEnabled: Bool {
|
|
canEditBaseInfo || canEditRolesAndPermissions || canEditSecurityAndPrivacy
|
|
}
|
|
|
|
func isSpaceIDSelected(_ spaceID: String) -> Bool {
|
|
selectedSpaceRoomID == spaceID || editModeSelectedIDs.contains(spaceID)
|
|
}
|
|
}
|
|
|
|
struct SpaceScreenViewStateBindings {
|
|
var isPresentingRemoveChildrenConfirmation = false
|
|
var leaveSpaceViewModel: LeaveSpaceViewModel?
|
|
}
|
|
|
|
enum SpaceScreenViewAction {
|
|
case spaceAction(SpaceRoomCell.Action)
|
|
case leaveSpace
|
|
case spaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
|
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
|
case addExistingRooms
|
|
case manageChildren
|
|
case removeSelectedChildren
|
|
case confirmRemoveSelectedChildren
|
|
case finishManagingChildren
|
|
}
|