started implementing the logic behind the access type and the creation parameters

This commit is contained in:
Mauro Romito
2026-01-19 18:21:01 +01:00
committed by Mauro
parent cea365ac97
commit 204fa5b0ca
5 changed files with 109 additions and 18 deletions
@@ -29,6 +29,7 @@ struct CreateRoomScreenViewState: BindableState {
var roomName: String
let serverName: String
let isKnockingFeatureEnabled: Bool
let canSelectSpace: Bool
var aliasLocalPart: String
var bindings: CreateRoomScreenViewStateBindings
var avatarMediaInfo: MediaInfo? {
@@ -59,18 +60,46 @@ struct CreateRoomScreenViewState: BindableState {
}
}
var availableAccessTypes: [CreateRoomAccessType] {
var availableTypes = CreateRoomAccessType.allCases
if isSpace || !isKnockingFeatureEnabled {
availableTypes.removeAll { $0 == .askToJoin }
var selectedSpace: SpaceServiceRoomProtocol?
var availableAccessTypes: [CreateRoomScreenAccessType] {
var availableAccessTypes: [CreateRoomScreenAccessType] = []
if isSpace {
availableAccessTypes = [.public]
} else if let selectedSpace, selectedSpace.joinRule != .public {
availableAccessTypes = [.spaceMembers]
if isKnockingFeatureEnabled {
availableAccessTypes.append(.askToJoinWithSpaceMembers)
}
} else {
availableAccessTypes = [.public]
if isKnockingFeatureEnabled {
availableAccessTypes.append(.askToJoin)
}
}
availableAccessTypes.append(.private)
return availableAccessTypes
}
var roomAccessType: CreateRoomAccessType {
switch bindings.selectedAccessType {
case .public:
return .public
case .spaceMembers:
return .spaceMembers(spaceID: selectedSpace?.id ?? "")
case .askToJoinWithSpaceMembers:
return .askToJoinWithSpaceMembers(spaceID: selectedSpace?.id ?? "")
case .askToJoin:
return .askToJoin
case .private:
return .private
}
return availableTypes
}
}
struct CreateRoomScreenViewStateBindings {
var roomTopic: String
var selectedAccessType: CreateRoomAccessType
var selectedAccessType: CreateRoomScreenAccessType
var showAttachmentConfirmationDialog = false
/// Information describing the currently displayed alert.
@@ -102,3 +131,11 @@ extension Set<CreateRoomScreenAliasErrorState> {
return nil
}
}
enum CreateRoomScreenAccessType {
case `public`
case spaceMembers
case askToJoinWithSpaceMembers
case askToJoin
case `private`
}