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:
Stefan Ceriu
2025-01-20 19:07:11 +02:00
committed by GitHub
parent f20847f62b
commit 8577f53613
48 changed files with 504 additions and 248 deletions
@@ -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
}
}