mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 08:15:24 +00:00
Refactor the JoinRoom screen to take advantage of newer APIs and support more joinRule/membership combinations (i.e. invite required, restricted, banned) (#3685)
- expose the full RoomPreview and RoomMembershipDetails through their own proxies - implement standard mocks for all the different combinations - converge on a single room info provider - rebuild all the previews - prioritise the preview data over the room one.
This commit is contained in:
@@ -12,13 +12,16 @@ enum JoinRoomScreenViewModelAction {
|
||||
case dismiss
|
||||
}
|
||||
|
||||
enum JoinRoomScreenInteractionMode {
|
||||
enum JoinRoomScreenMode: Equatable {
|
||||
case loading
|
||||
case unknown
|
||||
case joinable
|
||||
case restricted
|
||||
case inviteRequired
|
||||
case invited
|
||||
case join
|
||||
case knock
|
||||
case knockable
|
||||
case knocked
|
||||
case banned(sender: String?, reason: String?)
|
||||
}
|
||||
|
||||
struct JoinRoomScreenRoomDetails {
|
||||
@@ -31,12 +34,11 @@ struct JoinRoomScreenRoomDetails {
|
||||
}
|
||||
|
||||
struct JoinRoomScreenViewState: BindableState {
|
||||
// Maybe use room summary details or similar here??
|
||||
let roomID: String
|
||||
|
||||
var roomDetails: JoinRoomScreenRoomDetails?
|
||||
|
||||
var mode: JoinRoomScreenInteractionMode = .loading
|
||||
var mode: JoinRoomScreenMode = .loading
|
||||
|
||||
var bindings = JoinRoomScreenViewStateBindings()
|
||||
|
||||
@@ -46,10 +48,14 @@ struct JoinRoomScreenViewState: BindableState {
|
||||
|
||||
var subtitle: String? {
|
||||
switch mode {
|
||||
case .loading: nil
|
||||
case .unknown: L10n.screenJoinRoomSubtitleNoPreview
|
||||
case .invited, .join, .knock: roomDetails?.canonicalAlias
|
||||
case .knocked: nil
|
||||
case .loading:
|
||||
nil
|
||||
case .unknown:
|
||||
L10n.screenJoinRoomSubtitleNoPreview
|
||||
case .knocked:
|
||||
nil
|
||||
default:
|
||||
roomDetails?.canonicalAlias
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user