mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
Membership aware room routes (#2709)
* Remove the invites button when room list invites are enabled * element-hq/element-x-ios/issues/2632 - Handle room permalinks based on their membership state and show the according room joining screens: - modify the room flow coordinator to only take a roomID and be able to decide its own room flows (especially for unjoined rooms) - add support for the new room preview API - have RoomDirectorySearch go through the same paths
This commit is contained in:
@@ -21,34 +21,44 @@ enum JoinRoomScreenViewModelAction {
|
||||
case cancelled
|
||||
}
|
||||
|
||||
enum JoinRoomScreenInteractionMode {
|
||||
case unknown
|
||||
case invited
|
||||
case join
|
||||
case knock
|
||||
}
|
||||
|
||||
struct JoinRoomScreenViewState: BindableState {
|
||||
// Maybe use room summary details or similar here??
|
||||
let roomID: String
|
||||
let roomName: String
|
||||
let avatarURL: URL?
|
||||
|
||||
let interaction: JoinRoomScreenInteraction
|
||||
var roomDetails: RoomPreviewDetails?
|
||||
|
||||
var isJoining = false
|
||||
var mode: JoinRoomScreenInteractionMode {
|
||||
guard let roomDetails else {
|
||||
return .unknown
|
||||
}
|
||||
|
||||
if roomDetails.isInvited {
|
||||
return .invited
|
||||
}
|
||||
|
||||
if roomDetails.isPublic {
|
||||
return .join
|
||||
}
|
||||
|
||||
// Knocking is not supported yet, treat it as .unknown
|
||||
// if roomDetails.canKnock {
|
||||
// return .knock
|
||||
// }
|
||||
|
||||
return .unknown
|
||||
}
|
||||
|
||||
var bindings = JoinRoomScreenViewStateBindings()
|
||||
|
||||
var title: String {
|
||||
switch interaction {
|
||||
case .knock:
|
||||
L10n.screenJoinRoomTitleKnock
|
||||
case .join, .invited:
|
||||
L10n.screenJoinRoomTitleNoPreview
|
||||
}
|
||||
}
|
||||
|
||||
var subtitle: String {
|
||||
switch interaction {
|
||||
case .knock:
|
||||
L10n.screenJoinRoomSubtitleKnock
|
||||
case .join, .invited:
|
||||
L10n.screenJoinRoomSubtitleNoPreview
|
||||
}
|
||||
roomDetails?.name ?? L10n.screenJoinRoomTitleNoPreview
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,13 +67,7 @@ struct JoinRoomScreenViewStateBindings {
|
||||
}
|
||||
|
||||
enum JoinRoomScreenAlertType {
|
||||
case joinFailed
|
||||
}
|
||||
|
||||
enum JoinRoomScreenInteraction {
|
||||
case knock
|
||||
case join
|
||||
case invited
|
||||
case declineInvite
|
||||
}
|
||||
|
||||
enum JoinRoomScreenViewAction {
|
||||
|
||||
Reference in New Issue
Block a user