Knocked Preview implementation (#3426)

* JoinRoomScreen ui for knocking

* code improvement

* updated previews

* added knocked state with tests

* send knock request

* Apply suggestions from code review

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* pr comments

* update tests

* new API

* knock implementation and cancel knock

* update strings

* added a knocked cell in the home screen

* design update

* updated SDK

* simplified the invite case code

* pr comments

* updated previews

* added message as reason

* updated strings

* fixing tests

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
This commit is contained in:
Mauro
2024-10-24 17:23:06 +02:00
committed by GitHub
parent 7d373c07a3
commit 2511c98090
48 changed files with 492 additions and 120 deletions
@@ -127,10 +127,11 @@ struct HomeScreenViewStateBindings {
}
struct HomeScreenRoom: Identifiable, Equatable {
enum RoomType {
enum RoomType: Equatable {
case placeholder
case room
case invite
case invite(inviterDetails: RoomInviterDetails?)
case knock
}
static let placeholderLastMessage = AttributedString("Hidden last message")
@@ -143,6 +144,13 @@ struct HomeScreenRoom: Identifiable, Equatable {
let type: RoomType
var inviter: RoomInviterDetails? {
if case .invite(let inviter) = type {
return inviter
}
return nil
}
let badges: Badges
struct Badges: Equatable {
let isDotShown: Bool
@@ -164,9 +172,7 @@ struct HomeScreenRoom: Identifiable, Equatable {
let lastMessage: AttributedString?
let avatar: RoomAvatar
let inviter: RoomInviterDetails?
let canonicalAlias: String?
static func placeholder() -> HomeScreenRoom {
@@ -181,7 +187,6 @@ struct HomeScreenRoom: Identifiable, Equatable {
timestamp: "Now",
lastMessage: placeholderLastMessage,
avatar: .room(id: "", name: "", avatarURL: nil),
inviter: nil,
canonicalAlias: nil)
}
}
@@ -192,17 +197,21 @@ extension HomeScreenRoom {
let hasUnreadMessages = hideUnreadMessagesBadge ? false : summary.hasUnreadMessages
let isDotShown = hasUnreadMessages || summary.hasUnreadMentions || summary.hasUnreadNotifications || summary.isMarkedUnread
let isDotShown = hasUnreadMessages || summary.hasUnreadMentions || summary.hasUnreadNotifications || summary.isMarkedUnread || summary.joinRequestType?.isKnock == true
let isMentionShown = summary.hasUnreadMentions && !summary.isMuted
let isMuteShown = summary.isMuted
let isCallShown = summary.hasOngoingCall
let isHighlighted = summary.isMarkedUnread || (!summary.isMuted && (summary.hasUnreadNotifications || summary.hasUnreadMentions))
let isHighlighted = summary.isMarkedUnread || (!summary.isMuted && (summary.hasUnreadNotifications || summary.hasUnreadMentions)) || summary.joinRequestType?.isKnock == true
let inviter = summary.inviter.map(RoomInviterDetails.init)
let type: HomeScreenRoom.RoomType = switch summary.joinRequestType {
case .invite(let inviter): .invite(inviterDetails: inviter.map(RoomInviterDetails.init))
case .knock: .knock
case .none: .room
}
self.init(id: identifier,
roomID: summary.id,
type: summary.isInvite ? .invite : .room,
type: type,
badges: .init(isDotShown: isDotShown,
isMentionShown: isMentionShown,
isMuteShown: isMuteShown,
@@ -214,7 +223,6 @@ extension HomeScreenRoom {
timestamp: summary.lastMessageFormattedTimestamp,
lastMessage: summary.lastMessage,
avatar: summary.avatar,
inviter: inviter,
canonicalAlias: summary.canonicalAlias)
}
}