hide invite avatars when such flag is on

This affects:
- Invited room preview inviter avatar
- Invited room preview room avatar
- Invited room cell inviter avatar in the room list
- Invited room cell room avatar in the room list
- Push notification for an invite
This commit is contained in:
Mauro Romito
2025-03-19 16:04:08 +01:00
committed by Mauro
parent a201f5a654
commit ff721f6577
13 changed files with 54 additions and 28 deletions
@@ -23,6 +23,15 @@ enum JoinRoomScreenMode: Equatable {
case knocked
case banned(sender: String?, reason: String?)
case forbidden
var isInvite: Bool {
switch self {
case .invited:
true
default:
false
}
}
}
struct JoinRoomScreenRoomDetails {
@@ -41,9 +50,15 @@ struct JoinRoomScreenViewState: BindableState {
var roomDetails: JoinRoomScreenRoomDetails?
var mode: JoinRoomScreenMode = .loading
var hideInviteAvatars = false
var bindings = JoinRoomScreenViewStateBindings()
var shouldHideAvatars: Bool {
hideInviteAvatars && mode.isInvite
}
var title: String {
if isDMInvite, let inviter = roomDetails?.inviter {
return inviter.displayName ?? inviter.id
@@ -68,9 +83,9 @@ struct JoinRoomScreenViewState: BindableState {
var avatar: RoomAvatar? {
if isDMInvite, let inviter = roomDetails?.inviter {
return .room(id: roomID, name: inviter.displayName, avatarURL: inviter.avatarURL)
} else if let avatar = roomDetails?.avatar {
return avatar
return .room(id: roomID, name: inviter.displayName, avatarURL: hideInviteAvatars ? nil : inviter.avatarURL)
} else if let roomDetails, let avatar = roomDetails.avatar {
return shouldHideAvatars ? .room(id: roomID, name: roomDetails.name, avatarURL: nil) : avatar
} else if let name = roomDetails?.name {
return .room(id: roomID, name: name, avatarURL: nil)
} else {
@@ -41,6 +41,10 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
super.init(initialViewState: JoinRoomScreenViewState(roomID: roomID), mediaProvider: mediaProvider)
appSettings.$hideInviteAvatars
.weakAssign(to: \.state.hideInviteAvatars, on: self)
.store(in: &cancellables)
context.$viewState.map(\.mode)
.removeDuplicates()
.sink { mode in
@@ -58,7 +58,9 @@ struct JoinRoomScreen: View {
private var defaultView: some View {
VStack(spacing: 16) {
if let inviter = context.viewState.roomDetails?.inviter {
RoomInviterLabel(inviter: inviter, mediaProvider: context.mediaProvider)
RoomInviterLabel(inviter: inviter,
shouldHideAvatar: context.viewState.hideInviteAvatars,
mediaProvider: context.mediaProvider)
.multilineTextAlignment(.center)
.font(.compound.bodyMD)
.foregroundStyle(.compound.textSecondary)