Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ final class ConversationReactionMessageTests: XCTestCase {

private var snapshotHelper: SnapshotHelper!
private var sut: MessageReactionsCell!
var mockOtherUser: MockUserType!
var message: MockMessage!

// MARK: - setUp

Expand All @@ -40,15 +38,13 @@ final class ConversationReactionMessageTests: XCTestCase {
sut.widthAnchor.constraint(equalToConstant: 375).isActive = true
// We need to pass an estimated cell size to help the cell layout properly
sut.systemLayoutSizeFitting(CGSize(width: 375, height: 100))
message = createMessage()
}

// MARK: - tearDown

override func tearDown() {
snapshotHelper = nil
sut = nil
message = nil
super.tearDown()
}

Expand All @@ -57,13 +53,9 @@ final class ConversationReactionMessageTests: XCTestCase {
func testThatItConfiguresWithSelfReaction() {
// GIVEN
let reaction = MessageReactionMetadata(emoji: .like, count: 1, isSelfUserReacting: true)
let messageReactionMetadata = [reaction]
let messageReactionConfiguration = MessageReactionsCellConfiguration(
reactions: messageReactionMetadata,
message: message
)
let configuration = [reaction]

sut.configure(with: messageReactionConfiguration, animated: false)
sut.configure(with: configuration, animated: false)

// THEN
snapshotHelper.verify(matching: sut)
Expand Down Expand Up @@ -101,36 +93,19 @@ final class ConversationReactionMessageTests: XCTestCase {
isSelfUserReacting: false
)

let messageReactionMetadata = [
let configuration = [
likeReaction,
thumbsUpReaction,
thumbsDownReaction,
slightlySmilingReaction,
frowningFaceReaction
]
let messageReactionConfiguration = MessageReactionsCellConfiguration(
reactions: messageReactionMetadata,
message: message
)

// WHEN
sut.configure(with: messageReactionConfiguration, animated: false)
sut.configure(with: configuration, animated: false)

// THEN
snapshotHelper.verify(matching: sut)
}

// MARK: - Helper Methods

func createMessage(
withText: String =
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.",
userName: String = "Bruno"
) -> MockMessage {
let message = MockMessageFactory.textMessage(withText: withText)
mockOtherUser = MockUserType.createConnectedUser(name: userName)
message.senderUser = mockOtherUser
return message
}

}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,6 @@ struct MessageReactionMetadata: Equatable {

}

struct MessageReactionsCellConfiguration: Equatable {
let reactions: [MessageReactionMetadata]
let message: ZMConversationMessage // Include the message here

static func == (lhs: MessageReactionsCellConfiguration, rhs: MessageReactionsCellConfiguration) -> Bool {
lhs.reactions == rhs.reactions && lhs.message == rhs.message
}
}

// MARK: - MessageReactionsCell

final class MessageReactionsCell: UIView, ConversationMessageCell {
Expand Down Expand Up @@ -86,25 +77,25 @@ final class MessageReactionsCell: UIView, ConversationMessageCell {
// MARK: - configure method

func configure(
with object: MessageReactionsCellConfiguration,
with reactions: [MessageReactionMetadata],
animated: Bool
) {
let reactionToggles = object.reactions.map { reaction in
let reactionToggles = reactions.map { reaction in
ReactionToggle(
emoji: reaction.emoji,
count: reaction.count,
isToggled: reaction.isSelfUserReacting,
message: object.message
) { [weak self] tappedMessage in
isToggled: reaction.isSelfUserReacting
) { [weak self] in
guard
let self
let self,
let message
else {
return
}

delegate?.perform(
action: .react(reaction.emoji),
for: tappedMessage,
for: message,
view: self
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,7 @@ final class MessageReactionsCellDescription: ConversationMessageCellDescription
// MARK: - Properties

typealias View = MessageReactionsCell
var configuration: View.Configuration

weak var message: ZMConversationMessage? {
didSet {
if let message {
configuration = MessageReactionsCellConfiguration(reactions: configuration.reactions, message: message)
}
}
}
let configuration: View.Configuration

let shouldAlignMessageContentForBubbles = true

Expand All @@ -54,13 +46,15 @@ final class MessageReactionsCellDescription: ConversationMessageCellDescription
)
}

self.configuration = MessageReactionsCellConfiguration(reactions: reactions, message: message)
self.configuration = reactions
}

var supportsActions: Bool = false

var containsHighlightableContent: Bool = false

var message: ZMConversationMessage?

weak var delegate: ConversationMessageCellDelegate?

weak var actionController: ConversationMessageActionController?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ final class ReactionToggle: UIControl {
color: SemanticColors.Label.textDefault
)

private var onToggle: ((ZMConversationMessage) -> Void)?
private var accentColor: UIColor
private var message: ZMConversationMessage?
private var onToggle: (() -> Void)?
private var accentColor: UIColor?
private var accentColorChangeHandler: AccentColorChangeHandler?

var isToggled: Bool {
didSet {
Expand All @@ -56,13 +56,11 @@ final class ReactionToggle: UIControl {
emoji: Emoji.ID,
count: UInt,
isToggled: Bool = false,
message: ZMConversationMessage?,
onToggle: ((ZMConversationMessage) -> Void)? = nil
onToggle: (() -> Void)? = nil
) {
self.message = message
self.onToggle = onToggle
self.accentColor = message?.senderUser?.accentColor ?? .blue
self.isToggled = isToggled
self.onToggle = onToggle
self.accentColor = ZMUserSession.shared()?.selfUser.accentColor

super.init(frame: .zero)

Expand Down Expand Up @@ -92,6 +90,7 @@ final class ReactionToggle: UIControl {

updateAppearance()
addTarget(self, action: #selector(didToggle), for: .touchUpInside)
addAccentColorChangeObserver(userSession: ZMUserSession.shared())

setupAccessibility(
value: emoji,
Expand All @@ -111,11 +110,20 @@ final class ReactionToggle: UIControl {
layer.cornerRadius = rect.height / 2.0
}

private func addAccentColorChangeObserver(userSession: UserSession?) {
guard accentColorChangeHandler == nil, let userSession else { return }
accentColorChangeHandler = AccentColorChangeHandler
.addObserver(userSession: userSession) { [weak self] _ in
self?.updateAppearance()
}
}

private func updateAppearance() {
accentColor = ZMUserSession.shared()?.selfUser.accentColor
if isToggled {
backgroundColor = accentColor.withAlphaComponent(0.5)
layer.borderColor = accentColor.cgColor
counterLabel.textColor = accentColor
backgroundColor = accentColor?.withAlphaComponent(0.5) ?? ButtonColors.backgroundReactionSelected
layer.borderColor = accentColor?.cgColor ?? ButtonColors.reactionBorderSelected.cgColor
counterLabel.textColor = accentColor ?? SemanticColors.Label.textReactionCounterSelected
} else {
backgroundColor = ButtonColors.backroundReactionNormal
layer.borderColor = ButtonColors.borderReactionNormal.cgColor
Expand All @@ -127,8 +135,7 @@ final class ReactionToggle: UIControl {

@objc
private func didToggle() {
guard let message else { return }
onToggle?(message)
onToggle?()
}

// MARK: - Accessibility
Expand Down
Loading