mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Add support for space rooms on the JoinRoomScreen. (#4582)
* Add support for space rooms to JoinRoomScreenModel. * Make a single wrapper type for JoinRoomScreen previews to simplify instantiation. * Add previews for JoinRoomScreen for spaces.
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Compound
|
||||
import SwiftUI
|
||||
|
||||
enum JoinRoomScreenViewModelAction {
|
||||
case joined(JoinRoomScreenJoinDetails)
|
||||
@@ -41,9 +42,13 @@ struct JoinRoomScreenRoomDetails {
|
||||
let canonicalAlias: String?
|
||||
let avatar: RoomAvatar?
|
||||
let memberCount: Int?
|
||||
let heroes: [UserProfileProxy]
|
||||
let inviter: RoomInviterDetails?
|
||||
let isDirect: Bool?
|
||||
|
||||
let isSpace: Bool?
|
||||
let childrenCount: Int?
|
||||
let spaceVisibility: SpaceRoomProxyVisibility?
|
||||
}
|
||||
|
||||
struct JoinRoomScreenViewState: BindableState {
|
||||
@@ -70,16 +75,40 @@ struct JoinRoomScreenViewState: BindableState {
|
||||
}
|
||||
|
||||
var subtitle: String? {
|
||||
switch mode {
|
||||
case .invited(isDM: true):
|
||||
if let inviter = roomDetails?.inviter {
|
||||
return inviter.displayName != nil ? inviter.id : nil
|
||||
if roomDetails?.isSpace == true, let spaceVisibilityTitle, let childrenCount = roomDetails?.childrenCount {
|
||||
return L10n.screenSpaceListDetails(spaceVisibilityTitle, L10n.commonRooms(childrenCount))
|
||||
} else {
|
||||
switch mode {
|
||||
case .invited(isDM: true):
|
||||
if let inviter = roomDetails?.inviter {
|
||||
return inviter.displayName != nil ? inviter.id : nil
|
||||
}
|
||||
return nil
|
||||
case .loading, .unknown, .knocked:
|
||||
return nil
|
||||
default:
|
||||
return roomDetails?.canonicalAlias
|
||||
}
|
||||
return nil
|
||||
case .loading, .unknown, .knocked:
|
||||
return nil
|
||||
default:
|
||||
return roomDetails?.canonicalAlias
|
||||
}
|
||||
}
|
||||
|
||||
var subtitleIcon: KeyPath<CompoundIcons, Image>? {
|
||||
guard roomDetails?.isSpace == true else { return nil }
|
||||
|
||||
return switch roomDetails?.spaceVisibility {
|
||||
case .public: \.public
|
||||
case .private: \.lock
|
||||
case .restricted(let parentName): \.space
|
||||
case .none: \.lock
|
||||
}
|
||||
}
|
||||
|
||||
var spaceVisibilityTitle: String? {
|
||||
switch roomDetails?.spaceVisibility {
|
||||
case .public: L10n.commonPublicSpace
|
||||
case .private: L10n.commonPrivateSpace
|
||||
case .restricted(let parentName): L10n.screenSpaceListParentSpace(parentName)
|
||||
case .none: L10n.commonPrivateSpace
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +117,7 @@ struct JoinRoomScreenViewState: BindableState {
|
||||
// https://github.com/matrix-org/matrix-rust-sdk/issues/4825
|
||||
if isDMInvite, let inviter = roomDetails?.inviter {
|
||||
.heroes([.init(userID: inviter.id, displayName: inviter.displayName, avatarURL: hideInviteAvatars ? nil : inviter.avatarURL)])
|
||||
} else if let roomDetails, let avatar = roomDetails.avatar {
|
||||
} else if let avatar = roomDetails?.avatar {
|
||||
shouldHideAvatars ? avatar.removingAvatar : avatar
|
||||
} else if let name = roomDetails?.name {
|
||||
.room(id: roomID, name: name, avatarURL: nil)
|
||||
|
||||
Reference in New Issue
Block a user