mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
implemented the ask to join restricted rule join UI, and added tests and previews for it.
This commit is contained in:
+40
-5
@@ -74,6 +74,14 @@ struct SecurityAndPrivacyScreenViewState: BindableState {
|
||||
isSpaceSettingsEnabled && selectableSpacesCount > 0
|
||||
}
|
||||
|
||||
var isAskToJoinWithSpaceMembersOptionAvailable: Bool {
|
||||
currentSettings.accessType.isAskToJoinWithSpaceUsers || isAskToJoinWithSpaceMembersOptionSelectable
|
||||
}
|
||||
|
||||
var isAskToJoinWithSpaceMembersOptionSelectable: Bool {
|
||||
isSpaceMembersOptionSelectable && isKnockingEnabled
|
||||
}
|
||||
|
||||
var spaceMembersDescription: String {
|
||||
if isSpaceMembersOptionSelectable {
|
||||
switch spaceSelection {
|
||||
@@ -89,10 +97,27 @@ struct SecurityAndPrivacyScreenViewState: BindableState {
|
||||
}
|
||||
}
|
||||
|
||||
var askToJoinWithSpaceMembersDescription: String {
|
||||
if isAskToJoinWithSpaceMembersOptionSelectable {
|
||||
switch spaceSelection {
|
||||
case .singleJoined(let joinedParentSpace):
|
||||
L10n.screenSecurityAndPrivacyAskToJoinSingleSpaceMembersOptionDescription(joinedParentSpace.name)
|
||||
case .singleUnknown(let id):
|
||||
L10n.screenSecurityAndPrivacyAskToJoinSingleSpaceMembersOptionDescription(id)
|
||||
case .multiple, .empty:
|
||||
L10n.screenSecurityAndPrivacyAskToJoinMultipleSpacesMembersOptionDescription
|
||||
}
|
||||
} else {
|
||||
L10n.screenSecurityAndPrivacyRoomAccessSpaceMembersOptionUnavailableDescription
|
||||
}
|
||||
}
|
||||
|
||||
var accessSectionFooter: AttributedString? {
|
||||
if bindings.desiredSettings.accessType.isSpaceUsers,
|
||||
isSpaceMembersOptionSelectable,
|
||||
case .multiple = spaceSelection {
|
||||
if (bindings.desiredSettings.accessType.isSpaceUsers &&
|
||||
isSpaceMembersOptionSelectable) ||
|
||||
(bindings.desiredSettings.accessType.isAskToJoinWithSpaceUsers &&
|
||||
isAskToJoinWithSpaceMembersOptionSelectable),
|
||||
case .multiple = spaceSelection {
|
||||
Self.accessSectionFooterAttributedString
|
||||
} else {
|
||||
nil
|
||||
@@ -116,8 +141,8 @@ struct SecurityAndPrivacyScreenViewState: BindableState {
|
||||
} else if selectableSpacesCount > 1 {
|
||||
.multiple
|
||||
} else if let joinedParent = joinedParentSpaces.first {
|
||||
if case let .spaceUsers(ids) = currentSettings.accessType {
|
||||
if ids.isEmpty {
|
||||
if currentSettings.accessType.isSpaceUsers || currentSettings.accessType.isAskToJoinWithSpaceUsers {
|
||||
if currentSettings.accessType.spaceIDs.isEmpty {
|
||||
// Edge case where the access type is already space members, but it does not contain any id
|
||||
// So if the user wants to add their own parent they need to do it from the selection menu
|
||||
.multiple
|
||||
@@ -185,6 +210,15 @@ enum SecurityAndPrivacyRoomAccessType: Equatable {
|
||||
}
|
||||
}
|
||||
|
||||
var isAskToJoinWithSpaceUsers: Bool {
|
||||
switch self {
|
||||
case .askToJoinWithSpaceUsers:
|
||||
true
|
||||
default:
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
var isAddressRequired: Bool {
|
||||
switch self {
|
||||
case .inviteOnly, .spaceUsers:
|
||||
@@ -215,6 +249,7 @@ enum SecurityAndPrivacyScreenViewAction {
|
||||
case tryUpdatingEncryption(Bool)
|
||||
case editAddress
|
||||
case selectedSpaceMembersAccess
|
||||
case selectedAskToJoinWithSpaceMembersAccess
|
||||
case manageSpaces
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user