From ee9a7346af7b75b79c30916aed01cd9010e94da0 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 22 Jul 2024 16:11:55 +0100 Subject: [PATCH 01/47] Introduce new ViewContainerBuilder --- .../ViewContainerBuilder.swift | 270 ++++++++++++++++++ StreamChat.xcodeproj/project.pbxproj | 14 + 2 files changed, 284 insertions(+) create mode 100644 Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift diff --git a/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift b/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift new file mode 100644 index 0000000000..eff8be21ff --- /dev/null +++ b/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift @@ -0,0 +1,270 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import UIKit + +// MARK: - View Container Builder + +/// A result builder to create a stack view given an array of views. +/// The goal is to build UIKit layout similar to SwiftUI so that it easier to create and re-layout views. +@resultBuilder +public struct ViewContainerBuilder { + init() {} + + /// The block responsible to produce a UIStackView given multiple views. + /// Example: + /// ``` + /// HContainer { + /// threadIconView + /// replyTimestampLabel + /// } + /// ``` + public static func buildBlock(_ components: UIView?...) -> UIStackView { + UIStackView(arrangedSubviews: components.compactMap { $0 }) + } + + /// The block responsible to produce a UIStackView given an array views. + /// Example: + /// ``` + /// HContainer { + /// headerViews // -> [UIView] + /// } + /// ``` + public static func buildBlock(_ components: [UIView]) -> UIStackView { + UIStackView(arrangedSubviews: components) + } + + /// The block responsible to replace the views of a stack view. + /// Example: + /// ``` + /// container.views { + /// threadIconView + /// replyTimestampLabel + /// } + /// ``` + public static func buildBlock(_ components: UIView?...) -> [UIView] { + components.compactMap { $0 } + } + + /// The block responsible to help creating additional constraints in a container. + /// Example: + /// ``` + /// threadIconView.constraints { + /// $0.heightAnchor.pin(equalToConstant: 15) + /// $0.widthAnchor.pin(equalToConstant: 15) + /// } + /// ``` + public static func buildBlock(_ components: NSLayoutConstraint...) -> [NSLayoutConstraint] { + NSLayoutConstraint.activate(components) + return components + } + + /// A block responsible to support if-statements when building the stack views. + public static func buildEither(first component: UIStackView) -> UIStackView { + component + } + + /// A block responsible to support if-statements when building the stack views. + public static func buildEither(second component: UIStackView) -> UIStackView { + component + } +} + +/// The vertical container which represents a vertical `UIStackView`. +/// +/// - parameter spacing: The spacing between views. +/// - parameter distribution: The stack view distribution, by default it is `.fill`. +/// - parameter alignment: The stack view alignment, by default it is `.fill`. +/// - parameter content: The result builder responsible to return the stack view with the arranged views. +public func VContainer( + spacing: CGFloat = 0, + distribution: UIStackView.Distribution = .fill, + alignment: UIStackView.Alignment = .fill, + @ViewContainerBuilder content: () -> UIStackView = { UIStackView() } +) -> UIStackView { + let stack = content() + stack.translatesAutoresizingMaskIntoConstraints = false + stack.axis = .vertical + stack.distribution = distribution + stack.alignment = alignment + stack.spacing = spacing + return stack +} + +/// The horizontal container which represents a horizontal `UIStackView`. +/// +/// - parameter spacing: The spacing between views. +/// - parameter distribution: The stack view distribution, by default it is `.fill`. +/// - parameter alignment: The stack view alignment. +/// - parameter content: The result builder responsible to return the stack view with the arranged views. +public func HContainer( + spacing: CGFloat = 0, + distribution: UIStackView.Distribution = .fill, + alignment: UIStackView.Alignment = .fill, + @ViewContainerBuilder content: () -> UIStackView = { UIStackView() } +) -> UIStackView { + let stack = content() + stack.translatesAutoresizingMaskIntoConstraints = false + stack.axis = .horizontal + stack.distribution = distribution + stack.alignment = alignment + stack.spacing = spacing + return stack +} + +/// A flexible space that expands along the major axis of its containing stack layout. +public func Spacer() -> UIView { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + return view +} + +// MARK: - Layout & Constraints Builders + +public extension UIView { + /// Syntax sugar to be able to add additional layout changes in place when building layouts with the `@ViewContainerBuilder`. + /// Example: + /// ``` + /// replyTimestampLabel.layout { + /// $0.setContentCompressionResistancePriority(.required, for: .horizontal) + /// + /// NSLayoutConstraint.activate([ + /// $0.heightAnchor.pin(equalToConstant: 15) + /// $0.widthAnchor.pin(equalToConstant: 15) + /// ]) + /// } + /// ``` + @discardableResult + func layout(_ block: (Self) -> Void) -> Self { + block(self) + return self + } + + /// Syntax sugar to be able to set view constraints in place when building layouts with the `@ViewContainerBuilder`. + /// The constraints are automatically activated. + /// + /// Example: + /// ``` + /// threadIconView.constraints { + /// $0.heightAnchor.pin(equalToConstant: 15) + /// $0.widthAnchor.pin(equalToConstant: 15) + /// } + /// ``` + @discardableResult + func constraints(@ViewContainerBuilder block: (Self) -> [NSLayoutConstraint]) -> Self { + NSLayoutConstraint.activate(block(self)) + return self + } +} + +// MARK: - UIStackView.views {} - Helper to replace the subviews + +public extension UIStackView { + /// Result builder to allow replacing views of a container. + /// This is useful when containers have a reference. + /// + /// /// Example: + /// ``` + /// container.views { + /// threadIconView + /// replyTimestampLabel + /// } + /// ``` + @discardableResult + func views( + @ViewContainerBuilder _ subviews: () -> [UIView] + ) -> Self { + removeAllArrangedSubviews() + subviews().forEach { addArrangedSubview($0) } + return self + } +} + +// MARK: - UIStackView.embed() - Helper to add container to parent view + +public extension UIStackView { + /// Embeds the container to the given view. + @discardableResult + func embed(in view: UIView) -> UIStackView { + view.addSubview(self) + pin(to: view) + return self + } + + /// Embeds the container to the given view with insets. + @discardableResult + func embed(in view: UIView, insets: NSDirectionalEdgeInsets) -> UIStackView { + view.embed(self, insets: insets) + return self + } + + /// Embeds the container to the given view respecting the layout margins guide. + /// The margins can be customised by changing the `directionalLayoutMargins`. + @discardableResult + func embedToMargins(in view: UIView) -> UIStackView { + view.addSubview(self) + pin(to: view.layoutMarginsGuide) + return self + } +} + +// MARK: - UIView width and height helpers + +public extension UIView { + /// Creates a width constraint with the given constant value. + @discardableResult + func width(_ value: CGFloat) -> Self { + NSLayoutConstraint.activate([ + widthAnchor.pin(equalToConstant: value) + ]) + return self + } + + /// Creates a width constraint greater or equal to the given value. + @discardableResult + func width(greaterThanOrEqualTo value: CGFloat) -> Self { + NSLayoutConstraint.activate([ + widthAnchor.pin(greaterThanOrEqualToConstant: value) + ]) + return self + } + + /// Creates a width constraint less or equal to the given value. + @discardableResult + func width(lessThanOrEqualTo value: CGFloat) -> Self { + NSLayoutConstraint.activate([ + widthAnchor.pin(lessThanOrEqualToConstant: value) + ]) + return self + } +} + +public extension UIView { + /// Creates a height constraint with the given constant value. + @discardableResult + func height(_ value: CGFloat) -> Self { + NSLayoutConstraint.activate([ + heightAnchor.pin(equalToConstant: value) + ]) + return self + } + + /// Creates a height constraint greater or equal to the given value. + @discardableResult + func height(greaterThanOrEqualTo value: CGFloat) -> Self { + NSLayoutConstraint.activate([ + heightAnchor.pin(greaterThanOrEqualToConstant: value) + ]) + return self + } + + /// Creates a height constraint less or equal to the given value. + @discardableResult + func height(lessThanOrEqualTo value: CGFloat) -> Self { + NSLayoutConstraint.activate([ + heightAnchor.pin(lessThanOrEqualToConstant: value) + ]) + return self + } +} diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index 68f3a47d2b..63e1382d58 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1662,6 +1662,8 @@ ADD3286E2C07CCCA00BAD0E9 /* BadgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD3286B2C07CC7100BAD0E9 /* BadgeView.swift */; }; ADD328712C07CD7000BAD0E9 /* ChatThreadUnreadCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD3286F2C07CD5300BAD0E9 /* ChatThreadUnreadCountView.swift */; }; ADD328722C07CD7200BAD0E9 /* ChatThreadUnreadCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD3286F2C07CD5300BAD0E9 /* ChatThreadUnreadCountView.swift */; }; + ADD328762C07E9B200BAD0E9 /* ViewContainerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD328742C07E9AC00BAD0E9 /* ViewContainerBuilder.swift */; }; + ADD328772C07E9B300BAD0E9 /* ViewContainerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD328742C07E9AC00BAD0E9 /* ViewContainerBuilder.swift */; }; ADD4C0E12B30A98300F230FF /* UnsupportedAttachmentViewInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD4C0DE2B30A95200F230FF /* UnsupportedAttachmentViewInjector.swift */; }; ADD4C0E22B30A98400F230FF /* UnsupportedAttachmentViewInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD4C0DE2B30A95200F230FF /* UnsupportedAttachmentViewInjector.swift */; }; ADD738472A8D312B0011FE81 /* ChannelListMessageTimestampFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD738462A8D312B0011FE81 /* ChannelListMessageTimestampFormatter.swift */; }; @@ -4266,6 +4268,7 @@ ADD328642C06B39F00BAD0E9 /* ChatThreadListItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatThreadListItemCell.swift; sourceTree = ""; }; ADD3286B2C07CC7100BAD0E9 /* BadgeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeView.swift; sourceTree = ""; }; ADD3286F2C07CD5300BAD0E9 /* ChatThreadUnreadCountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatThreadUnreadCountView.swift; sourceTree = ""; }; + ADD328742C07E9AC00BAD0E9 /* ViewContainerBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewContainerBuilder.swift; sourceTree = ""; }; ADD4C0DE2B30A95200F230FF /* UnsupportedAttachmentViewInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsupportedAttachmentViewInjector.swift; sourceTree = ""; }; ADD5A9E725DE8AF6006DC88A /* ChatSuggestionsVC_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSuggestionsVC_Tests.swift; sourceTree = ""; }; ADD738462A8D312B0011FE81 /* ChannelListMessageTimestampFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelListMessageTimestampFormatter.swift; sourceTree = ""; }; @@ -5223,6 +5226,7 @@ BD4016352638411D00F09774 /* Deprecations.swift */, C14A46572846636900EF498E /* SDKIdentifier.swift */, AD99C901279B06E9009DD9C5 /* Appearance+Formatters */, + ADD328732C07E99700BAD0E9 /* ViewContainerBuilder */, ADECE08926AAEC63001AE411 /* ChatChannel */, 790882BE25486AB000896F03 /* ChatChannelList */, 7908830C2548707B00896F03 /* ChatMessageList */, @@ -8677,6 +8681,14 @@ path = ChatThreadList; sourceTree = ""; }; + ADD328732C07E99700BAD0E9 /* ViewContainerBuilder */ = { + isa = PBXGroup; + children = ( + ADD328742C07E9AC00BAD0E9 /* ViewContainerBuilder.swift */, + ); + path = ViewContainerBuilder; + sourceTree = ""; + }; ADD4C0D82B30A6E100F230FF /* Giphy */ = { isa = PBXGroup; children = ( @@ -10283,6 +10295,7 @@ CF01EB7B288A2B7200B426B8 /* ChatChannelListLoadingView.swift in Sources */, 883051C82630579D0069D731 /* ChatThreadArrowView.swift in Sources */, E798D6D325FF69120002C3B9 /* SwipeableView.swift in Sources */, + ADD328762C07E9B200BAD0E9 /* ViewContainerBuilder.swift in Sources */, E701201E2583EBD50036DACD /* CALayer+Extensions.swift in Sources */, C1FC2F7C27416E150062530F /* Combine.swift in Sources */, 84C11BE527FB459900000A9E /* ChatMessageDeliveryStatusView.swift in Sources */, @@ -12395,6 +12408,7 @@ AD7BE1712C234798000A5756 /* ChatThreadListLoadingView.swift in Sources */, C121EB962746A1E800023E4C /* AttachmentPreviewContainer.swift in Sources */, C121EB972746A1E800023E4C /* AttachmentPreviewProvider.swift in Sources */, + ADD328772C07E9B300BAD0E9 /* ViewContainerBuilder.swift in Sources */, C121EB982746A1E800023E4C /* DefaultAttachmentPreviewProvider.swift in Sources */, C121EB992746A1E800023E4C /* FileAttachmentView.swift in Sources */, AD78F9FC28EC735700BC0FCE /* PerfomanceLog.swift in Sources */, From 436fcc57d550c552946716b87aa5797f1c714c3d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 23 Jul 2024 15:48:03 +0100 Subject: [PATCH 02/47] Add PollAttachmentView component --- Sources/StreamChatUI/Appearance+Images.swift | 8 + .../Attachments/AttachmentViewCatalog.swift | 4 + .../PollAttachmentOptionListItemView.swift | 145 ++++++++++++++++++ .../PollAttachmentOptionListView.swift | 59 +++++++ .../Attachments/Poll/PollAttachmentView.swift | 90 +++++++++++ .../Poll/PollAttachmentViewInjector.swift | 54 +++++++ .../ChatMessageList/ChatMessageListVC.swift | 17 ++ Sources/StreamChatUI/Components.swift | 11 ++ StreamChat.xcodeproj/project.pbxproj | 40 +++++ 9 files changed, 428 insertions(+) create mode 100644 Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift create mode 100644 Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift create mode 100644 Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift create mode 100644 Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift diff --git a/Sources/StreamChatUI/Appearance+Images.swift b/Sources/StreamChatUI/Appearance+Images.swift index b935e9a212..135f000de4 100644 --- a/Sources/StreamChatUI/Appearance+Images.swift +++ b/Sources/StreamChatUI/Appearance+Images.swift @@ -79,6 +79,14 @@ public extension Appearance { public var messageDeliveryStatusRead: UIImage = loadImageSafely(with: "message_receipt_read") public var messageDeliveryStatusFailed: UIImage = loadImageSafely(with: "message_receipt_failed") + // MARK: - Polls + + public var pollVoteCheckmarkActive: UIImage = .checkmark + public var pollVoteCheckmarkInactive: UIImage = UIImage( + systemName: "circle", + withConfiguration: UIImage.SymbolConfiguration(weight: .thin) + ) ?? loadSafely(systemName: "circle", assetsFallback: "checkmark_confirm") + // MARK: - Threads public var threadIcon: UIImage = loadSafely(systemName: "text.bubble", assetsFallback: "text_bubble") diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/AttachmentViewCatalog.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/AttachmentViewCatalog.swift index b618f5d33b..2b300dd6a1 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/AttachmentViewCatalog.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/AttachmentViewCatalog.swift @@ -15,6 +15,10 @@ open class AttachmentViewCatalog { message: ChatMessage, components: Components ) -> AttachmentViewInjector.Type? { + if message.poll != nil { + return PollAttachmentViewInjector.self + } + let attachmentCounts = message.attachmentCounts if attachmentCounts.keys.contains(.image) || attachmentCounts.keys.contains(.video) { diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift new file mode 100644 index 0000000000..a52bff67b2 --- /dev/null +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -0,0 +1,145 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import StreamChat +import UIKit + +/// The view that displays a poll option in the poll option list view. +open class PollAttachmentOptionListItemView: _View, ThemeProvider { + public struct Content { + public var option: PollOption + public var isVotedByCurrentUser: Bool + + public init(option: PollOption, isVotedByCurrentUser: Bool) { + self.option = option + self.isVotedByCurrentUser = isVotedByCurrentUser + } + } + + public var content: Content + + public required init(content: Content) { + self.content = content + super.init(frame: .zero) + } + + @available(*, unavailable) + public required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Action Handlers + + /// A closure that is triggered whenever the option is tapped either from the button or the item itself. + public var onOptionTap: ((PollOption) -> Void)? + + // MARK: - UI Components + + /// A label which displays the name of the option. + open private(set) lazy var optionNameLabel = UILabel() + .withoutAutoresizingMaskConstraints + .withBidirectionalLanguagesSupport + .withAdjustingFontForContentSizeCategory + .withAccessibilityIdentifier(identifier: "optionNameLabel") + + /// A label which displays the number of votes of the option. + open private(set) lazy var votesCountLabel = UILabel() + .withoutAutoresizingMaskConstraints + .withBidirectionalLanguagesSupport + .withAdjustingFontForContentSizeCategory + .withAccessibilityIdentifier(identifier: "votesCountLabel") + + /// A progress view that displays the number of votes this option + /// has in relation with the option with max votes. + open private(set) lazy var votesProgressView = UIProgressView() + .withoutAutoresizingMaskConstraints + .withAccessibilityIdentifier(identifier: "votesProgressView") + + /// A button to add or remove a vote for this option. + open private(set) lazy var voteCheckboxButton = UIButton(type: .roundedRect) + .withoutAutoresizingMaskConstraints + .withAccessibilityIdentifier(identifier: "voteCheckboxView") + + /// The avatar view type used to build the avatar views displayed on the vote authors. + open var voteAuthorAvatarViewType: ChatUserAvatarView.Type { + components.userAvatarView + } + + // MARK: - Lifecycle + + override open func setUp() { + super.setUp() + + voteCheckboxButton.addTarget(self, action: #selector(didTapOption(sender:)), for: .touchUpInside) + let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapOption(sender:))) + addGestureRecognizer(tapGestureRecognizer) + } + + override open func setUpAppearance() { + super.setUpAppearance() + + optionNameLabel.numberOfLines = 0 + optionNameLabel.font = appearance.fonts.subheadline + votesCountLabel.font = appearance.fonts.body.withSize(14) + votesCountLabel.textColor = appearance.colorPalette.text + voteCheckboxButton.contentEdgeInsets = .zero + voteCheckboxButton.imageEdgeInsets = .zero + voteCheckboxButton.titleEdgeInsets = .zero + } + + override open func setUpLayout() { + super.setUpLayout() + + HContainer(spacing: 3) { + voteCheckboxButton + VContainer(spacing: 3) { + HContainer(spacing: 4) { + optionNameLabel + Spacer() + voteAuthorsAvatarView + votesCountLabel + } + votesProgressView + } + } + .embed(in: self) + } + + override open func updateContent() { + super.updateContent() + + optionNameLabel.text = content.option.text + votesCountLabel.text = "\(content.option.latestVotes.count)" + votesProgressView.progress = 0.5 + + if content.isVotedByCurrentUser { + voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkActive, for: .normal) + voteCheckboxButton.tintColor = appearance.colorPalette.accentPrimary + } else { + voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkInactive, for: .normal) + voteCheckboxButton.tintColor = appearance.colorPalette.inactiveTint + } + } + + // TODO: Migrate to Seperate view (easier to customize) + open var voteAuthorsAvatarView: UIView { + HContainer(spacing: -4) { + content.option.latestVotes + .sorted(by: { $0.createdAt > $1.createdAt }) + .suffix(2) + .map { vote in + let view = voteAuthorAvatarViewType.init() + .width(20) + .height(20) + view.shouldShowOnlineIndicator = false + view.content = vote.user + return view + } + } + } + + @objc func didTapOption(sender: Any?) { + onOptionTap?(content.option) + } +} diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift new file mode 100644 index 0000000000..7c8664c783 --- /dev/null +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift @@ -0,0 +1,59 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import StreamChat +import UIKit + +/// The options list view of the poll attachment. +open class PollAttachmentOptionListView: _View, ThemeProvider { + public struct Content: Equatable { + public var poll: Poll + + public init(poll: Poll) { + self.poll = poll + } + } + + public var content: Content? { + didSet { + updateContentIfNeeded() + } + } + + /// The container responsible to render each option in a vertical stack. + /// Whenever the content changes, the stack view is rebuilt. + open var container: UIStackView? { + didSet { + oldValue?.removeFromSuperview() + } + } + + /// A closure that is triggered whenever the option is tapped either from the button or the item itself. + public var onOptionTap: ((PollOption) -> Void)? + + override open func updateContent() { + super.updateContent() + + container = VContainer(spacing: 24) { + itemViews + }.embed(in: self) + } + + /// The option item views. + open var itemViews: [UIView] { + guard let content = self.content else { return [] } + return content.poll.options.map { option in + let view = components.pollAttachmentOptionListItemView.init( + content: .init( + option: option, + isVotedByCurrentUser: content.poll.hasCurrentUserVoted(forOption: option) + ) + ) + view.onOptionTap = { option in + self.onOptionTap?(option) + } + return view + } + } +} diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift new file mode 100644 index 0000000000..2ac009efc8 --- /dev/null +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift @@ -0,0 +1,90 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import StreamChat +import UIKit + +/// The view that displays a poll in the message list. +open class PollAttachmentView: _View, ThemeProvider { + /// The content data of the poll attachment view. + public struct Content { + public var poll: Poll + + public init(poll: Poll) { + self.poll = poll + } + } + + /// The object responsible to + public var content: Content? { + didSet { + updateContentIfNeeded() + } + } + + /// A closure that is triggered whenever the option is tapped either from the button or the item itself. + public var onOptionTap: ((PollOption) -> Void)? + + // MARK: - UI Components + + /// A label which by default displays the title of the Poll. + open private(set) lazy var pollTitleLabel = UILabel() + .withoutAutoresizingMaskConstraints + .withBidirectionalLanguagesSupport + .withAdjustingFontForContentSizeCategory + .withAccessibilityIdentifier(identifier: "pollTitleLabel") + + /// A label which by default displays the selection rules of the Poll. + open private(set) lazy var pollSubtitleLabel = UILabel() + .withoutAutoresizingMaskConstraints + .withBidirectionalLanguagesSupport + .withAdjustingFontForContentSizeCategory + .withAccessibilityIdentifier(identifier: "pollSubtitleLabel") + + /// A label which by default displays the selection rules of the Poll. + open private(set) lazy var optionListView: PollAttachmentOptionListView = components + .pollAttachmentOptionListView.init() + .withoutAutoresizingMaskConstraints + .withAccessibilityIdentifier(identifier: "optionsListView") + + // MARK: - Lifecycle + + override open func setUpAppearance() { + super.setUpAppearance() + + clipsToBounds = true + pollTitleLabel.font = appearance.fonts.subheadlineBold + pollTitleLabel.numberOfLines = 0 + pollSubtitleLabel.font = appearance.fonts.caption1 + pollSubtitleLabel.textColor = appearance.colorPalette.textLowEmphasis + } + + override open func setUpLayout() { + super.setUpLayout() + + directionalLayoutMargins = .init(top: 12, leading: 10, bottom: 12, trailing: 12) + + VContainer(spacing: 14) { + VContainer(spacing: 2) { + pollTitleLabel + pollSubtitleLabel + } + optionListView + } + .embedToMargins(in: self) + } + + override open func updateContent() { + super.updateContent() + + guard let content = self.content else { + return + } + + pollTitleLabel.text = content.poll.name + pollSubtitleLabel.text = "Select one or more" + optionListView.onOptionTap = onOptionTap + optionListView.content = .init(poll: content.poll) + } +} diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift new file mode 100644 index 0000000000..b0a41fb1af --- /dev/null +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift @@ -0,0 +1,54 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import Foundation +import StreamChat + +/// The delegate used to handle Polls interactions in the message list. +public protocol PollAttachmentViewInjectorDelegate: ChatMessageContentViewDelegate { + /// Called when the user taps in an option of the poll. + func pollAttachmentView( + _ pollAttachmentView: PollAttachmentView, + didTapOnOption option: PollOption, + for message: ChatMessage + ) +} + +public class PollAttachmentViewInjector: AttachmentViewInjector { + open lazy var pollAttachmentView: PollAttachmentView = contentView.components + .pollAttachmentView + .init() + .withoutAutoresizingMaskConstraints + + public var pollAttachmentViewDelegate: PollAttachmentViewInjectorDelegate? { + contentView.delegate as? PollAttachmentViewInjectorDelegate + } + + override open func contentViewDidLayout(options: ChatMessageLayoutOptions) { + super.contentViewDidLayout(options: options) + + contentView.bubbleContentContainer.insertArrangedSubview( + pollAttachmentView, + at: 0, + respectsLayoutMargins: false + ) + } + + override open func contentViewDidUpdateContent() { + super.contentViewDidUpdateContent() + + guard let message = contentView.content else { return } + guard let poll = message.poll else { return } + + pollAttachmentView.onOptionTap = { [weak self] option in + guard let self = self else { return } + pollAttachmentViewDelegate?.pollAttachmentView( + self.pollAttachmentView, + didTapOnOption: option, + for: message + ) + } + pollAttachmentView.content = .init(poll: poll) + } +} diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index 4247f7b71e..699a6478ba 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -16,6 +16,7 @@ open class ChatMessageListVC: _ViewController, GiphyActionContentViewDelegate, FileActionContentViewDelegate, LinkPreviewViewDelegate, + PollAttachmentViewInjectorDelegate, UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate, @@ -1063,6 +1064,22 @@ open class ChatMessageListVC: _ViewController, audioPlayer?.seek(to: timeInterval) } + // MARK: - PollAttachmentViewDelegate + + open func pollAttachmentView( + _ pollAttachmentView: PollAttachmentView, + didTapOnOption option: PollOption, + for message: ChatMessage + ) { + guard let poll = message.poll else { return } + let pollController = client.pollController(messageId: message.id, pollId: poll.id) + if let currentUserVote = poll.currentUserVote(forOption: option) { + pollController.removePollVote(voteId: currentUserVote.id) + } else { + pollController.castPollVote(answerText: nil, optionId: option.id) + } + } + // MARK: - Deprecations /// Jump to a given message. diff --git a/Sources/StreamChatUI/Components.swift b/Sources/StreamChatUI/Components.swift index 694c5187e7..1c977a032c 100644 --- a/Sources/StreamChatUI/Components.swift +++ b/Sources/StreamChatUI/Components.swift @@ -312,6 +312,17 @@ public struct Components { /// The view that displays the number of unread messages in the chat. public var messageHeaderDecorationView: ChatChannelMessageHeaderDecoratorView.Type = ChatChannelMessageHeaderDecoratorView.self + // MARK: - Polls + + /// The view that displays a poll in the message list. + public var pollAttachmentView: PollAttachmentView.Type = PollAttachmentView.self + + /// The options list view of the poll attachment in the message list. + public var pollAttachmentOptionListView: PollAttachmentOptionListView.Type = PollAttachmentOptionListView.self + + /// The view that displays a poll option in the poll option list view. + public var pollAttachmentOptionListItemView: PollAttachmentOptionListItemView.Type = PollAttachmentOptionListItemView.self + // MARK: - Reactions /// The Reaction picker VC. diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index 63e1382d58..e48e692d3d 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1707,6 +1707,14 @@ ADF34F9E25CDD8E600AD637C /* ConnectionController+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF34F9D25CDD8E600AD637C /* ConnectionController+SwiftUI.swift */; }; ADF34FA625CDD8F600AD637C /* ConnectionController+Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF34FA525CDD8F600AD637C /* ConnectionController+Combine.swift */; }; ADF3EEF62C00FC7B00DB36D6 /* NotificationMarkUnread+MissingFields.json in Resources */ = {isa = PBXBuildFile; fileRef = ADF3EEF52C00FC7B00DB36D6 /* NotificationMarkUnread+MissingFields.json */; }; + ADF5096F2C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF509672C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift */; }; + ADF509702C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF509672C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift */; }; + ADF509712C5A80EE008F95CD /* PollAttachmentOptionListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF509682C5A80EE008F95CD /* PollAttachmentOptionListView.swift */; }; + ADF509722C5A80EE008F95CD /* PollAttachmentOptionListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF509682C5A80EE008F95CD /* PollAttachmentOptionListView.swift */; }; + ADF509732C5A80EE008F95CD /* PollAttachmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF5096A2C5A80EE008F95CD /* PollAttachmentView.swift */; }; + ADF509742C5A80EE008F95CD /* PollAttachmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF5096A2C5A80EE008F95CD /* PollAttachmentView.swift */; }; + ADF509752C5A80EE008F95CD /* PollAttachmentViewInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF5096B2C5A80EE008F95CD /* PollAttachmentViewInjector.swift */; }; + ADF509762C5A80EE008F95CD /* PollAttachmentViewInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF5096B2C5A80EE008F95CD /* PollAttachmentViewInjector.swift */; }; ADF617692A09927000E70307 /* MessagesPaginationStateHandler_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF617672A09926900E70307 /* MessagesPaginationStateHandler_Tests.swift */; }; ADF9E1F72A03E7E400109108 /* MessagesPaginationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF9E1F62A03E7E400109108 /* MessagesPaginationState.swift */; }; ADFA09C926A99E0A002A6EFA /* ChatThreadHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADFA09C726A99C71002A6EFA /* ChatThreadHeaderView.swift */; }; @@ -4301,6 +4309,10 @@ ADF34F9D25CDD8E600AD637C /* ConnectionController+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionController+SwiftUI.swift"; sourceTree = ""; }; ADF34FA525CDD8F600AD637C /* ConnectionController+Combine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionController+Combine.swift"; sourceTree = ""; }; ADF3EEF52C00FC7B00DB36D6 /* NotificationMarkUnread+MissingFields.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "NotificationMarkUnread+MissingFields.json"; sourceTree = ""; }; + ADF509672C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PollAttachmentOptionListItemView.swift; sourceTree = ""; }; + ADF509682C5A80EE008F95CD /* PollAttachmentOptionListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PollAttachmentOptionListView.swift; sourceTree = ""; }; + ADF5096A2C5A80EE008F95CD /* PollAttachmentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PollAttachmentView.swift; sourceTree = ""; }; + ADF5096B2C5A80EE008F95CD /* PollAttachmentViewInjector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PollAttachmentViewInjector.swift; sourceTree = ""; }; ADF617672A09926900E70307 /* MessagesPaginationStateHandler_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesPaginationStateHandler_Tests.swift; sourceTree = ""; }; ADF9E1F62A03E7E400109108 /* MessagesPaginationState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesPaginationState.swift; sourceTree = ""; }; ADFA09C726A99C71002A6EFA /* ChatThreadHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatThreadHeaderView.swift; sourceTree = ""; }; @@ -6167,6 +6179,7 @@ ADD4C0DA2B30A78500F230FF /* VoiceRecording */, ADD4C0DB2B30A7B400F230FF /* Gallery */, ADD4C0DC2B30A7ED00F230FF /* Link */, + ADF5096C2C5A80EE008F95CD /* Poll */, ADD4C0DD2B30A91900F230FF /* Unsupported */, ); path = Attachments; @@ -8831,6 +8844,25 @@ path = ConnectionController; sourceTree = ""; }; + ADF509692C5A80EE008F95CD /* PollAttachmentOptionListView */ = { + isa = PBXGroup; + children = ( + ADF509682C5A80EE008F95CD /* PollAttachmentOptionListView.swift */, + ADF509672C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift */, + ); + path = PollAttachmentOptionListView; + sourceTree = ""; + }; + ADF5096C2C5A80EE008F95CD /* Poll */ = { + isa = PBXGroup; + children = ( + ADF5096B2C5A80EE008F95CD /* PollAttachmentViewInjector.swift */, + ADF5096A2C5A80EE008F95CD /* PollAttachmentView.swift */, + ADF509692C5A80EE008F95CD /* PollAttachmentOptionListView */, + ); + path = Poll; + sourceTree = ""; + }; ADF617662A09925300E70307 /* MessagesPaginationStateHandling */ = { isa = PBXGroup; children = ( @@ -10400,12 +10432,14 @@ AD76CE332A5F1128003CA182 /* ChatMessageSearchVC.swift in Sources */, F80BCA1426304F7800F2107B /* ShareButton.swift in Sources */, CF38F5AF287DB53E00E24D10 /* ChatChannelListErrorView.swift in Sources */, + ADF509752C5A80EE008F95CD /* PollAttachmentViewInjector.swift in Sources */, C1FC2F6F27416E150062530F /* ImagePipelineConfiguration.swift in Sources */, ADE57B792C36DB2000DD6B88 /* ChatThreadListErrorView.swift in Sources */, F838F6B32636D42B0025E1F5 /* ZoomAnimator.swift in Sources */, ADCB578328A42D7700B81AE8 /* StagedChangeset.swift in Sources */, 64B059E22670EFFE0024CE90 /* ChatChannelVC+SwiftUI.swift in Sources */, BDDD1EA32632C50200BA007B /* Appearance.swift in Sources */, + ADF5096F2C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift in Sources */, 88CABC4425933EE70061BB67 /* ChatMessageDefaultReactionsBubbleView.swift in Sources */, ADD328662C06B3A700BAD0E9 /* ChatThreadListItemCell.swift in Sources */, C1788F5829B8C1B400149883 /* ChatMessageHeaderDecoratorView.swift in Sources */, @@ -10528,6 +10562,7 @@ A3C50228284F9CF70048753E /* SwiftyMarkdown+macOS.swift in Sources */, 8850B92A255C286B003AED69 /* Components.swift in Sources */, AD8D1809268F7290004E3A5C /* TypingSuggester.swift in Sources */, + ADF509732C5A80EE008F95CD /* PollAttachmentView.swift in Sources */, F880DEA32628528B0025AD64 /* GalleryVC.swift in Sources */, ADCB577728A42D7700B81AE8 /* ArraySection.swift in Sources */, C1FC2F8727416E150062530F /* OperationTask.swift in Sources */, @@ -10569,6 +10604,7 @@ 847D602D2679EF8A00FB701D /* VideoPlaybackControlView.swift in Sources */, 40FA4DD52A12A0C300DA21D2 /* RecordingTipView.swift in Sources */, 40824D212A1271B9003B61FD /* RecordButton.swift in Sources */, + ADF509712C5A80EE008F95CD /* PollAttachmentOptionListView.swift in Sources */, ADCB577528A42D7700B81AE8 /* ContentEquatable.swift in Sources */, 400F063129A63A0B00242A86 /* ChatMessageDecorationView.swift in Sources */, 88CABC8E25936E440061BB67 /* ChatMessageReactionsBubbleTail.swift in Sources */, @@ -12371,6 +12407,7 @@ C121EB7A2746A1E700023E4C /* String+Extensions.swift in Sources */, C121EB7B2746A1E700023E4C /* ChatMessage+Extensions.swift in Sources */, C121EB7C2746A1E700023E4C /* Animation.swift in Sources */, + ADF509702C5A80EE008F95CD /* PollAttachmentOptionListItemView.swift in Sources */, C121EB7D2746A1E700023E4C /* ChatChannelNamer.swift in Sources */, C121EB7E2746A1E700023E4C /* UIStackView+Extensions.swift in Sources */, C121EB7F2746A1E700023E4C /* SystemEnvironment.swift in Sources */, @@ -12412,6 +12449,7 @@ C121EB982746A1E800023E4C /* DefaultAttachmentPreviewProvider.swift in Sources */, C121EB992746A1E800023E4C /* FileAttachmentView.swift in Sources */, AD78F9FC28EC735700BC0FCE /* PerfomanceLog.swift in Sources */, + ADF509742C5A80EE008F95CD /* PollAttachmentView.swift in Sources */, C121EB9A2746A1E800023E4C /* ImageAttachmentComposerPreview.swift in Sources */, C121EB9B2746A1E800023E4C /* VideoAttachmentComposerPreview.swift in Sources */, C121EB9C2746A1E800023E4C /* SendButton.swift in Sources */, @@ -12445,6 +12483,7 @@ C121EBAE2746A1E800023E4C /* CommandLabelView.swift in Sources */, CF33B3AD28171BE500C84CDB /* CooldownView.swift in Sources */, C121EBAF2746A1E800023E4C /* ListCollectionViewLayout.swift in Sources */, + ADF509722C5A80EE008F95CD /* PollAttachmentOptionListView.swift in Sources */, C121EBB02746A1E900023E4C /* CellSeparatorView.swift in Sources */, C121EBB12746A1E900023E4C /* ContainerStackView.swift in Sources */, C121EBB22746A1E900023E4C /* OnlyLinkTappableTextView.swift in Sources */, @@ -12459,6 +12498,7 @@ CFE5F85C2874A9330099A6A1 /* ChatChannelListEmptyView.swift in Sources */, AD78F9F528EC735700BC0FCE /* SwiftyMarkdown+macOS.swift in Sources */, C121EBB92746A1E900023E4C /* PlayerView.swift in Sources */, + ADF509762C5A80EE008F95CD /* PollAttachmentViewInjector.swift in Sources */, C121EBBA2746A1E900023E4C /* GalleryCollectionViewCell.swift in Sources */, C1788F5929B8C1B400149883 /* ChatMessageHeaderDecoratorView.swift in Sources */, C121EBBB2746A1E900023E4C /* ImageAttachmentGalleryCell.swift in Sources */, From 6d9129ad59fb1e263fe8e32747824568db754695 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 30 Jul 2024 19:12:06 +0100 Subject: [PATCH 03/47] Change to SwiftUI ENV --- DemoApp/Shared/DemoUsers.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DemoApp/Shared/DemoUsers.swift b/DemoApp/Shared/DemoUsers.swift index 48b0473ac7..7911adf0bf 100644 --- a/DemoApp/Shared/DemoUsers.swift +++ b/DemoApp/Shared/DemoUsers.swift @@ -5,7 +5,7 @@ import Foundation import StreamChat -let apiKeyString = ProcessInfo.processInfo.environment["CUSTOM_API_KEY"] ?? DemoApiKeys.frankfurtC1 +let apiKeyString = ProcessInfo.processInfo.environment["CUSTOM_API_KEY"] ?? DemoApiKeys.usEastC6 let applicationGroupIdentifier = "group.io.getstream.iOS.ChatDemoApp" enum DemoUserType { From e08bf0b1c01ffff28b7fa6a58a7cde6d890e2ac0 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 31 Jul 2024 17:40:23 +0100 Subject: [PATCH 04/47] Add `shouldShowOnlineIndicator` to turn off online presence in `ChatUserAvatarView` --- .../CommonViews/AvatarView/ChatUserAvatarView.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Sources/StreamChatUI/CommonViews/AvatarView/ChatUserAvatarView.swift b/Sources/StreamChatUI/CommonViews/AvatarView/ChatUserAvatarView.swift index c50fe7241d..2ef5aac3b7 100644 --- a/Sources/StreamChatUI/CommonViews/AvatarView/ChatUserAvatarView.swift +++ b/Sources/StreamChatUI/CommonViews/AvatarView/ChatUserAvatarView.swift @@ -17,9 +17,16 @@ open class ChatUserAvatarView: _View, ThemeProvider { didSet { updateContentIfNeeded() } } + /// A boolean value to determine if online indicator should be shown or not. + public var shouldShowOnlineIndicator: Bool = true + override open func setUpLayout() { super.setUpLayout() embed(presenceAvatarView) + + if !shouldShowOnlineIndicator { + presenceAvatarView.onlineIndicatorView.isHidden = true + } } override open func updateContent() { @@ -32,6 +39,8 @@ open class ChatUserAvatarView: _View, ThemeProvider { ) ) - presenceAvatarView.isOnlineIndicatorVisible = content?.isOnline ?? false + if shouldShowOnlineIndicator { + presenceAvatarView.isOnlineIndicatorVisible = content?.isOnline ?? false + } } } From 3bee17d11fc916a424fef5eec763bc74c6806163 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 1 Aug 2024 17:52:23 +0100 Subject: [PATCH 05/47] Fix small iOS 13 deprecation --- .../Attachments/ChatMessageAttachmentPreviewVC.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/ChatMessageAttachmentPreviewVC.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/ChatMessageAttachmentPreviewVC.swift index 4271070227..c0e66d208a 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/ChatMessageAttachmentPreviewVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/ChatMessageAttachmentPreviewVC.swift @@ -17,7 +17,7 @@ open class ChatMessageAttachmentPreviewVC: _ViewController, WKNavigationDelegate .withoutAutoresizingMaskConstraints .withAccessibilityIdentifier(identifier: "webView") - public private(set) lazy var activityIndicatorView = UIActivityIndicatorView(style: .gray) + public private(set) lazy var activityIndicatorView = UIActivityIndicatorView(style: .medium) .withAccessibilityIdentifier(identifier: "activityIndicatorView") private lazy var closeButton = UIBarButtonItem( From e6e1fab9d9b8685f86c9e58fa7599c638131b524 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 1 Aug 2024 18:54:37 +0100 Subject: [PATCH 06/47] Add domain logic helpers to Poll --- Sources/StreamChat/Models/Poll.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Sources/StreamChat/Models/Poll.swift b/Sources/StreamChat/Models/Poll.swift index 98e4b9df27..731475fd96 100644 --- a/Sources/StreamChat/Models/Poll.swift +++ b/Sources/StreamChat/Models/Poll.swift @@ -68,4 +68,20 @@ public struct Poll: Equatable { /// A list of the latest votes received for each option in the poll. public let latestVotesByOption: [PollOption] + + /// The list of the current user votes. + public let ownVotes: [PollVote] +} + +/// Poll domain logic helpers. +public extension Poll { + /// Returns the vote of the current user for the given option in case the user has voted. + func currentUserVote(forOption option: PollOption) -> PollVote? { + ownVotes.first(where: { $0.optionId == option.id }) + } + + /// Returns a Boolean value indicating whether the current user has voted the given option. + func hasCurrentUserVoted(forOption option: PollOption) -> Bool { + ownVotes.map(\.optionId).contains(option.id) + } } From a1d34af327f664757fb49d0559bf5f8213a83a75 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 1 Aug 2024 18:55:18 +0100 Subject: [PATCH 07/47] Message Polls live updates --- .../StreamChat/Database/DTOs/PollDTO.swift | 23 ++++++++++++++++-- .../Database/DTOs/PollVoteDTO.swift | 24 +++++++++++++++++-- .../StreamChatModel.xcdatamodel/contents | 2 ++ Sources/StreamChat/Models/ChatMessage.swift | 1 + .../PollAttachmentOptionListItemView.swift | 3 ++- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/Sources/StreamChat/Database/DTOs/PollDTO.swift b/Sources/StreamChat/Database/DTOs/PollDTO.swift index b3972c32e5..e9ec0c01e3 100644 --- a/Sources/StreamChat/Database/DTOs/PollDTO.swift +++ b/Sources/StreamChat/Database/DTOs/PollDTO.swift @@ -24,6 +24,7 @@ class PollDTO: NSManagedObject { @NSManaged var votingVisibility: String? @NSManaged var createdBy: UserDTO? @NSManaged var latestAnswers: Set + @NSManaged var ownVotes: Set @NSManaged var message: MessageDTO? @NSManaged var options: NSOrderedSet @NSManaged var latestVotesByOption: Set @@ -90,7 +91,8 @@ extension PollDTO { createdBy: createdBy?.asModel(), latestAnswers: latestAnswers.map { try $0.asModel() }, options: optionsArray.map { try $0.asModel() }, - latestVotesByOption: latestVotesByOption.map { try $0.asModel() } + latestVotesByOption: latestVotesByOption.map { try $0.asModel() }, + ownVotes: ownVotes.map { try $0.asModel() } ) } @@ -174,7 +176,24 @@ extension NSManagedObjectContext { } } ?? [] ) - + + if let payloadOwnVotes = payload.ownVotes, !payload.fromEvent { + pollDto.ownVotes = try Set( + payloadOwnVotes.compactMap { payload in + if let payload { + let voteDto = try savePollVote(payload: payload, query: nil, cache: cache) + voteDto.poll = pollDto + return voteDto + } else { + return nil + } + } + ) + } + + // Trigger FRC message update + pollDto.message?.poll = pollDto + return pollDto } diff --git a/Sources/StreamChat/Database/DTOs/PollVoteDTO.swift b/Sources/StreamChat/Database/DTOs/PollVoteDTO.swift index 488b96c7c0..e43c7d498f 100644 --- a/Sources/StreamChat/Database/DTOs/PollVoteDTO.swift +++ b/Sources/StreamChat/Database/DTOs/PollVoteDTO.swift @@ -131,7 +131,14 @@ extension NSManagedObjectContext { let queryDTO = try saveQuery(query: query) queryDTO?.votes.insert(dto) } - + + if currentUser?.user.id == dto.user?.id { + poll.ownVotes.insert(dto) + } + + // Trigger FRC message update + poll.message?.poll = poll + return dto } @@ -187,7 +194,14 @@ extension NSManagedObjectContext { } option?.latestVotes.insert(dto) - + + if currentUser?.user.id == dto.user?.id { + poll.ownVotes.insert(dto) + } + + // Trigger FRC message update + poll.message?.poll = poll + return dto } @@ -213,8 +227,14 @@ extension NSManagedObjectContext { poll?.voteCountsByOption?[optionId] = votes } dto.option?.latestVotes.remove(dto) + if currentUser?.user.id == dto.user?.id { + dto.poll?.ownVotes.remove(dto) + } } + // Trigger FRC message update + poll?.message?.poll = poll + delete(pollVote: dto) return dto } diff --git a/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents b/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents index dd35fc9f1f..877706d358 100644 --- a/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents +++ b/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents @@ -332,6 +332,7 @@ + @@ -349,6 +350,7 @@ + diff --git a/Sources/StreamChat/Models/ChatMessage.swift b/Sources/StreamChat/Models/ChatMessage.swift index 948155d79a..ce3c1009af 100644 --- a/Sources/StreamChat/Models/ChatMessage.swift +++ b/Sources/StreamChat/Models/ChatMessage.swift @@ -363,6 +363,7 @@ extension ChatMessage: Hashable { guard lhs.localState == rhs.localState else { return false } guard lhs.updatedAt == rhs.updatedAt else { return false } guard lhs.allAttachments == rhs.allAttachments else { return false } + guard lhs.poll == rhs.poll else { return false } guard lhs.author == rhs.author else { return false } guard lhs.currentUserReactionsCount == rhs.currentUserReactionsCount else { return false } guard lhs.text == rhs.text else { return false } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index a52bff67b2..2070327c09 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -111,12 +111,13 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { optionNameLabel.text = content.option.text votesCountLabel.text = "\(content.option.latestVotes.count)" - votesProgressView.progress = 0.5 if content.isVotedByCurrentUser { + votesProgressView.setProgress(0.5, animated: true) voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkActive, for: .normal) voteCheckboxButton.tintColor = appearance.colorPalette.accentPrimary } else { + votesProgressView.setProgress(0, animated: true) voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkInactive, for: .normal) voteCheckboxButton.tintColor = appearance.colorPalette.inactiveTint } From eddb971eb52ae38ecf48edaddeb408f82d66e259 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 1 Aug 2024 18:55:39 +0100 Subject: [PATCH 08/47] Event.ownVotes workaround (Drop when fixed) --- .../APIClient/Endpoints/Payloads/PollsPayloads.swift | 4 +++- Sources/StreamChat/Database/DatabaseSession.swift | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Sources/StreamChat/APIClient/Endpoints/Payloads/PollsPayloads.swift b/Sources/StreamChat/APIClient/Endpoints/Payloads/PollsPayloads.swift index 17c673f72d..889016668e 100644 --- a/Sources/StreamChat/APIClient/Endpoints/Payloads/PollsPayloads.swift +++ b/Sources/StreamChat/APIClient/Endpoints/Payloads/PollsPayloads.swift @@ -174,7 +174,7 @@ struct PollPayload: Decodable { var voteCount: Int var latestAnswers: [PollVotePayload?]? var options: [PollOptionPayload?] - var ownVotes: [PollVotePayload?] + var ownVotes: [PollVotePayload?]? var custom: [String: RawJSON]? var latestVotesByOption: [String: [PollVotePayload]]? var voteCountsByOption: [String: Int]? @@ -183,6 +183,8 @@ struct PollPayload: Decodable { var votingVisibility: String? var createdBy: UserPayload? + var fromEvent: Bool = false + init( allowAnswers: Bool, allowUserSuggestedOptions: Bool, diff --git a/Sources/StreamChat/Database/DatabaseSession.swift b/Sources/StreamChat/Database/DatabaseSession.swift index fb9c26b08f..c0b560911b 100644 --- a/Sources/StreamChat/Database/DatabaseSession.swift +++ b/Sources/StreamChat/Database/DatabaseSession.swift @@ -695,7 +695,8 @@ extension DatabaseSession { } } - if let poll = payload.poll { + if var poll = payload.poll { + poll.fromEvent = true try savePoll(payload: poll, cache: nil) } From 578ab02ebf899436ceeb58b7f9905da052b8075c Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 1 Aug 2024 21:08:42 +0100 Subject: [PATCH 09/47] Manage data races when voting on a poll in the message list --- .../ChatMessageList/ChatMessageListVC.swift | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index 699a6478ba..aa990b93ce 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -163,6 +163,13 @@ open class ChatMessageListVC: _ViewController, dataSource?.isFirstPageLoaded == true } + /// The poll controller to manage the poll actions. + /// There is only one controller active for the poll which the user is currently interacting. + public internal(set) var pollController: PollController? + + /// The poll options that are currently being changed. + public internal(set) var pollOptionsCastingVote: Set = [] + /// The message cell height caches. This makes sure that the message list doesn't /// need to recalculate the cell height every time. This improve the scrolling /// experience since the content size calculation is more precise. @@ -1072,11 +1079,30 @@ open class ChatMessageListVC: _ViewController, for message: ChatMessage ) { guard let poll = message.poll else { return } - let pollController = client.pollController(messageId: message.id, pollId: poll.id) + + if pollOptionsCastingVote.contains(option.id) { + return + } + + pollOptionsCastingVote.insert(option.id) + + let pollController: PollController + if let existingPollController = self.pollController, poll.id == existingPollController.pollId { + pollController = existingPollController + } else { + pollController = client.pollController(messageId: message.id, pollId: poll.id) + pollOptionsCastingVote = [] + } + self.pollController = pollController + if let currentUserVote = poll.currentUserVote(forOption: option) { - pollController.removePollVote(voteId: currentUserVote.id) + pollController.removePollVote(voteId: currentUserVote.id) { [weak self] _ in + self?.pollOptionsCastingVote.remove(option.id) + } } else { - pollController.castPollVote(answerText: nil, optionId: option.id) + pollController.castPollVote(answerText: nil, optionId: option.id) { [weak self] _ in + self?.pollOptionsCastingVote.remove(option.id) + } } } From 632b88bed613c9c3a1ea316da82cfeb65e59cdba Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 2 Aug 2024 00:46:36 +0100 Subject: [PATCH 10/47] Add haptic feedback when voting --- .../ChatMessageList/ChatMessageListVC.swift | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index aa990b93ce..15a3d33e3c 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -136,6 +136,11 @@ open class ChatMessageListVC: _ViewController, .audioSessionFeedbackGenerator .init() + /// A feedbackGenerator that will be used to provide feedback when a task is successful or not. + /// You can disable the feedback generator by overriding to `nil`. + open private(set) lazy var notificationFeedbackGenerator: UINotificationFeedbackGenerator? = UINotificationFeedbackGenerator() + /// A feedbackGenerator that will be used to provide feedback when a task is successful or not. + /// A component responsible to manage the swipe to quote reply logic. open lazy var swipeToReplyGestureHandler = SwipeToReplyGestureHandler(listView: self.listView) @@ -168,6 +173,7 @@ open class ChatMessageListVC: _ViewController, public internal(set) var pollController: PollController? /// The poll options that are currently being changed. + /// It is used to avoid making duplicate calls. public internal(set) var pollOptionsCastingVote: Set = [] /// The message cell height caches. This makes sure that the message list doesn't @@ -1095,17 +1101,53 @@ open class ChatMessageListVC: _ViewController, } self.pollController = pollController + notificationFeedbackGenerator?.notificationOccurred(.success) + if let currentUserVote = poll.currentUserVote(forOption: option) { - pollController.removePollVote(voteId: currentUserVote.id) { [weak self] _ in - self?.pollOptionsCastingVote.remove(option.id) + pollController.removePollVote(voteId: currentUserVote.id) { [weak self] error in + self?.didRemovePollVote(currentUserVote, for: option, in: message, error: error) } } else { - pollController.castPollVote(answerText: nil, optionId: option.id) { [weak self] _ in - self?.pollOptionsCastingVote.remove(option.id) + pollController.castPollVote(answerText: nil, optionId: option.id) { [weak self] error in + self?.didCastPollVote(for: option, in: message, error: error) } } } + /// Called when removing a poll vote completed. + /// - Parameters: + /// - vote: The vote that was removed. + /// - option: The option which the voted was removed from. + /// - message: The message where the Poll belongs to. + /// - error: An error in case the call failed. + open func didRemovePollVote( + _ vote: PollVote, + for option: PollOption, + in message: ChatMessage, + error: Error? + ) { + pollOptionsCastingVote.remove(option.id) + if error != nil { + notificationFeedbackGenerator?.notificationOccurred(.error) + } + } + + /// Called when adding a poll vote completed. + /// - Parameters: + /// - option: The option which the voted was added to. + /// - message: The message where the Poll belongs to. + /// - error: An error in case the call failed. + open func didCastPollVote( + for option: PollOption, + in message: ChatMessage, + error: Error? + ) { + pollOptionsCastingVote.remove(option.id) + if error != nil { + notificationFeedbackGenerator?.notificationOccurred(.error) + } + } + // MARK: - Deprecations /// Jump to a given message. From 5a8c700ec9463baf74aaed11c90d334ee0ee0807 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 2 Aug 2024 15:53:24 +0100 Subject: [PATCH 11/47] Make sure to update the latestVotes author avatar views --- .../PollAttachmentOptionListItemView.swift | 96 ++++++++++++------- .../PollAttachmentOptionListView.swift | 11 +-- 2 files changed, 69 insertions(+), 38 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index 2070327c09..cc40c81813 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -10,23 +10,17 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { public struct Content { public var option: PollOption public var isVotedByCurrentUser: Bool - + public init(option: PollOption, isVotedByCurrentUser: Bool) { self.option = option self.isVotedByCurrentUser = isVotedByCurrentUser } } - - public var content: Content - - public required init(content: Content) { - self.content = content - super.init(frame: .zero) - } - - @available(*, unavailable) - public required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") + + public var content: Content? { + didSet { + updateContentIfNeeded() + } } // MARK: - Action Handlers @@ -62,9 +56,9 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { .withAccessibilityIdentifier(identifier: "voteCheckboxView") /// The avatar view type used to build the avatar views displayed on the vote authors. - open var voteAuthorAvatarViewType: ChatUserAvatarView.Type { - components.userAvatarView - } + open lazy var latestVotesAuthorsView = StackedUserAvatarsView() + .withoutAutoresizingMaskConstraints + .withAccessibilityIdentifier(identifier: "latestVotesAuthorsView") // MARK: - Lifecycle @@ -97,7 +91,7 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { HContainer(spacing: 4) { optionNameLabel Spacer() - voteAuthorsAvatarView + latestVotesAuthorsView votesCountLabel } votesProgressView @@ -109,6 +103,10 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { override open func updateContent() { super.updateContent() + guard let content = self.content else { + return + } + optionNameLabel.text = content.option.text votesCountLabel.text = "\(content.option.latestVotes.count)" @@ -121,26 +119,60 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkInactive, for: .normal) voteCheckboxButton.tintColor = appearance.colorPalette.inactiveTint } + + latestVotesAuthorsView.content = .init(users: content.option.latestVotes + .sorted(by: { $0.createdAt > $1.createdAt }) + .compactMap(\.user) + .suffix(2) + ) } - // TODO: Migrate to Seperate view (easier to customize) - open var voteAuthorsAvatarView: UIView { - HContainer(spacing: -4) { - content.option.latestVotes - .sorted(by: { $0.createdAt > $1.createdAt }) - .suffix(2) - .map { vote in - let view = voteAuthorAvatarViewType.init() - .width(20) - .height(20) - view.shouldShowOnlineIndicator = false - view.content = vote.user - return view - } + @objc func didTapOption(sender: Any?) { + guard let option = content?.option else { + return } + onOptionTap?(option) } +} - @objc func didTapOption(sender: Any?) { - onOptionTap?(content.option) +/// +open class StackedUserAvatarsView: _View, ThemeProvider { + struct Content { + var users: [ChatUser] + } + + var content: Content? { + didSet { + updateContentIfNeeded() + } + } + + open private(set) lazy var mainContainer: UIStackView = HContainer(spacing: -4) + + open var userAvatarViews: [ChatUserAvatarView] { + guard let content = self.content else { return [] } + return content.users.map { user in + let avatarView = components.userAvatarView.init() + .width(20) + .height(20) + avatarView.shouldShowOnlineIndicator = false + avatarView.content = user + return avatarView + } + } + + override open func setUpLayout() { + super.setUpLayout() + + mainContainer.embed(in: self) + } + + override open func updateContent() { + super.updateContent() + + mainContainer.removeAllArrangedSubviews() + userAvatarViews.forEach { + mainContainer.addArrangedSubview($0) + } } } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift index 7c8664c783..b810ec73ff 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift @@ -41,14 +41,13 @@ open class PollAttachmentOptionListView: _View, ThemeProvider { } /// The option item views. - open var itemViews: [UIView] { + open var itemViews: [PollAttachmentOptionListItemView] { guard let content = self.content else { return [] } return content.poll.options.map { option in - let view = components.pollAttachmentOptionListItemView.init( - content: .init( - option: option, - isVotedByCurrentUser: content.poll.hasCurrentUserVoted(forOption: option) - ) + let view = components.pollAttachmentOptionListItemView.init() + view.content = .init( + option: option, + isVotedByCurrentUser: content.poll.hasCurrentUserVoted(forOption: option) ) view.onOptionTap = { option in self.onOptionTap?(option) From dd02bf59929e65719b3067ff223c78207efd71fb Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 2 Aug 2024 16:32:24 +0100 Subject: [PATCH 12/47] Improve performance of Option List View by no recreating the item views everytime --- .../PollAttachmentOptionListItemView.swift | 42 ----------- .../PollAttachmentOptionListView.swift | 60 ++++++++++------ .../CommonViews/StackedUserAvatarsView.swift | 69 +++++++++++++++++++ StreamChat.xcodeproj/project.pbxproj | 6 ++ 4 files changed, 115 insertions(+), 62 deletions(-) create mode 100644 Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index cc40c81813..a44e81ca41 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -134,45 +134,3 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { onOptionTap?(option) } } - -/// -open class StackedUserAvatarsView: _View, ThemeProvider { - struct Content { - var users: [ChatUser] - } - - var content: Content? { - didSet { - updateContentIfNeeded() - } - } - - open private(set) lazy var mainContainer: UIStackView = HContainer(spacing: -4) - - open var userAvatarViews: [ChatUserAvatarView] { - guard let content = self.content else { return [] } - return content.users.map { user in - let avatarView = components.userAvatarView.init() - .width(20) - .height(20) - avatarView.shouldShowOnlineIndicator = false - avatarView.content = user - return avatarView - } - } - - override open func setUpLayout() { - super.setUpLayout() - - mainContainer.embed(in: self) - } - - override open func updateContent() { - super.updateContent() - - mainContainer.removeAllArrangedSubviews() - userAvatarViews.forEach { - mainContainer.addArrangedSubview($0) - } - } -} diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift index b810ec73ff..6bff82105e 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift @@ -7,6 +7,8 @@ import UIKit /// The options list view of the poll attachment. open class PollAttachmentOptionListView: _View, ThemeProvider { + // MARK: - Content + public struct Content: Equatable { public var poll: Poll @@ -21,38 +23,56 @@ open class PollAttachmentOptionListView: _View, ThemeProvider { } } - /// The container responsible to render each option in a vertical stack. - /// Whenever the content changes, the stack view is rebuilt. - open var container: UIStackView? { - didSet { - oldValue?.removeFromSuperview() - } - } + // MARK: - Configuration + + public var maximumNumberOfVisibleOptions = 10 /// A closure that is triggered whenever the option is tapped either from the button or the item itself. public var onOptionTap: ((PollOption) -> Void)? - override open func updateContent() { - super.updateContent() + // MARK: - Views + + /// The item views that display each option. + /// + /// The number of views is constant dependent on `maximumNumberOfVisibleOptions`. + /// This is to make sure views are not re-created dependent on the content. + /// Hiding/Showing views has better performance than re-creating the views from scratch. + open lazy var itemViews: [PollAttachmentOptionListItemView] = { + (0...maximumNumberOfVisibleOptions - 1).map { _ in + let view = self.components.pollAttachmentOptionListItemView.init() + view.onOptionTap = { option in + self.onOptionTap?(option) + } + return view + } + }() - container = VContainer(spacing: 24) { + // MARK: - Lifecycle + + override open func setUpLayout() { + super.setUpLayout() + + VContainer(spacing: 24) { itemViews }.embed(in: self) } - /// The option item views. - open var itemViews: [PollAttachmentOptionListItemView] { - guard let content = self.content else { return [] } - return content.poll.options.map { option in - let view = components.pollAttachmentOptionListItemView.init() - view.content = .init( + override open func updateContent() { + super.updateContent() + + guard let content = self.content else { + return + } + + itemViews.forEach { + $0.isHidden = true + } + zip(itemViews, content.poll.options).forEach { itemView, option in + itemView.content = .init( option: option, isVotedByCurrentUser: content.poll.hasCurrentUserVoted(forOption: option) ) - view.onOptionTap = { option in - self.onOptionTap?(option) - } - return view + itemView.isHidden = false } } } diff --git a/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift b/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift new file mode 100644 index 0000000000..6def48956f --- /dev/null +++ b/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift @@ -0,0 +1,69 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import StreamChat +import UIKit + +/// A view that shows user avatar views stacked together. +open class StackedUserAvatarsView: _View, ThemeProvider { + // MARK: - Content + + struct Content { + var users: [ChatUser] + } + + var content: Content? { + didSet { + updateContentIfNeeded() + } + } + + // MARK: - Configuration + + /// The maximum number of avatars. + public var maximumNumberOfAvatars = 2 + + // MARK: - Views + + /// The user avatar views. + /// + /// The number of views is constant dependent on `maximumNumberOfAvatars`. + /// This is to make sure views are not re-created dependent on the content. + /// Hiding/Showing views has better performance than re-creating the views from scratch. + open lazy var userAvatarViews: [ChatUserAvatarView] = { + (0...maximumNumberOfAvatars - 1).map { _ in + let avatarView = components.userAvatarView.init() + .width(20) + .height(20) + avatarView.shouldShowOnlineIndicator = false + return avatarView + } + }() + + // MARK: - Lifecycle + + override open func setUpLayout() { + super.setUpLayout() + + HContainer(spacing: -4) { + userAvatarViews + }.embed(in: self) + } + + override open func updateContent() { + super.updateContent() + + guard let content = self.content else { + return + } + + userAvatarViews.forEach { + $0.isHidden = true + } + zip(userAvatarViews, content.users).forEach { avatarView, user in + avatarView.content = user + avatarView.isHidden = false + } + } +} diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index e48e692d3d..d5897384cb 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1433,6 +1433,8 @@ AD483B962A2658970004B406 /* ChannelMemberUnbanRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD483B952A2658970004B406 /* ChannelMemberUnbanRequestPayload.swift */; }; AD483B972A2658970004B406 /* ChannelMemberUnbanRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD483B952A2658970004B406 /* ChannelMemberUnbanRequestPayload.swift */; }; AD4C15562A55874700A32955 /* ImageLoading_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C15552A55874700A32955 /* ImageLoading_Tests.swift */; }; + AD4C8C222C5D479B00E1C414 /* StackedUserAvatarsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C8C212C5D479B00E1C414 /* StackedUserAvatarsView.swift */; }; + AD4C8C232C5D479B00E1C414 /* StackedUserAvatarsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4C8C212C5D479B00E1C414 /* StackedUserAvatarsView.swift */; }; AD4CDD85296499160057BC8A /* ScrollViewPaginationHandler_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4CDD81296498D20057BC8A /* ScrollViewPaginationHandler_Tests.swift */; }; AD4CDD862964991A0057BC8A /* InvertedScrollViewPaginationHandler_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4CDD83296498EB0057BC8A /* InvertedScrollViewPaginationHandler_Tests.swift */; }; AD4FB7152C1B758100EB73C5 /* Unread.json in Resources */ = {isa = PBXBuildFile; fileRef = AD4FB7142C1B758100EB73C5 /* Unread.json */; }; @@ -4123,6 +4125,7 @@ AD470C9D26C6D9030090759A /* ChatMessageListVCDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageListVCDelegate.swift; sourceTree = ""; }; AD483B952A2658970004B406 /* ChannelMemberUnbanRequestPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelMemberUnbanRequestPayload.swift; sourceTree = ""; }; AD4C15552A55874700A32955 /* ImageLoading_Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageLoading_Tests.swift; sourceTree = ""; }; + AD4C8C212C5D479B00E1C414 /* StackedUserAvatarsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackedUserAvatarsView.swift; sourceTree = ""; }; AD4CDD81296498D20057BC8A /* ScrollViewPaginationHandler_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollViewPaginationHandler_Tests.swift; sourceTree = ""; }; AD4CDD83296498EB0057BC8A /* InvertedScrollViewPaginationHandler_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvertedScrollViewPaginationHandler_Tests.swift; sourceTree = ""; }; AD4FB7142C1B758100EB73C5 /* Unread.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = Unread.json; sourceTree = ""; }; @@ -6223,6 +6226,7 @@ F80BCA1326304F7800F2107B /* ShareButton.swift */, F87A4865260B3516001653A8 /* SwiftUIViewRepresentable.swift */, CF62AD9828944D4700392893 /* SkeletonLoadable.swift */, + AD4C8C212C5D479B00E1C414 /* StackedUserAvatarsView.swift */, 40824D1B2A1271B9003B61FD /* PlayPauseButton */, 40824D192A1271B9003B61FD /* RecordButton */, 843F0BCB2677666B00B342CB /* AttachmentActionButton */, @@ -10323,6 +10327,7 @@ 22ADD682256C40410098EFEB /* ComposerView.swift in Sources */, E7A37B8425ADA66E0055458F /* ChatSuggestionsHeaderView.swift in Sources */, 849980F1277246DB00ABA58B /* UIScrollView+Extensions.swift in Sources */, + AD4C8C222C5D479B00E1C414 /* StackedUserAvatarsView.swift in Sources */, 8850FE91256558B200C8D534 /* NavigationRouter.swift in Sources */, CF01EB7B288A2B7200B426B8 /* ChatChannelListLoadingView.swift in Sources */, 883051C82630579D0069D731 /* ChatThreadArrowView.swift in Sources */, @@ -12413,6 +12418,7 @@ C121EB7F2746A1E700023E4C /* SystemEnvironment.swift in Sources */, C121EB802746A1E700023E4C /* CACornerMask+Extensions.swift in Sources */, C121EB812746A1E700023E4C /* CGRect+Extensions.swift in Sources */, + AD4C8C232C5D479B00E1C414 /* StackedUserAvatarsView.swift in Sources */, C121EB822746A1E700023E4C /* CGPoint+Extensions.swift in Sources */, 40FA4DEB2A12A46D00DA21D2 /* VoiceRecordingAttachmentComposerPreview_Tests.swift in Sources */, C121EB832746A1E700023E4C /* NavigationVC.swift in Sources */, From 968945b8dd341736685cababf3129687271d90d2 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 2 Aug 2024 18:43:39 +0100 Subject: [PATCH 13/47] Improve flexibility of Option List View without compromising performance --- .../PollAttachmentOptionListView.swift | 44 ++++++++++++------- .../CommonViews/StackedUserAvatarsView.swift | 4 -- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift index 6bff82105e..2f1126b978 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift @@ -25,35 +25,25 @@ open class PollAttachmentOptionListView: _View, ThemeProvider { // MARK: - Configuration - public var maximumNumberOfVisibleOptions = 10 - /// A closure that is triggered whenever the option is tapped either from the button or the item itself. public var onOptionTap: ((PollOption) -> Void)? // MARK: - Views + /// The container that holds all option item views. + open var container: UIStackView? + /// The item views that display each option. - /// - /// The number of views is constant dependent on `maximumNumberOfVisibleOptions`. - /// This is to make sure views are not re-created dependent on the content. - /// Hiding/Showing views has better performance than re-creating the views from scratch. - open lazy var itemViews: [PollAttachmentOptionListItemView] = { - (0...maximumNumberOfVisibleOptions - 1).map { _ in - let view = self.components.pollAttachmentOptionListItemView.init() - view.onOptionTap = { option in - self.onOptionTap?(option) - } - return view - } - }() + open var itemViews: [PollAttachmentOptionListItemView] = [] // MARK: - Lifecycle override open func setUpLayout() { super.setUpLayout() - VContainer(spacing: 24) { - itemViews + container?.removeFromSuperview() + container = VContainer(spacing: 24) { + makeItemViews() }.embed(in: self) } @@ -64,6 +54,12 @@ open class PollAttachmentOptionListView: _View, ThemeProvider { return } + /// We only recreate the item views in case the options do not match the number of views. + /// This makes sure we only recreate the item views when needed. + if itemViews.count != content.poll.options.count { + setUpLayout() + } + itemViews.forEach { $0.isHidden = true } @@ -75,4 +71,18 @@ open class PollAttachmentOptionListView: _View, ThemeProvider { itemView.isHidden = false } } + + /// Creates the option item views based on the number of options. + open func makeItemViews() -> [PollAttachmentOptionListItemView] { + guard let content = self.content else { return [] } + guard !content.poll.options.isEmpty else { return [] } + itemViews = (0.. Date: Mon, 5 Aug 2024 15:36:13 +0100 Subject: [PATCH 14/47] Make content of StackedUserAvatarsView public --- .../CommonViews/StackedUserAvatarsView.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift b/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift index b3953a847b..9825efb258 100644 --- a/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift +++ b/Sources/StreamChatUI/CommonViews/StackedUserAvatarsView.swift @@ -9,11 +9,15 @@ import UIKit open class StackedUserAvatarsView: _View, ThemeProvider { // MARK: - Content - struct Content { - var users: [ChatUser] + public struct Content { + public var users: [ChatUser] + + public init(users: [ChatUser]) { + self.users = users + } } - var content: Content? { + public var content: Content? { didSet { updateContentIfNeeded() } From bfeb8f797bb5656e630a94d5892986057c3738b0 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 15:39:51 +0100 Subject: [PATCH 15/47] Re-structure Common Buttons Folder --- .../AttachmentActionButton.swift | 0 .../AttachmentButton.swift | 0 .../CheckboxControl.swift | 0 .../CircularCloseButton.swift | 0 .../{ => Buttons}/CloseButton.swift | 0 .../CommandButton.swift | 0 .../ConfirmButton.swift | 0 .../{ => Buttons}/MediaButton.swift | 0 .../{ => Buttons}/PillButton.swift | 0 .../PlayPauseButton.swift | 0 .../RecordButton.swift | 0 .../{SendButton => Buttons}/SendButton.swift | 0 .../{ => Buttons}/ShareButton.swift | 0 .../ShrinkInputButton.swift | 0 .../CommandLabelView.swift | 0 .../{SendButton => }/CooldownView.swift | 0 .../{GradientView => }/GradientView.swift | 0 StreamChat.xcodeproj/project.pbxproj | 140 ++++-------------- 18 files changed, 26 insertions(+), 114 deletions(-) rename Sources/StreamChatUI/CommonViews/{AttachmentActionButton => Buttons}/AttachmentActionButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{AttachmentButton => Buttons}/AttachmentButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{CheckboxControl => Buttons}/CheckboxControl.swift (100%) rename Sources/StreamChatUI/CommonViews/{CircularCloseButton => Buttons}/CircularCloseButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{ => Buttons}/CloseButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{CommandButton => Buttons}/CommandButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{ConfirmButton => Buttons}/ConfirmButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{ => Buttons}/MediaButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{ => Buttons}/PillButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{PlayPauseButton => Buttons}/PlayPauseButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{RecordButton => Buttons}/RecordButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{SendButton => Buttons}/SendButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{ => Buttons}/ShareButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{ShrinkInputButton => Buttons}/ShrinkInputButton.swift (100%) rename Sources/StreamChatUI/CommonViews/{CommandLabelView => }/CommandLabelView.swift (100%) rename Sources/StreamChatUI/CommonViews/{SendButton => }/CooldownView.swift (100%) rename Sources/StreamChatUI/CommonViews/{GradientView => }/GradientView.swift (100%) diff --git a/Sources/StreamChatUI/CommonViews/AttachmentActionButton/AttachmentActionButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/AttachmentActionButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/AttachmentActionButton/AttachmentActionButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/AttachmentActionButton.swift diff --git a/Sources/StreamChatUI/CommonViews/AttachmentButton/AttachmentButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/AttachmentButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/AttachmentButton/AttachmentButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/AttachmentButton.swift diff --git a/Sources/StreamChatUI/CommonViews/CheckboxControl/CheckboxControl.swift b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/CheckboxControl/CheckboxControl.swift rename to Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift diff --git a/Sources/StreamChatUI/CommonViews/CircularCloseButton/CircularCloseButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/CircularCloseButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/CircularCloseButton/CircularCloseButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/CircularCloseButton.swift diff --git a/Sources/StreamChatUI/CommonViews/CloseButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/CloseButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/CloseButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/CloseButton.swift diff --git a/Sources/StreamChatUI/CommonViews/CommandButton/CommandButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/CommandButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/CommandButton/CommandButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/CommandButton.swift diff --git a/Sources/StreamChatUI/CommonViews/ConfirmButton/ConfirmButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/ConfirmButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/ConfirmButton/ConfirmButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/ConfirmButton.swift diff --git a/Sources/StreamChatUI/CommonViews/MediaButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/MediaButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/MediaButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/MediaButton.swift diff --git a/Sources/StreamChatUI/CommonViews/PillButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/PillButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/PillButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/PillButton.swift diff --git a/Sources/StreamChatUI/CommonViews/PlayPauseButton/PlayPauseButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/PlayPauseButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/PlayPauseButton/PlayPauseButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/PlayPauseButton.swift diff --git a/Sources/StreamChatUI/CommonViews/RecordButton/RecordButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/RecordButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/RecordButton/RecordButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/RecordButton.swift diff --git a/Sources/StreamChatUI/CommonViews/SendButton/SendButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/SendButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/SendButton/SendButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/SendButton.swift diff --git a/Sources/StreamChatUI/CommonViews/ShareButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/ShareButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/ShareButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/ShareButton.swift diff --git a/Sources/StreamChatUI/CommonViews/ShrinkInputButton/ShrinkInputButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/ShrinkInputButton.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/ShrinkInputButton/ShrinkInputButton.swift rename to Sources/StreamChatUI/CommonViews/Buttons/ShrinkInputButton.swift diff --git a/Sources/StreamChatUI/CommonViews/CommandLabelView/CommandLabelView.swift b/Sources/StreamChatUI/CommonViews/CommandLabelView.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/CommandLabelView/CommandLabelView.swift rename to Sources/StreamChatUI/CommonViews/CommandLabelView.swift diff --git a/Sources/StreamChatUI/CommonViews/SendButton/CooldownView.swift b/Sources/StreamChatUI/CommonViews/CooldownView.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/SendButton/CooldownView.swift rename to Sources/StreamChatUI/CommonViews/CooldownView.swift diff --git a/Sources/StreamChatUI/CommonViews/GradientView/GradientView.swift b/Sources/StreamChatUI/CommonViews/GradientView.swift similarity index 100% rename from Sources/StreamChatUI/CommonViews/GradientView/GradientView.swift rename to Sources/StreamChatUI/CommonViews/GradientView.swift diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index d5897384cb..3de1af74cc 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -5040,22 +5040,6 @@ path = AudioRecorder; sourceTree = ""; }; - 40824D192A1271B9003B61FD /* RecordButton */ = { - isa = PBXGroup; - children = ( - 40824D1A2A1271B9003B61FD /* RecordButton.swift */, - ); - path = RecordButton; - sourceTree = ""; - }; - 40824D1B2A1271B9003B61FD /* PlayPauseButton */ = { - isa = PBXGroup; - children = ( - 40824D1C2A1271B9003B61FD /* PlayPauseButton.swift */, - ); - path = PlayPauseButton; - sourceTree = ""; - }; 40824D252A1271D7003B61FD /* RecordButton */ = { isa = PBXGroup; children = ( @@ -5247,12 +5231,12 @@ 7908830C2548707B00896F03 /* ChatMessageList */, ADECE08A26AAED3B001AE411 /* ChatThread */, ADD3285B2C05440B00BAD0E9 /* ChatThreadList */, - 888123E5255D51BD00070D5A /* CommonViews */, AD4EA229264ADE0100DF8EE2 /* Composer */, F833D64326393E4800651D14 /* Gallery */, 401105252A12734800F877C7 /* VoiceRecording */, 88F8364E2578D1590039AEC8 /* MessageActionsPopup */, 7973CE48265413B4004C7CE5 /* Navigation */, + 888123E5255D51BD00070D5A /* CommonViews */, 888123D0255D42F000070D5A /* Utils */, 88F0D6EA257E409E00F4B050 /* Generated */, 88F0D6ED257E446800F4B050 /* Resources */, @@ -6035,14 +6019,6 @@ path = PinnedMessages; sourceTree = ""; }; - 843F0BCB2677666B00B342CB /* AttachmentActionButton */ = { - isa = PBXGroup; - children = ( - 843F0BCC2677667000B342CB /* AttachmentActionButton.swift */, - ); - path = AttachmentActionButton; - sourceTree = ""; - }; 8440861528FFE85F0027849C /* Shared */ = { isa = PBXGroup; children = ( @@ -6096,14 +6072,6 @@ path = DemoShare; sourceTree = ""; }; - 847DD2D9267233CF0084E14B /* GradientView */ = { - isa = PBXGroup; - children = ( - 847DD2DA267233DB0084E14B /* GradientView.swift */, - ); - path = GradientView; - sourceTree = ""; - }; 847E946C269C685F00E31D0C /* EventsController */ = { isa = PBXGroup; children = ( @@ -6214,37 +6182,25 @@ ADD3286B2C07CC7100BAD0E9 /* BadgeView.swift */, AD96106E2C2DD874004F543C /* BannerView.swift */, 40824D182A1271B9003B61FD /* ClampedView.swift */, - 40824D172A1271B9003B61FD /* PillButton.swift */, - 4067764E2A14CB550079B05C /* MediaButton.swift */, 792DD9D8256BC542001DB91B /* BaseViews.swift */, 88BA7F5C258B6953006CE0C5 /* ChatLoadingIndicator.swift */, 22A0921625682880001FE9F0 /* ChatNavigationBar.swift */, - F80BCA1D26304FEE00F2107B /* CloseButton.swift */, A3BB3FFE261DA74D00365496 /* ContainerStackView.swift */, DBF12127258BAFC1001919C6 /* OnlyLinkTappableTextView.swift */, 84DA54DE2680C66A003A26CD /* PlayerView.swift */, - F80BCA1326304F7800F2107B /* ShareButton.swift */, F87A4865260B3516001653A8 /* SwiftUIViewRepresentable.swift */, CF62AD9828944D4700392893 /* SkeletonLoadable.swift */, AD4C8C212C5D479B00E1C414 /* StackedUserAvatarsView.swift */, - 40824D1B2A1271B9003B61FD /* PlayPauseButton */, - 40824D192A1271B9003B61FD /* RecordButton */, - 843F0BCB2677666B00B342CB /* AttachmentActionButton */, - AD87D094263C7495008B466C /* AttachmentButton */, + 2210525E256FE16600A5F0DB /* CommandLabelView.swift */, + 847DD2DA267233DB0084E14B /* GradientView.swift */, + CF33B3AB28171BE500C84CDB /* CooldownView.swift */, + ADE8B4B32C611B6700C26FBF /* Buttons */, AD4474C1263AFD380030E583 /* Attachments */, AD7112D325F10CF300932AEE /* AvatarView */, - AD4474B8263AFCC30030E583 /* CheckboxControl */, - AD87D093263C7489008B466C /* CircularCloseButton */, - AD87D092263C747C008B466C /* CommandButton */, - AD8E6BBD2642DB520013E01E /* CommandLabelView */, - AD4475A8263B4DF90030E583 /* ConfirmButton */, - 847DD2D9267233CF0084E14B /* GradientView */, ADFB13262637610E00D321FD /* InputChatMessageView */, ADED4BBF26431CA500F4E2C8 /* InputTextView */, AD81AEEB25ED132400F17F8F /* ListCollectionViewLayout */, ADB3C478261638C500A69B66 /* QuotedChatMessageView */, - AD447496263AFC4A0030E583 /* SendButton */, - AD87D095263C74A4008B466C /* ShrinkInputButton */, ADA35730269C9B3B004AD8E9 /* TitleContainerView */, ); path = CommonViews; @@ -8327,23 +8283,6 @@ path = ChatMentionSuggestionView; sourceTree = ""; }; - AD447496263AFC4A0030E583 /* SendButton */ = { - isa = PBXGroup; - children = ( - 22753598257C442300D1FDB6 /* SendButton.swift */, - CF33B3AB28171BE500C84CDB /* CooldownView.swift */, - ); - path = SendButton; - sourceTree = ""; - }; - AD4474B8263AFCC30030E583 /* CheckboxControl */ = { - isa = PBXGroup; - children = ( - 224165A725910A2C00ED7F78 /* CheckboxControl.swift */, - ); - path = CheckboxControl; - sourceTree = ""; - }; AD4474C1263AFD380030E583 /* Attachments */ = { isa = PBXGroup; children = ( @@ -8356,14 +8295,6 @@ path = Attachments; sourceTree = ""; }; - AD4475A8263B4DF90030E583 /* ConfirmButton */ = { - isa = PBXGroup; - children = ( - 7943382A26208D020094471F /* ConfirmButton.swift */, - ); - path = ConfirmButton; - sourceTree = ""; - }; AD4CDD80296498B10057BC8A /* ViewPaginationHandling */ = { isa = PBXGroup; children = ( @@ -8458,38 +8389,6 @@ path = ListCollectionViewLayout; sourceTree = ""; }; - AD87D092263C747C008B466C /* CommandButton */ = { - isa = PBXGroup; - children = ( - AD87D096263C7783008B466C /* CommandButton.swift */, - ); - path = CommandButton; - sourceTree = ""; - }; - AD87D093263C7489008B466C /* CircularCloseButton */ = { - isa = PBXGroup; - children = ( - AD87D0BC263C7C09008B466C /* CircularCloseButton.swift */, - ); - path = CircularCloseButton; - sourceTree = ""; - }; - AD87D094263C7495008B466C /* AttachmentButton */ = { - isa = PBXGroup; - children = ( - AD87D0A0263C7823008B466C /* AttachmentButton.swift */, - ); - path = AttachmentButton; - sourceTree = ""; - }; - AD87D095263C74A4008B466C /* ShrinkInputButton */ = { - isa = PBXGroup; - children = ( - AD87D0AA263C7A7E008B466C /* ShrinkInputButton.swift */, - ); - path = ShrinkInputButton; - sourceTree = ""; - }; AD8B7277290801B800921C31 /* ImageCDN */ = { isa = PBXGroup; children = ( @@ -8499,14 +8398,6 @@ path = ImageCDN; sourceTree = ""; }; - AD8E6BBD2642DB520013E01E /* CommandLabelView */ = { - isa = PBXGroup; - children = ( - 2210525E256FE16600A5F0DB /* CommandLabelView.swift */, - ); - path = CommandLabelView; - sourceTree = ""; - }; AD9490552BF3BA8000E69224 /* ThreadListController */ = { isa = PBXGroup; children = ( @@ -8796,6 +8687,27 @@ path = Thread; sourceTree = ""; }; + ADE8B4B32C611B6700C26FBF /* Buttons */ = { + isa = PBXGroup; + children = ( + 22753598257C442300D1FDB6 /* SendButton.swift */, + AD87D0AA263C7A7E008B466C /* ShrinkInputButton.swift */, + 7943382A26208D020094471F /* ConfirmButton.swift */, + AD87D096263C7783008B466C /* CommandButton.swift */, + 40824D1C2A1271B9003B61FD /* PlayPauseButton.swift */, + F80BCA1326304F7800F2107B /* ShareButton.swift */, + F80BCA1D26304FEE00F2107B /* CloseButton.swift */, + 4067764E2A14CB550079B05C /* MediaButton.swift */, + 40824D172A1271B9003B61FD /* PillButton.swift */, + 40824D1A2A1271B9003B61FD /* RecordButton.swift */, + AD87D0A0263C7823008B466C /* AttachmentButton.swift */, + 843F0BCC2677667000B342CB /* AttachmentActionButton.swift */, + 224165A725910A2C00ED7F78 /* CheckboxControl.swift */, + AD87D0BC263C7C09008B466C /* CircularCloseButton.swift */, + ); + path = Buttons; + sourceTree = ""; + }; ADECE08926AAEC63001AE411 /* ChatChannel */ = { isa = PBXGroup; children = ( From b27679fec76b89c7b1a2d93e5ec688e7008519ae Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 16:53:04 +0100 Subject: [PATCH 16/47] Add `CheckboxButton` as a common view --- .../PollAttachmentOptionListItemView.swift | 8 +++---- .../CommonViews/Buttons/CheckboxButton.swift | 21 +++++++++++++++++++ .../CommonViews/Buttons/CheckboxControl.swift | 2 +- StreamChat.xcodeproj/project.pbxproj | 6 ++++++ 4 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 Sources/StreamChatUI/CommonViews/Buttons/CheckboxButton.swift diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index a44e81ca41..840bd0c551 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -51,7 +51,7 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { .withAccessibilityIdentifier(identifier: "votesProgressView") /// A button to add or remove a vote for this option. - open private(set) lazy var voteCheckboxButton = UIButton(type: .roundedRect) + open private(set) lazy var voteCheckboxButton = CheckboxButton(type: .roundedRect) .withoutAutoresizingMaskConstraints .withAccessibilityIdentifier(identifier: "voteCheckboxView") @@ -112,12 +112,10 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { if content.isVotedByCurrentUser { votesProgressView.setProgress(0.5, animated: true) - voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkActive, for: .normal) - voteCheckboxButton.tintColor = appearance.colorPalette.accentPrimary + voteCheckboxButton.setCheckedState() } else { votesProgressView.setProgress(0, animated: true) - voteCheckboxButton.setImage(appearance.images.pollVoteCheckmarkInactive, for: .normal) - voteCheckboxButton.tintColor = appearance.colorPalette.inactiveTint + voteCheckboxButton.setUncheckedState() } latestVotesAuthorsView.content = .init(users: content.option.latestVotes diff --git a/Sources/StreamChatUI/CommonViews/Buttons/CheckboxButton.swift b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxButton.swift new file mode 100644 index 0000000000..ec39bf7f08 --- /dev/null +++ b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxButton.swift @@ -0,0 +1,21 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import StreamChat +import UIKit + +/// A button for checking or unchecking an option. +open class CheckboxButton: _Button, AppearanceProvider { + /// Sets the button has checked. + open func setCheckedState() { + setImage(appearance.images.pollVoteCheckmarkActive, for: .normal) + tintColor = appearance.colorPalette.accentPrimary + } + + /// Sets the button has unchecked. + open func setUncheckedState() { + setImage(appearance.images.pollVoteCheckmarkInactive, for: .normal) + tintColor = appearance.colorPalette.inactiveTint + } +} diff --git a/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift index e5cca74590..f344307e23 100644 --- a/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift +++ b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift @@ -5,7 +5,7 @@ import StreamChat import UIKit -/// A view to check/uncheck an option. +/// A view to check/uncheck an option a long with a label describing the option. open class CheckboxControl: _Control, AppearanceProvider { // MARK: - Properties diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index 3de1af74cc..edfc00d8e5 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1689,6 +1689,8 @@ ADE57B8F2C3C638900DD6B88 /* ThreadMessageNew.json in Resources */ = {isa = PBXBuildFile; fileRef = ADE57B832C3C5C8700DD6B88 /* ThreadMessageNew.json */; }; ADE595782B44A2B500727CC1 /* MixedAttachmentViewInjector_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE595772B44A2B500727CC1 /* MixedAttachmentViewInjector_Tests.swift */; }; ADE88A142949453200C0F084 /* ChatMessageListRouter_Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE88A132949453200C0F084 /* ChatMessageListRouter_Mock.swift */; }; + ADE8B4B52C611DEA00C26FBF /* CheckboxButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8B4B42C611DEA00C26FBF /* CheckboxButton.swift */; }; + ADE8B4B62C611DEA00C26FBF /* CheckboxButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8B4B42C611DEA00C26FBF /* CheckboxButton.swift */; }; ADEDA1FA2B2BC46C00020460 /* RepeatingTimer_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEDA1F92B2BC46C00020460 /* RepeatingTimer_Tests.swift */; }; ADEE651829BF712D00186129 /* ChatMessageListView_Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEE651429BF711200186129 /* ChatMessageListView_Mock.swift */; }; ADEE651929BF713200186129 /* ChatMessageCell_Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEE651629BF712500186129 /* ChatMessageCell_Mock.swift */; }; @@ -4295,6 +4297,7 @@ ADE57B872C3C60CB00DD6B88 /* ThreadEvents_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadEvents_Tests.swift; sourceTree = ""; }; ADE595772B44A2B500727CC1 /* MixedAttachmentViewInjector_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixedAttachmentViewInjector_Tests.swift; sourceTree = ""; }; ADE88A132949453200C0F084 /* ChatMessageListRouter_Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageListRouter_Mock.swift; sourceTree = ""; }; + ADE8B4B42C611DEA00C26FBF /* CheckboxButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxButton.swift; sourceTree = ""; }; ADEA7F21261D2F8C00CA2289 /* chewbacca.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = chewbacca.jpg; sourceTree = ""; }; ADEA7F22261D2F8C00CA2289 /* r2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = r2.jpg; sourceTree = ""; }; ADEDA1F92B2BC46C00020460 /* RepeatingTimer_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatingTimer_Tests.swift; sourceTree = ""; }; @@ -8702,6 +8705,7 @@ 40824D1A2A1271B9003B61FD /* RecordButton.swift */, AD87D0A0263C7823008B466C /* AttachmentButton.swift */, 843F0BCC2677667000B342CB /* AttachmentActionButton.swift */, + ADE8B4B42C611DEA00C26FBF /* CheckboxButton.swift */, 224165A725910A2C00ED7F78 /* CheckboxControl.swift */, AD87D0BC263C7C09008B466C /* CircularCloseButton.swift */, ); @@ -10263,6 +10267,7 @@ 8803E9E726398F4E002B2A7B /* ChatMessageBubbleView.swift in Sources */, 22FF4365256E943F00133910 /* ChatSuggestionsVC.swift in Sources */, 22A0921725682880001FE9F0 /* ChatNavigationBar.swift in Sources */, + ADE8B4B52C611DEA00C26FBF /* CheckboxButton.swift in Sources */, AD87D0A1263C7823008B466C /* AttachmentButton.swift in Sources */, 22753599257C442300D1FDB6 /* SendButton.swift in Sources */, AD7BE1732C2347A3000A5756 /* ChatThreadListEmptyView.swift in Sources */, @@ -12381,6 +12386,7 @@ C121EBA32746A1E800023E4C /* QuotedChatMessageView.swift in Sources */, C121EBA42746A1E800023E4C /* QuotedChatMessageView+SwiftUI.swift in Sources */, C121EBA52746A1E800023E4C /* OnlineIndicatorView.swift in Sources */, + ADE8B4B62C611DEA00C26FBF /* CheckboxButton.swift in Sources */, AD8B72762908016400921C31 /* ImageDownloadRequest.swift in Sources */, AD78F9FE28EC735700BC0FCE /* Token.swift in Sources */, ADDB2F5A2954CBF700BF80DA /* ViewPaginationHandling.swift in Sources */, From b155062884cbeb57aef73efced63a9d0111ad242 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 17:42:07 +0100 Subject: [PATCH 17/47] Add vote ratio logic to `ChatChannelListItemView` --- .../PollAttachmentOptionListItemView.swift | 48 ++++++++++++++----- .../PollAttachmentOptionListView.swift | 2 +- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index 840bd0c551..c1634e5b49 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -8,12 +8,34 @@ import UIKit /// The view that displays a poll option in the poll option list view. open class PollAttachmentOptionListItemView: _View, ThemeProvider { public struct Content { + /// The option that this view represents. public var option: PollOption - public var isVotedByCurrentUser: Bool + /// The poll that this option belongs. + public var poll: Poll - public init(option: PollOption, isVotedByCurrentUser: Bool) { + public init(option: PollOption, poll: Poll) { self.option = option - self.isVotedByCurrentUser = isVotedByCurrentUser + self.poll = poll + } + + /// Whether the current option has been voted by the current user. + public var isVotedByCurrentUser: Bool { + poll.hasCurrentUserVoted(forOption: option) + } + + /// The number of votes this option has. + public var voteCount: Int { + poll.voteCountsByOption?[option.id] ?? 0 + } + + /// The total votes this poll has. + public var pollTotalVoteCount: Int { + poll.voteCountsByOption?.values.max() ?? 0 + } + + /// The ratio of the votes of this option in comparison with the number of total votes. + public var voteRatio: Float { + Float(voteCount) / Float(max(pollTotalVoteCount, 1)) } } @@ -108,21 +130,15 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { } optionNameLabel.text = content.option.text - votesCountLabel.text = "\(content.option.latestVotes.count)" + votesCountLabel.text = "\(content.voteCount)" + votesProgressView.setProgress(content.voteRatio, animated: true) + latestVotesAuthorsView.content = .init(users: latestVotesAuthors) if content.isVotedByCurrentUser { - votesProgressView.setProgress(0.5, animated: true) voteCheckboxButton.setCheckedState() } else { - votesProgressView.setProgress(0, animated: true) voteCheckboxButton.setUncheckedState() } - - latestVotesAuthorsView.content = .init(users: content.option.latestVotes - .sorted(by: { $0.createdAt > $1.createdAt }) - .compactMap(\.user) - .suffix(2) - ) } @objc func didTapOption(sender: Any?) { @@ -131,4 +147,12 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { } onOptionTap?(option) } + + /// The authors of the latest votes of this option. + open var latestVotesAuthors: [ChatUser] { + content?.option.latestVotes + .sorted(by: { $0.createdAt > $1.createdAt }) + .compactMap(\.user) + .suffix(2) ?? [] + } } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift index 2f1126b978..641d38eb37 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListView.swift @@ -66,7 +66,7 @@ open class PollAttachmentOptionListView: _View, ThemeProvider { zip(itemViews, content.poll.options).forEach { itemView, option in itemView.content = .init( option: option, - isVotedByCurrentUser: content.poll.hasCurrentUserVoted(forOption: option) + poll: content.poll ) itemView.isHidden = false } From d546dc80df57e3fa4506c0312966f5bd587b2f4a Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 18:01:23 +0100 Subject: [PATCH 18/47] Fix UI Glitches for option list item view when text is too big and avatar appears and disappears --- .../PollAttachmentOptionListItemView.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index c1634e5b49..8aeb951cfa 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -110,14 +110,17 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { HContainer(spacing: 3) { voteCheckboxButton VContainer(spacing: 3) { - HContainer(spacing: 4) { + HContainer(spacing: 4, alignment: .top) { optionNameLabel Spacer() latestVotesAuthorsView - votesCountLabel + votesCountLabel.layout { + $0.setContentCompressionResistancePriority(.streamRequire, for: .horizontal) + } } votesProgressView } + .height(greaterThanOrEqualTo: 27) } .embed(in: self) } From cfda8d1e6a6de3f2965c02b35e6dee256643ee99 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 18:08:31 +0100 Subject: [PATCH 19/47] Extract more common logic to `Poll` domain model --- Sources/StreamChat/Models/Poll.swift | 9 +++++++++ .../PollAttachmentOptionListItemView.swift | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Sources/StreamChat/Models/Poll.swift b/Sources/StreamChat/Models/Poll.swift index 731475fd96..0f456071ec 100644 --- a/Sources/StreamChat/Models/Poll.swift +++ b/Sources/StreamChat/Models/Poll.swift @@ -75,6 +75,15 @@ public struct Poll: Equatable { /// Poll domain logic helpers. public extension Poll { + /// Returns the total number of votes for every option. + var totalVotes: Int { + voteCountsByOption?.values.max() ?? 0 + } + + func voteCount(forOption option: PollOption) -> Int { + voteCountsByOption?[option.id] ?? 0 + } + /// Returns the vote of the current user for the given option in case the user has voted. func currentUserVote(forOption option: PollOption) -> PollVote? { ownVotes.first(where: { $0.optionId == option.id }) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index 8aeb951cfa..26e6435ee6 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -25,12 +25,12 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { /// The number of votes this option has. public var voteCount: Int { - poll.voteCountsByOption?[option.id] ?? 0 + poll.voteCount(forOption: option) } /// The total votes this poll has. public var pollTotalVoteCount: Int { - poll.voteCountsByOption?.values.max() ?? 0 + poll.totalVotes } /// The ratio of the votes of this option in comparison with the number of total votes. From 860948d2575d9a747cf5385b209cb997af2ae191 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 18:38:32 +0100 Subject: [PATCH 20/47] Add closed poll and winner option state logic --- Sources/StreamChat/Models/Poll.swift | 15 +++++++++++-- .../PollAttachmentOptionListItemView.swift | 21 ++++++++++++------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Sources/StreamChat/Models/Poll.swift b/Sources/StreamChat/Models/Poll.swift index 0f456071ec..44e32aaea1 100644 --- a/Sources/StreamChat/Models/Poll.swift +++ b/Sources/StreamChat/Models/Poll.swift @@ -75,14 +75,25 @@ public struct Poll: Equatable { /// Poll domain logic helpers. public extension Poll { - /// Returns the total number of votes for every option. - var totalVotes: Int { + /// The value of the option with the most votes. + var currentMaximumVoteCount: Int { voteCountsByOption?.values.max() ?? 0 } + /// The vote count for the given option. func voteCount(forOption option: PollOption) -> Int { voteCountsByOption?[option.id] ?? 0 } + + // The ratio of the votes for the given option in comparison with the number of total votes. + func voteRatio(forOption option: PollOption) -> Float { + if currentMaximumVoteCount == 0 { + return 0 + } + + let optionVoteCount = voteCount(forOption: option) + return Float(optionVoteCount) / Float(currentMaximumVoteCount) + } /// Returns the vote of the current user for the given option in case the user has voted. func currentUserVote(forOption option: PollOption) -> PollVote? { diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index 26e6435ee6..e23fa9b843 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -28,14 +28,14 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { poll.voteCount(forOption: option) } - /// The total votes this poll has. - public var pollTotalVoteCount: Int { - poll.totalVotes - } - /// The ratio of the votes of this option in comparison with the number of total votes. public var voteRatio: Float { - Float(voteCount) / Float(max(pollTotalVoteCount, 1)) + poll.voteRatio(forOption: option) + } + + /// Whether the poll is closed and this option is the winner. + public var isWinner: Bool { + poll.isClosed && voteRatio == 1.0 } } @@ -134,7 +134,6 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { optionNameLabel.text = content.option.text votesCountLabel.text = "\(content.voteCount)" - votesProgressView.setProgress(content.voteRatio, animated: true) latestVotesAuthorsView.content = .init(users: latestVotesAuthors) if content.isVotedByCurrentUser { @@ -142,6 +141,14 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { } else { voteCheckboxButton.setUncheckedState() } + voteCheckboxButton.isHidden = content.poll.isClosed + + votesProgressView.progress = content.voteRatio + if content.isWinner { + votesProgressView.tintColor = appearance.colorPalette.alternativeActiveTint + } else { + votesProgressView.tintColor = appearance.colorPalette.accentPrimary + } } @objc func didTapOption(sender: Any?) { From 21451fd1e79ad7fe65910e8972d9d3882e8a3f4d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 18:53:54 +0100 Subject: [PATCH 21/47] Add subtitle text logic to `PollAttachmentView` --- .../Attachments/Poll/PollAttachmentView.swift | 19 +++++++++++++++++-- Sources/StreamChatUI/Generated/L10n.swift | 14 ++++++++++++++ .../Resources/en.lproj/Localizable.strings | 7 +++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift index 2ac009efc8..30a2707429 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift @@ -35,7 +35,7 @@ open class PollAttachmentView: _View, ThemeProvider { .withAdjustingFontForContentSizeCategory .withAccessibilityIdentifier(identifier: "pollTitleLabel") - /// A label which by default displays the selection rules of the Poll. + /// A label which by default displays the voting state of the Poll. open private(set) lazy var pollSubtitleLabel = UILabel() .withoutAutoresizingMaskConstraints .withBidirectionalLanguagesSupport @@ -83,8 +83,23 @@ open class PollAttachmentView: _View, ThemeProvider { } pollTitleLabel.text = content.poll.name - pollSubtitleLabel.text = "Select one or more" + pollSubtitleLabel.text = subtitleText optionListView.onOptionTap = onOptionTap optionListView.content = .init(poll: content.poll) } + + /// The subtitle text. By default it displays the current voting state. + open var subtitleText: String { + guard let content = self.content else { return "" } + let poll = content.poll + if poll.isClosed == true { + return L10n.Message.Polls.Subtitle.voteEnded + } else if poll.enforceUniqueVote == true { + return L10n.Message.Polls.Subtitle.selectOne + } else if let maxVotes = poll.maxVotesAllowed, maxVotes > 0 { + return L10n.Message.Polls.Subtitle.selectUpTo(min(maxVotes, poll.options.count)) + } else { + return L10n.Message.Polls.Subtitle.selectOneOrMore + } + } } diff --git a/Sources/StreamChatUI/Generated/L10n.swift b/Sources/StreamChatUI/Generated/L10n.swift index e65d38f257..79cebe7383 100644 --- a/Sources/StreamChatUI/Generated/L10n.swift +++ b/Sources/StreamChatUI/Generated/L10n.swift @@ -269,6 +269,20 @@ internal enum L10n { /// Are you sure? internal static var title: String { L10n.tr("Localizable", "message.moderation.title") } } + internal enum Polls { + internal enum Subtitle { + /// Select one + internal static var selectOne: String { L10n.tr("Localizable", "message.polls.subtitle.selectOne") } + /// Select one or more + internal static var selectOneOrMore: String { L10n.tr("Localizable", "message.polls.subtitle.selectOneOrMore") } + /// Select up to %d + internal static func selectUpTo(_ p1: Int) -> String { + return L10n.tr("Localizable", "message.polls.subtitle.selectUpTo", p1) + } + /// Vote ended + internal static var voteEnded: String { L10n.tr("Localizable", "message.polls.subtitle.voteEnded") } + } + } internal enum Sending { /// UPLOADING FAILED internal static var attachmentUploadingFailed: String { L10n.tr("Localizable", "message.sending.attachment-uploading-failed") } diff --git a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings index 8cbdeeee51..c6060f3207 100644 --- a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings +++ b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings @@ -229,3 +229,10 @@ "threadList.new-threads" = "%d new threads"; /// Shown when there's an error when loading the threads. "threadList.error.message" = "Error loading threads"; + +// MARK: - Polls + +"message.polls.subtitle.selectOne" = "Select one"; +"message.polls.subtitle.selectOneOrMore" = "Select one or more"; +"message.polls.subtitle.selectUpTo" = "Select up to %d"; +"message.polls.subtitle.voteEnded" = "Vote ended"; From c2d6dc4f9325ec1951bcbd0b209c518589fb1cf8 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 5 Aug 2024 19:30:52 +0100 Subject: [PATCH 22/47] Change winner logic to be the one and only one option with most votes --- Sources/StreamChat/Models/Poll.swift | 22 ++++++++++++++---- .../PollAttachmentOptionListItemView.swift | 23 +++++++++++-------- .../ChatMessageList/ChatMessageListVC.swift | 2 +- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Sources/StreamChat/Models/Poll.swift b/Sources/StreamChat/Models/Poll.swift index 44e32aaea1..2436919ee1 100644 --- a/Sources/StreamChat/Models/Poll.swift +++ b/Sources/StreamChat/Models/Poll.swift @@ -80,28 +80,40 @@ public extension Poll { voteCountsByOption?.values.max() ?? 0 } + /// Whether the provided option is the one, and **the only one** with the most votes. + func isOptionWithMostVotes(_ option: PollOption) -> Bool { + let optionsWithMostVotes = voteCountsByOption?.filter { $0.value == currentMaximumVoteCount } + return optionsWithMostVotes?.count == 1 && optionsWithMostVotes?[option.id] != nil + } + + /// Whether the provided option is one of that has the most votes. + func isOptionWithMaximumVotes(_ option: PollOption) -> Bool { + let optionsWithMostVotes = voteCountsByOption?.filter { $0.value == currentMaximumVoteCount } + return optionsWithMostVotes?[option.id] != nil + } + /// The vote count for the given option. - func voteCount(forOption option: PollOption) -> Int { + func voteCount(for option: PollOption) -> Int { voteCountsByOption?[option.id] ?? 0 } // The ratio of the votes for the given option in comparison with the number of total votes. - func voteRatio(forOption option: PollOption) -> Float { + func voteRatio(for option: PollOption) -> Float { if currentMaximumVoteCount == 0 { return 0 } - let optionVoteCount = voteCount(forOption: option) + let optionVoteCount = voteCount(for: option) return Float(optionVoteCount) / Float(currentMaximumVoteCount) } /// Returns the vote of the current user for the given option in case the user has voted. - func currentUserVote(forOption option: PollOption) -> PollVote? { + func currentUserVote(for option: PollOption) -> PollVote? { ownVotes.first(where: { $0.optionId == option.id }) } /// Returns a Boolean value indicating whether the current user has voted the given option. - func hasCurrentUserVoted(forOption option: PollOption) -> Bool { + func hasCurrentUserVoted(for option: PollOption) -> Bool { ownVotes.map(\.optionId).contains(option.id) } } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index e23fa9b843..cc0cad2997 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -20,22 +20,17 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { /// Whether the current option has been voted by the current user. public var isVotedByCurrentUser: Bool { - poll.hasCurrentUserVoted(forOption: option) + poll.hasCurrentUserVoted(for: option) } /// The number of votes this option has. public var voteCount: Int { - poll.voteCount(forOption: option) + poll.voteCount(for: option) } /// The ratio of the votes of this option in comparison with the number of total votes. public var voteRatio: Float { - poll.voteRatio(forOption: option) - } - - /// Whether the poll is closed and this option is the winner. - public var isWinner: Bool { - poll.isClosed && voteRatio == 1.0 + poll.voteRatio(for: option) } } @@ -143,12 +138,12 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { } voteCheckboxButton.isHidden = content.poll.isClosed - votesProgressView.progress = content.voteRatio - if content.isWinner { + if isOptionWinner { votesProgressView.tintColor = appearance.colorPalette.alternativeActiveTint } else { votesProgressView.tintColor = appearance.colorPalette.accentPrimary } + votesProgressView.progress = content.voteRatio } @objc func didTapOption(sender: Any?) { @@ -158,6 +153,14 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { onOptionTap?(option) } + /// Whether the poll is closed and this option is the winner. + /// By default it only returns true if this option is the only one with most votes. + /// The `poll.isOptionWithMaximumVotes()` function can be used in case you don't want the winner to be unique. + open var isOptionWinner: Bool { + guard let content = self.content else { return false } + return content.poll.isClosed && content.poll.isOptionWithMostVotes(content.option) + } + /// The authors of the latest votes of this option. open var latestVotesAuthors: [ChatUser] { content?.option.latestVotes diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index 15a3d33e3c..351e62250d 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -1103,7 +1103,7 @@ open class ChatMessageListVC: _ViewController, notificationFeedbackGenerator?.notificationOccurred(.success) - if let currentUserVote = poll.currentUserVote(forOption: option) { + if let currentUserVote = poll.currentUserVote(for: option) { pollController.removePollVote(voteId: currentUserVote.id) { [weak self] error in self?.didRemovePollVote(currentUserVote, for: option, in: message, error: error) } From 78f59744b483ccbcb2e481f9b3c05b67fc2a7e5d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 6 Aug 2024 16:59:26 +0100 Subject: [PATCH 23/47] Add channel list message preview text for polls --- .../ChatChannelListItemView.swift | 30 +++++++++++++++++++ Sources/StreamChatUI/Generated/L10n.swift | 14 +++++++++ .../Resources/en.lproj/Localizable.strings | 13 ++++++++ StreamChat.xcodeproj/project.pbxproj | 12 ++++---- 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift b/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift index 13c0526dec..46d848403a 100644 --- a/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift +++ b/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift @@ -150,6 +150,10 @@ open class ChatChannelListItemView: _View, ThemeProvider, SwiftUIRepresentable { } if let previewMessage = content.channel.previewMessage { + if let pollPreviewText = pollAttachmentPreviewText(for: previewMessage) { + return pollPreviewText + } + if isLastMessageVoiceRecording { return previewMessageForAudioRecordingMessage(messageText: previewMessage.text) } @@ -440,6 +444,7 @@ open class ChatChannelListItemView: _View, ThemeProvider, SwiftUIRepresentable { guard let attachment = previewMessage.allAttachments.first else { return nil } + let text = messageText switch attachment.type { case .audio: @@ -464,6 +469,31 @@ open class ChatChannelListItemView: _View, ThemeProvider, SwiftUIRepresentable { } } + /// The message preview text in case it is a Poll. + /// - Parameter previewMessage: The preview message of the channel. + /// - Returns: A string representing the message preview text. + open func pollAttachmentPreviewText(for previewMessage: ChatMessage) -> String? { + guard let poll = previewMessage.poll, !previewMessage.isDeleted else { return nil } + var components = ["📊"] + if let latestVoter = poll.latestVotesByOption.first?.latestVotes.first?.user { + if previewMessage.isSentByCurrentUser { + components.append(L10n.Message.Preview.pollYouVoted) + } else { + components.append(L10n.Message.Preview.pollSomeoneVoted(latestVoter.name ?? latestVoter.id)) + } + } else if let creator = poll.createdBy { + if previewMessage.isSentByCurrentUser { + components.append(L10n.Message.Preview.pollYouCreated) + } else { + components.append(L10n.Message.Preview.pollSomeoneCreated(creator.name ?? creator.id)) + } + } + if !poll.name.isEmpty { + components.append(poll.name) + } + return components.joined(separator: " ") + } + // MARK: - Channel preview when user is typing /// The formatted string containing the typing member. diff --git a/Sources/StreamChatUI/Generated/L10n.swift b/Sources/StreamChatUI/Generated/L10n.swift index 79cebe7383..1f7364e208 100644 --- a/Sources/StreamChatUI/Generated/L10n.swift +++ b/Sources/StreamChatUI/Generated/L10n.swift @@ -283,6 +283,20 @@ internal enum L10n { internal static var voteEnded: String { L10n.tr("Localizable", "message.polls.subtitle.voteEnded") } } } + internal enum Preview { + /// %@ created: + internal static func pollSomeoneCreated(_ p1: Any) -> String { + return L10n.tr("Localizable", "message.preview.poll-someone-created", String(describing: p1)) + } + /// %@ voted: + internal static func pollSomeoneVoted(_ p1: Any) -> String { + return L10n.tr("Localizable", "message.preview.poll-someone-voted", String(describing: p1)) + } + /// You created: + internal static var pollYouCreated: String { L10n.tr("Localizable", "message.preview.poll-you-created") } + /// You voted: + internal static var pollYouVoted: String { L10n.tr("Localizable", "message.preview.poll-you-voted") } + } internal enum Sending { /// UPLOADING FAILED internal static var attachmentUploadingFailed: String { L10n.tr("Localizable", "message.sending.attachment-uploading-failed") } diff --git a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings index c6060f3207..51c0a75706 100644 --- a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings +++ b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings @@ -232,7 +232,20 @@ // MARK: - Polls +/// Shown in the message poll view to describe that only one option is selectable. "message.polls.subtitle.selectOne" = "Select one"; +/// Shown in the message poll view to describe that multiple options are selectable. "message.polls.subtitle.selectOneOrMore" = "Select one or more"; +/// Shown in the message poll view to describe that multiple options are selectable up until a limit. "message.polls.subtitle.selectUpTo" = "Select up to %d"; +/// Shown in the message poll view to describe that the poll has ended. "message.polls.subtitle.voteEnded" = "Vote ended"; + +/// Shown in the channel list or thread list message preview in case someone voted a poll. +"message.preview.poll-someone-voted" = "%@ voted:"; +/// Shown in the channel list or thread list message preview in case the current user voted a poll. +"message.preview.poll-you-voted" = "You voted:"; +/// Shown in the channel list or thread list message preview in case someone created a poll. +"message.preview.poll-someone-created" = "%@ created:"; +/// Shown in the channel list or thread list message preview in case the current user created a poll. +"message.preview.poll-you-created" = "You created:"; diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index edfc00d8e5..dd275c425c 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -5216,17 +5216,17 @@ children = ( 7908823125432C6400896F03 /* StreamChatUI.h */, 7908823225432C6400896F03 /* Info.plist */, + C14A46572846636900EF498E /* SDKIdentifier.swift */, + BD4016352638411D00F09774 /* Deprecations.swift */, + 8850B929255C286B003AED69 /* Components.swift */, + BDDD1E982632C4C900BA007B /* Components+SwiftUI.swift */, + 792DD9FA256E67C6001DB91B /* ComponentsProvider.swift */, BDDD1EA22632C50200BA007B /* Appearance.swift */, + BDDD1EA52632C6D600BA007B /* AppearanceProvider.swift */, E7166CB125BED22B00B03B07 /* Appearance+ColorPalette.swift */, E7166CB925BED29200B03B07 /* Appearance+Fonts.swift */, E7166CE125BEE20600B03B07 /* Appearance+Images.swift */, BDDD1EA92632CE3C00BA007B /* Appearance+SwiftUI.swift */, - BDDD1EA52632C6D600BA007B /* AppearanceProvider.swift */, - 792DD9FA256E67C6001DB91B /* ComponentsProvider.swift */, - 8850B929255C286B003AED69 /* Components.swift */, - BDDD1E982632C4C900BA007B /* Components+SwiftUI.swift */, - BD4016352638411D00F09774 /* Deprecations.swift */, - C14A46572846636900EF498E /* SDKIdentifier.swift */, AD99C901279B06E9009DD9C5 /* Appearance+Formatters */, ADD328732C07E99700BAD0E9 /* ViewContainerBuilder */, ADECE08926AAEC63001AE411 /* ChatChannel */, From 9c6c77c1f993a9345fcaadb47c3a64262a2e5821 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 6 Aug 2024 17:14:38 +0100 Subject: [PATCH 24/47] Add poll quoted message text rendering --- .../QuotedChatMessageView/QuotedChatMessageView.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/StreamChatUI/CommonViews/QuotedChatMessageView/QuotedChatMessageView.swift b/Sources/StreamChatUI/CommonViews/QuotedChatMessageView/QuotedChatMessageView.swift index 6b9fbce67a..c120be5a06 100644 --- a/Sources/StreamChatUI/CommonViews/QuotedChatMessageView/QuotedChatMessageView.swift +++ b/Sources/StreamChatUI/CommonViews/QuotedChatMessageView/QuotedChatMessageView.swift @@ -185,6 +185,10 @@ open class QuotedChatMessageView: _View, ThemeProvider, SwiftUIRepresentable { let translatedText = content?.message.translatedText(for: currentUserLang) { textView.text = translatedText } + + if let poll = message.poll, !message.isDeleted { + textView.text = "📊 \(poll.name)" + } } /// Sets the text of the quoted message. From 95cb90d6772b9794444c94f104edaeb0819104c3 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 6 Aug 2024 18:06:45 +0100 Subject: [PATCH 25/47] Add View Results and End Button to the Poll Attachment View --- .../Attachments/Poll/PollAttachmentView.swift | 48 ++++++++++++++++--- .../Poll/PollAttachmentViewInjector.swift | 3 +- .../ChatMessage/ChatMessageContentView.swift | 3 ++ .../ChatMessageList/ChatMessageListVC.swift | 4 +- Sources/StreamChatUI/Generated/L10n.swift | 6 +++ .../Resources/en.lproj/Localizable.strings | 4 ++ 6 files changed, 60 insertions(+), 8 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift index 30a2707429..7da4419bfb 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift @@ -10,9 +10,11 @@ open class PollAttachmentView: _View, ThemeProvider { /// The content data of the poll attachment view. public struct Content { public var poll: Poll + public var currentUserId: UserId - public init(poll: Poll) { + public init(poll: Poll, currentUserId: UserId) { self.poll = poll + self.currentUserId = currentUserId } } @@ -48,6 +50,32 @@ open class PollAttachmentView: _View, ThemeProvider { .withoutAutoresizingMaskConstraints .withAccessibilityIdentifier(identifier: "optionsListView") + /// The button that when tapped it shows the polls results. + open private(set) lazy var pollResultsButton = UIButton() + .withoutAutoresizingMaskConstraints + .withAccessibilityIdentifier(identifier: "pollResultsButton") + + /// The button that when tapped it shows the polls results. + open private(set) lazy var endPollButton = UIButton() + .withoutAutoresizingMaskConstraints + .withAccessibilityIdentifier(identifier: "endPollButton") + + /// The header view composed by the poll title and subtile labels. + open private(set) lazy var headerView: UIView = { + VContainer(spacing: 2) { + pollTitleLabel + pollSubtitleLabel + } + }() + + /// The footer view composed by a stack of buttons that can perform actions on the poll. + open private(set) lazy var footerView: UIView = { + VContainer(spacing: 2) { + pollResultsButton + endPollButton + } + }() + // MARK: - Lifecycle override open func setUpAppearance() { @@ -58,19 +86,21 @@ open class PollAttachmentView: _View, ThemeProvider { pollTitleLabel.numberOfLines = 0 pollSubtitleLabel.font = appearance.fonts.caption1 pollSubtitleLabel.textColor = appearance.colorPalette.textLowEmphasis + pollResultsButton.setTitleColor(appearance.colorPalette.accentPrimary, for: .normal) + pollResultsButton.titleLabel?.font = appearance.fonts.subheadline + endPollButton.setTitleColor(appearance.colorPalette.accentPrimary, for: .normal) + endPollButton.titleLabel?.font = appearance.fonts.subheadline } override open func setUpLayout() { super.setUpLayout() - directionalLayoutMargins = .init(top: 12, leading: 10, bottom: 12, trailing: 12) + directionalLayoutMargins = .init(top: 12, leading: 10, bottom: 10, trailing: 12) VContainer(spacing: 14) { - VContainer(spacing: 2) { - pollTitleLabel - pollSubtitleLabel - } + headerView optionListView + footerView } .embedToMargins(in: self) } @@ -84,8 +114,14 @@ open class PollAttachmentView: _View, ThemeProvider { pollTitleLabel.text = content.poll.name pollSubtitleLabel.text = subtitleText + pollResultsButton.setTitle(L10n.Message.Polls.Button.viewResults, for: .normal) + endPollButton.setTitle(L10n.Message.Polls.Button.endVote, for: .normal) optionListView.onOptionTap = onOptionTap optionListView.content = .init(poll: content.poll) + + let isPollCreatedByCurrentUser = content.poll.createdBy?.id == content.currentUserId + let shouldShowEndPollButton = !content.poll.isClosed && isPollCreatedByCurrentUser + endPollButton.isHidden = !shouldShowEndPollButton } /// The subtitle text. By default it displays the current voting state. diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift index b0a41fb1af..744cfdfb7f 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift @@ -40,6 +40,7 @@ public class PollAttachmentViewInjector: AttachmentViewInjector { guard let message = contentView.content else { return } guard let poll = message.poll else { return } + guard let currentUserId = contentView.currentUserId else { return } pollAttachmentView.onOptionTap = { [weak self] option in guard let self = self else { return } @@ -49,6 +50,6 @@ public class PollAttachmentViewInjector: AttachmentViewInjector { for: message ) } - pollAttachmentView.content = .init(poll: poll) + pollAttachmentView.content = .init(poll: poll, currentUserId: currentUserId) } } diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessage/ChatMessageContentView.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessage/ChatMessageContentView.swift index c082378c1e..106b6cc8da 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessage/ChatMessageContentView.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessage/ChatMessageContentView.swift @@ -91,6 +91,9 @@ open class ChatMessageContentView: _View, ThemeProvider, UITextViewDelegate { didSet { updateContentIfNeeded() } } + /// The current logged in user id. + public var currentUserId: UserId? + /// A formatter that converts the message timestamp to textual representation. public lazy var timestampFormatter: MessageTimestampFormatter = appearance.formatters.messageTimestamp diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index 351e62250d..8e21dbeaf7 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -774,7 +774,8 @@ open class ChatMessageListVC: _ViewController, guard let message = message, - let channel = dataSource?.channel(for: self) + let channel = dataSource?.channel(for: self), + let currentUserId = client.currentUserId else { return cell } @@ -782,6 +783,7 @@ open class ChatMessageListVC: _ViewController, cell.messageContentView?.delegate = self cell.messageContentView?.channel = channel cell.messageContentView?.content = message + cell.messageContentView?.currentUserId = currentUserId /// Process cell decorations cell.setDecoration(for: .header, decorationView: delegate?.chatMessageListVC(self, headerViewForMessage: message, at: indexPath)) diff --git a/Sources/StreamChatUI/Generated/L10n.swift b/Sources/StreamChatUI/Generated/L10n.swift index 1f7364e208..2fd0f2707a 100644 --- a/Sources/StreamChatUI/Generated/L10n.swift +++ b/Sources/StreamChatUI/Generated/L10n.swift @@ -270,6 +270,12 @@ internal enum L10n { internal static var title: String { L10n.tr("Localizable", "message.moderation.title") } } internal enum Polls { + internal enum Button { + /// End Vote + internal static var endVote: String { L10n.tr("Localizable", "message.polls.button.endVote") } + /// View Results + internal static var viewResults: String { L10n.tr("Localizable", "message.polls.button.viewResults") } + } internal enum Subtitle { /// Select one internal static var selectOne: String { L10n.tr("Localizable", "message.polls.subtitle.selectOne") } diff --git a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings index 51c0a75706..071dd34b10 100644 --- a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings +++ b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings @@ -240,6 +240,10 @@ "message.polls.subtitle.selectUpTo" = "Select up to %d"; /// Shown in the message poll view to describe that the poll has ended. "message.polls.subtitle.voteEnded" = "Vote ended"; +/// Shown in the message poll view on the button to end the poll. +"message.polls.button.endVote" = "End Vote"; +/// Shown in the message poll view on the button to view the poll results. +"message.polls.button.viewResults" = "View Results"; /// Shown in the channel list or thread list message preview in case someone voted a poll. "message.preview.poll-someone-voted" = "%@ voted:"; From bcdb9060c52cad3fd6adf16b1b97992b02d285fc Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 7 Aug 2024 01:53:12 +0100 Subject: [PATCH 26/47] Fix poll option label width ui glitch --- .../PollAttachmentOptionListItemView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index cc0cad2997..73e2dbb86d 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -104,6 +104,7 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { HContainer(spacing: 3) { voteCheckboxButton + .width(25) VContainer(spacing: 3) { HContainer(spacing: 4, alignment: .top) { optionNameLabel From ff556d686343ce26abf034e644c7b7aff59f4301 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 7 Aug 2024 16:07:17 +0100 Subject: [PATCH 27/47] Added End Poll functionality --- .../PollAttachmentOptionListItemView.swift | 6 +- .../Attachments/Poll/PollAttachmentView.swift | 35 +++++++++-- .../Poll/PollAttachmentViewInjector.swift | 39 ++++++++---- .../ChatMessageList/ChatMessageListVC.swift | 59 +++++++++++++++---- Sources/StreamChatUI/Generated/L10n.swift | 6 ++ .../Resources/en.lproj/Localizable.strings | 5 ++ 6 files changed, 120 insertions(+), 30 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index 73e2dbb86d..e7f193f220 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -102,10 +102,10 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { override open func setUpLayout() { super.setUpLayout() - HContainer(spacing: 3) { + HContainer(spacing: 2) { voteCheckboxButton .width(25) - VContainer(spacing: 3) { + VContainer(spacing: 4) { HContainer(spacing: 4, alignment: .top) { optionNameLabel Spacer() @@ -116,7 +116,7 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { } votesProgressView } - .height(greaterThanOrEqualTo: 27) + .height(greaterThanOrEqualTo: 28) } .embed(in: self) } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift index 7da4419bfb..b1edd9af88 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift @@ -28,6 +28,12 @@ open class PollAttachmentView: _View, ThemeProvider { /// A closure that is triggered whenever the option is tapped either from the button or the item itself. public var onOptionTap: ((PollOption) -> Void)? + /// A closure that is triggered whenever the end poll button is tapped. + public var onEndTap: ((Poll) -> Void)? + + /// A closure that is triggered whenever the poll results button is tapped. + public var onResultsTap: ((Poll) -> Void)? + // MARK: - UI Components /// A label which by default displays the title of the Poll. @@ -78,18 +84,25 @@ open class PollAttachmentView: _View, ThemeProvider { // MARK: - Lifecycle + override open func setUp() { + super.setUp() + + pollResultsButton.addTarget(self, action: #selector(didTapResultsButton(sender:)), for: .touchUpInside) + endPollButton.addTarget(self, action: #selector(didTapEndPollButton(sender:)), for: .touchUpInside) + } + override open func setUpAppearance() { super.setUpAppearance() clipsToBounds = true - pollTitleLabel.font = appearance.fonts.subheadlineBold + pollTitleLabel.font = appearance.fonts.headlineBold pollTitleLabel.numberOfLines = 0 pollSubtitleLabel.font = appearance.fonts.caption1 pollSubtitleLabel.textColor = appearance.colorPalette.textLowEmphasis pollResultsButton.setTitleColor(appearance.colorPalette.accentPrimary, for: .normal) - pollResultsButton.titleLabel?.font = appearance.fonts.subheadline + pollResultsButton.titleLabel?.font = appearance.fonts.subheadline.withSize(16) endPollButton.setTitleColor(appearance.colorPalette.accentPrimary, for: .normal) - endPollButton.titleLabel?.font = appearance.fonts.subheadline + endPollButton.titleLabel?.font = appearance.fonts.subheadline.withSize(16) } override open func setUpLayout() { @@ -114,16 +127,28 @@ open class PollAttachmentView: _View, ThemeProvider { pollTitleLabel.text = content.poll.name pollSubtitleLabel.text = subtitleText - pollResultsButton.setTitle(L10n.Message.Polls.Button.viewResults, for: .normal) - endPollButton.setTitle(L10n.Message.Polls.Button.endVote, for: .normal) + optionListView.onOptionTap = onOptionTap optionListView.content = .init(poll: content.poll) + pollResultsButton.setTitle(L10n.Message.Polls.Button.viewResults, for: .normal) + endPollButton.setTitle(L10n.Message.Polls.Button.endVote, for: .normal) + let isPollCreatedByCurrentUser = content.poll.createdBy?.id == content.currentUserId let shouldShowEndPollButton = !content.poll.isClosed && isPollCreatedByCurrentUser endPollButton.isHidden = !shouldShowEndPollButton } + @objc open func didTapResultsButton(sender: Any?) { + guard let poll = content?.poll else { return } + onResultsTap?(poll) + } + + @objc open func didTapEndPollButton(sender: Any?) { + guard let poll = content?.poll else { return } + onEndTap?(poll) + } + /// The subtitle text. By default it displays the current voting state. open var subtitleText: String { guard let content = self.content else { return "" } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift index 744cfdfb7f..dcc8e6c018 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift @@ -10,8 +10,22 @@ public protocol PollAttachmentViewInjectorDelegate: ChatMessageContentViewDelega /// Called when the user taps in an option of the poll. func pollAttachmentView( _ pollAttachmentView: PollAttachmentView, - didTapOnOption option: PollOption, - for message: ChatMessage + didTapOption option: PollOption, + in message: ChatMessage + ) + + /// Called when the user ends the poll. + func pollAttachmentView( + _ pollAttachmentView: PollAttachmentView, + didTapEndPoll poll: Poll, + in message: ChatMessage + ) + + /// Called when the user taps on the button to show the poll results. + func pollAttachmentView( + _ pollAttachmentView: PollAttachmentView, + didTapPollResults poll: Poll, + in message: ChatMessage ) } @@ -37,19 +51,24 @@ public class PollAttachmentViewInjector: AttachmentViewInjector { override open func contentViewDidUpdateContent() { super.contentViewDidUpdateContent() - + guard let message = contentView.content else { return } guard let poll = message.poll else { return } guard let currentUserId = contentView.currentUserId else { return } - + + pollAttachmentView.content = .init(poll: poll, currentUserId: currentUserId) + pollAttachmentView.onOptionTap = { [weak self] option in guard let self = self else { return } - pollAttachmentViewDelegate?.pollAttachmentView( - self.pollAttachmentView, - didTapOnOption: option, - for: message - ) + pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapOption: option, in: message) + } + pollAttachmentView.onEndTap = { [weak self] poll in + guard let self = self else { return } + pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapEndPoll: poll, in: message) + } + pollAttachmentView.onResultsTap = { [weak self] poll in + guard let self = self else { return } + pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapPollResults: poll, in: message) } - pollAttachmentView.content = .init(poll: poll, currentUserId: currentUserId) } } diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index 8e21dbeaf7..2ab84d5790 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -1083,28 +1083,19 @@ open class ChatMessageListVC: _ViewController, open func pollAttachmentView( _ pollAttachmentView: PollAttachmentView, - didTapOnOption option: PollOption, - for message: ChatMessage + didTapOption option: PollOption, + in message: ChatMessage ) { guard let poll = message.poll else { return } if pollOptionsCastingVote.contains(option.id) { return } - pollOptionsCastingVote.insert(option.id) - let pollController: PollController - if let existingPollController = self.pollController, poll.id == existingPollController.pollId { - pollController = existingPollController - } else { - pollController = client.pollController(messageId: message.id, pollId: poll.id) - pollOptionsCastingVote = [] - } - self.pollController = pollController - notificationFeedbackGenerator?.notificationOccurred(.success) + let pollController = makePollController(for: poll, in: message) if let currentUserVote = poll.currentUserVote(for: option) { pollController.removePollVote(voteId: currentUserVote.id) { [weak self] error in self?.didRemovePollVote(currentUserVote, for: option, in: message, error: error) @@ -1116,6 +1107,37 @@ open class ChatMessageListVC: _ViewController, } } + open func pollAttachmentView( + _ pollAttachmentView: PollAttachmentView, + didTapPollResults poll: Poll, + in message: ChatMessage + ) { + print("show view results") + } + + open func pollAttachmentView( + _ pollAttachmentView: PollAttachmentView, + didTapEndPoll poll: Poll, + in message: ChatMessage + ) { + let pollController = makePollController(for: poll, in: message) + let alert = UIAlertController( + title: nil, + message: L10n.Alert.Poll.endTitle, + preferredStyle: .actionSheet + ) + alert.addAction(.init(title: L10n.Alert.Poll.end, style: .destructive, handler: { _ in + pollController.closePoll { [weak self] error in + let isSuccess = error == nil + self?.notificationFeedbackGenerator?.notificationOccurred(isSuccess ? .success : .error) + } + })) + alert.addAction(.init(title: L10n.Alert.Actions.cancel, style: .cancel)) + present(alert, animated: true) + } + + // MARK: Poll Requests Completion Handlers + /// Called when removing a poll vote completed. /// - Parameters: /// - vote: The vote that was removed. @@ -1150,6 +1172,19 @@ open class ChatMessageListVC: _ViewController, } } + /// Creates the poll controller for the poll that is being interacted at the moment. + private func makePollController(for poll: Poll, in message: ChatMessage) -> PollController { + let pollController: PollController + if let existingPollController = self.pollController, poll.id == existingPollController.pollId { + pollController = existingPollController + } else { + pollController = client.pollController(messageId: message.id, pollId: poll.id) + pollOptionsCastingVote = [] + } + self.pollController = pollController + return pollController + } + // MARK: - Deprecations /// Jump to a given message. diff --git a/Sources/StreamChatUI/Generated/L10n.swift b/Sources/StreamChatUI/Generated/L10n.swift index 2fd0f2707a..2c63bd42d8 100644 --- a/Sources/StreamChatUI/Generated/L10n.swift +++ b/Sources/StreamChatUI/Generated/L10n.swift @@ -24,6 +24,12 @@ internal enum L10n { /// Ok internal static var ok: String { L10n.tr("Localizable", "alert.actions.ok") } } + internal enum Poll { + /// End + internal static var end: String { L10n.tr("Localizable", "alert.poll.end") } + /// Nobody will be able to vote in this poll anymore. + internal static var endTitle: String { L10n.tr("Localizable", "alert.poll.end-title") } + } } internal enum Attachment { diff --git a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings index 071dd34b10..4bf665bce8 100644 --- a/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings +++ b/Sources/StreamChatUI/Resources/en.lproj/Localizable.strings @@ -253,3 +253,8 @@ "message.preview.poll-someone-created" = "%@ created:"; /// Shown in the channel list or thread list message preview in case the current user created a poll. "message.preview.poll-you-created" = "You created:"; + +/// Alert title when closing a poll. +"alert.poll.end-title" = "Nobody will be able to vote in this poll anymore."; +/// Alert end action when closing a poll. +"alert.poll.end" = "End"; From a00f0878a719aa997761e09979c94896cfcebf8a Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 14 Aug 2024 16:51:58 +0100 Subject: [PATCH 28/47] Add isOptionWinner and isOptionOneOfTheWinners to Poll --- Sources/StreamChat/Models/Poll.swift | 10 ++++++++++ .../PollAttachmentOptionListItemView.swift | 4 +--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChat/Models/Poll.swift b/Sources/StreamChat/Models/Poll.swift index 2436919ee1..d5a5d8c3c3 100644 --- a/Sources/StreamChat/Models/Poll.swift +++ b/Sources/StreamChat/Models/Poll.swift @@ -80,6 +80,16 @@ public extension Poll { voteCountsByOption?.values.max() ?? 0 } + /// Whether the poll is already closed and the provided option is the one, and **the only one** with the most votes. + func isOptionWinner(_ option: PollOption) -> Bool { + isClosed && isOptionWithMostVotes(option) + } + + /// Whether the poll is already close and the provided option is one of that has the most votes. + func isOptionOneOfTheWinners(_ option: PollOption) -> Bool { + isClosed && isOptionWithMaximumVotes(option) + } + /// Whether the provided option is the one, and **the only one** with the most votes. func isOptionWithMostVotes(_ option: PollOption) -> Bool { let optionsWithMostVotes = voteCountsByOption?.filter { $0.value == currentMaximumVoteCount } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index e7f193f220..80b82d3da2 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -155,11 +155,9 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { } /// Whether the poll is closed and this option is the winner. - /// By default it only returns true if this option is the only one with most votes. - /// The `poll.isOptionWithMaximumVotes()` function can be used in case you don't want the winner to be unique. open var isOptionWinner: Bool { guard let content = self.content else { return false } - return content.poll.isClosed && content.poll.isOptionWithMostVotes(content.option) + return content.poll.isOptionWinner(content.option) } /// The authors of the latest votes of this option. From 4d1882690105ed2eda9054f290c1a4830675f9bc Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 8 Aug 2024 19:19:20 +0100 Subject: [PATCH 29/47] Fix message with Polls not showing when long pressing --- .../MessageActionsPopup/MessageActionsTransitionController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/StreamChatUI/MessageActionsPopup/MessageActionsTransitionController.swift b/Sources/StreamChatUI/MessageActionsPopup/MessageActionsTransitionController.swift index dca52b4936..24fcc7c083 100644 --- a/Sources/StreamChatUI/MessageActionsPopup/MessageActionsTransitionController.swift +++ b/Sources/StreamChatUI/MessageActionsPopup/MessageActionsTransitionController.swift @@ -258,6 +258,7 @@ open class ChatMessageActionsTransitionController: NSObject, UIViewControllerTra messageView.setUpLayoutIfNeeded(options: messageLayoutOptions, attachmentViewInjectorType: messageAttachmentInjectorType) messageView.channel = originalView.channel messageView.content = message + messageView.currentUserId = originalView.currentUserId messageView.delegate = originalView.delegate return messageView From 8ea00eeab8c333e9623d29bc7f4acc13d0327ff0 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Thu, 8 Aug 2024 20:34:52 +0100 Subject: [PATCH 30/47] Fix poll controller with incorrect data in message list --- .../ChatMessageList/Attachments/Poll/PollAttachmentView.swift | 1 - .../Attachments/Poll/PollAttachmentViewInjector.swift | 4 ++-- Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift | 1 - .../StreamChatUI/CommonViews/Buttons/CheckboxControl.swift | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift index b1edd9af88..5eb5d2cc53 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentView.swift @@ -18,7 +18,6 @@ open class PollAttachmentView: _View, ThemeProvider { } } - /// The object responsible to public var content: Content? { didSet { updateContentIfNeeded() diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift index dcc8e6c018..24d2792489 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift @@ -56,8 +56,6 @@ public class PollAttachmentViewInjector: AttachmentViewInjector { guard let poll = message.poll else { return } guard let currentUserId = contentView.currentUserId else { return } - pollAttachmentView.content = .init(poll: poll, currentUserId: currentUserId) - pollAttachmentView.onOptionTap = { [weak self] option in guard let self = self else { return } pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapOption: option, in: message) @@ -70,5 +68,7 @@ public class PollAttachmentViewInjector: AttachmentViewInjector { guard let self = self else { return } pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapPollResults: poll, in: message) } + + pollAttachmentView.content = .init(poll: poll, currentUserId: currentUserId) } } diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index 2ab84d5790..c44e643488 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -139,7 +139,6 @@ open class ChatMessageListVC: _ViewController, /// A feedbackGenerator that will be used to provide feedback when a task is successful or not. /// You can disable the feedback generator by overriding to `nil`. open private(set) lazy var notificationFeedbackGenerator: UINotificationFeedbackGenerator? = UINotificationFeedbackGenerator() - /// A feedbackGenerator that will be used to provide feedback when a task is successful or not. /// A component responsible to manage the swipe to quote reply logic. open lazy var swipeToReplyGestureHandler = SwipeToReplyGestureHandler(listView: self.listView) diff --git a/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift index f344307e23..daf3d80a47 100644 --- a/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift +++ b/Sources/StreamChatUI/CommonViews/Buttons/CheckboxControl.swift @@ -5,7 +5,7 @@ import StreamChat import UIKit -/// A view to check/uncheck an option a long with a label describing the option. +/// A view to check/uncheck an option along with a label describing the option. open class CheckboxControl: _Control, AppearanceProvider { // MARK: - Properties From 97b5b2fd0d32acb404fc67a2a5ac7298095bdcaa Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 13:15:49 +0100 Subject: [PATCH 31/47] Sort the `latestVotes` and `latestAnswers` in the LLC --- Sources/StreamChat/Database/DTOs/PollDTO.swift | 4 +++- Sources/StreamChat/Database/DTOs/PollOptionDTO.swift | 4 +++- .../PollAttachmentOptionListItemView.swift | 1 - 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChat/Database/DTOs/PollDTO.swift b/Sources/StreamChat/Database/DTOs/PollDTO.swift index e9ec0c01e3..b13a9e1023 100644 --- a/Sources/StreamChat/Database/DTOs/PollDTO.swift +++ b/Sources/StreamChat/Database/DTOs/PollDTO.swift @@ -89,7 +89,9 @@ extension PollDTO { maxVotesAllowed: maxVotesAllowed?.intValue, votingVisibility: votingVisibility(from: votingVisibility), createdBy: createdBy?.asModel(), - latestAnswers: latestAnswers.map { try $0.asModel() }, + latestAnswers: latestAnswers + .map { try $0.asModel() } + .sorted(by: { $0.createdAt < $1.createdAt }), options: optionsArray.map { try $0.asModel() }, latestVotesByOption: latestVotesByOption.map { try $0.asModel() }, ownVotes: ownVotes.map { try $0.asModel() } diff --git a/Sources/StreamChat/Database/DTOs/PollOptionDTO.swift b/Sources/StreamChat/Database/DTOs/PollOptionDTO.swift index cf46e7e539..d733e2cd5b 100644 --- a/Sources/StreamChat/Database/DTOs/PollOptionDTO.swift +++ b/Sources/StreamChat/Database/DTOs/PollOptionDTO.swift @@ -56,7 +56,9 @@ extension PollOptionDTO { return PollOption( id: id, text: text, - latestVotes: try latestVotes.map { try $0.asModel() }, + latestVotes: try latestVotes + .map { try $0.asModel() } + .sorted(by: { $0.createdAt < $1.createdAt }), extraData: extraData ) } diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index 80b82d3da2..e44262627d 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -163,7 +163,6 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { /// The authors of the latest votes of this option. open var latestVotesAuthors: [ChatUser] { content?.option.latestVotes - .sorted(by: { $0.createdAt > $1.createdAt }) .compactMap(\.user) .suffix(2) ?? [] } From 0227520629789dd09d35fe1a18d249f9c8a60f16 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 17:10:00 +0100 Subject: [PATCH 32/47] Add test coverage to Poll domain helpers --- StreamChat.xcodeproj/project.pbxproj | 4 + .../Extensions/Unique/Poll+Unique.swift | 3 +- .../Payloads/PollPayload_Tests.swift | 2 +- Tests/StreamChatTests/Models/Poll_Tests.swift | 476 ++++++++++++++++++ 4 files changed, 483 insertions(+), 2 deletions(-) create mode 100644 Tests/StreamChatTests/Models/Poll_Tests.swift diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index dd275c425c..172502e7e7 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1384,6 +1384,7 @@ AD0F7F192B613EDB00914C4C /* TextLinkDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0F7F162B6139D500914C4C /* TextLinkDetector.swift */; }; AD0F7F1A2B613EDC00914C4C /* TextLinkDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0F7F162B6139D500914C4C /* TextLinkDetector.swift */; }; AD0F7F1C2B616DD000914C4C /* TextLinkDetector_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0F7F1B2B616DD000914C4C /* TextLinkDetector_Tests.swift */; }; + AD142ACA2C739D6600ABCC1F /* Poll_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */; }; AD154C6D25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD154C6C25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift */; }; AD158B6526C1873000C104CD /* ChatThreadVC+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD158B6326C1872D00C104CD /* ChatThreadVC+SwiftUI.swift */; }; AD158B6626C1876800C104CD /* ChatChannelVC+SwiftUI_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B059EC267116B40024CE90 /* ChatChannelVC+SwiftUI_Tests.swift */; }; @@ -4094,6 +4095,7 @@ AD0F7F122B5ED64600914C4C /* ComposerLinkPreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerLinkPreviewView.swift; sourceTree = ""; }; AD0F7F162B6139D500914C4C /* TextLinkDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkDetector.swift; sourceTree = ""; }; AD0F7F1B2B616DD000914C4C /* TextLinkDetector_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkDetector_Tests.swift; sourceTree = ""; }; + AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poll_Tests.swift; sourceTree = ""; }; AD154C6C25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatCommandSuggestionView_Tests.swift; sourceTree = ""; }; AD158B6326C1872D00C104CD /* ChatThreadVC+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChatThreadVC+SwiftUI.swift"; sourceTree = ""; }; AD17CDF827E4DB2700E0D092 /* PushProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushProvider.swift; sourceTree = ""; }; @@ -7078,6 +7080,7 @@ 796CBC6425FBAD12003299B0 /* Member_Tests.swift */, 88EA9AFB25472269007EE76B /* MessageReactionType_Tests.swift */, C10B0A0B29D20DE1006517FC /* User_Tests.swift */, + AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */, A364D0A127D0C8930029857A /* Attachments */, ); path = Models; @@ -11499,6 +11502,7 @@ 84C85B3F2BF2394E008A7AA5 /* PollController_Tests.swift in Sources */, 84D5BC71277B61B900A65C75 /* PinnedMessagesSortingKey_Tests.swift in Sources */, 88381E8725825A240047A6A3 /* AttachmentEndpoints_Tests.swift in Sources */, + AD142ACA2C739D6600ABCC1F /* Poll_Tests.swift in Sources */, 84DCB855269F56A7006CDF32 /* EventsController+SwiftUI_Tests.swift in Sources */, 79B5517724E595DA00CE9FEC /* CurrentUserPayloads_Tests.swift in Sources */, 40B345F829C46AE500B96027 /* AudioPlaybackRate_Tests.swift in Sources */, diff --git a/TestTools/StreamChatTestTools/Extensions/Unique/Poll+Unique.swift b/TestTools/StreamChatTestTools/Extensions/Unique/Poll+Unique.swift index c803fd39f4..28e2a757ee 100644 --- a/TestTools/StreamChatTestTools/Extensions/Unique/Poll+Unique.swift +++ b/TestTools/StreamChatTestTools/Extensions/Unique/Poll+Unique.swift @@ -26,7 +26,8 @@ extension Poll { createdBy: .mock(id: .unique), latestAnswers: [], options: [], - latestVotesByOption: [] + latestVotesByOption: [], + ownVotes: [] ) } } diff --git a/Tests/StreamChatTests/APIClient/Endpoints/Payloads/PollPayload_Tests.swift b/Tests/StreamChatTests/APIClient/Endpoints/Payloads/PollPayload_Tests.swift index 3079a3f7d3..dbf1ca2953 100644 --- a/Tests/StreamChatTests/APIClient/Endpoints/Payloads/PollPayload_Tests.swift +++ b/Tests/StreamChatTests/APIClient/Endpoints/Payloads/PollPayload_Tests.swift @@ -24,7 +24,7 @@ final class PollPayload_Tests: XCTestCase { XCTAssertEqual(payload.answersCount, 0) XCTAssertNil(payload.voteCountsByOption) XCTAssertTrue(payload.latestVotesByOption?.isEmpty == true) - XCTAssertEqual(payload.ownVotes.count, 1) + XCTAssertEqual(payload.ownVotes?.count, 1) XCTAssertEqual(payload.createdById, "luke_skywalker") XCTAssertNotNil(payload.createdBy) } diff --git a/Tests/StreamChatTests/Models/Poll_Tests.swift b/Tests/StreamChatTests/Models/Poll_Tests.swift new file mode 100644 index 0000000000..ebd91d9948 --- /dev/null +++ b/Tests/StreamChatTests/Models/Poll_Tests.swift @@ -0,0 +1,476 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +@testable import StreamChat +@testable import StreamChatTestTools +import XCTest + +final class Poll_Tests: XCTestCase { + func test_currentMaximumVoteCount() { + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 5, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertEqual(poll.currentMaximumVoteCount, 10) + } + + func test_isOptionWinner_whenClosed_whenMostVotes_returnsTrue() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 5], + isClosed: true, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertTrue(poll.isOptionWinner(option)) + } + + func test_isOptionWinner_whenClosed_whenOneOfMostVotes_returnsFalse() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 10], + isClosed: true, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertFalse(poll.isOptionWinner(option)) + } + + func test_isOptionWinner_whenNotClosed_returnsFalse() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 5], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertFalse(poll.isOptionWinner(option)) + } + + func test_isOptionOneOfTheWinners_whenClosed_whenOneOfMostVotes_returnsTrue() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 25, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 10, "option3": 5], + isClosed: true, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertTrue(poll.isOptionOneOfTheWinners(option)) + } + + func test_isOptionOneOfTheWinners_whenNotClosed_whenOneOfMostVotes_returnsFalse() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertFalse(poll.isOptionOneOfTheWinners(option)) + } + + func test_isOptionWithMostVotes_whenTheOnlyOneWithMostVotes_returnsTrue() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 5], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertTrue(poll.isOptionWithMostVotes(option)) + } + + func test_isOptionWithMostVotes_whenOneOfTheMaximumVotes_returnsFalse() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertFalse(poll.isOptionWithMostVotes(option)) + } + + func test_isOptionWithMaximumVotes_whenOneOfTheMostVotes_returnsTrue() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertTrue(poll.isOptionWithMaximumVotes(option)) + } + + func test_isOptionWithMaximumVotes_whenOneOfTheLeastVotes_returnsFalse() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 5, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertFalse(poll.isOptionWithMaximumVotes(option)) + } + + func test_voteCountForOption() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 5, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertEqual(poll.voteCount(for: option), 5) + } + + func test_voteRatioForOption() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 5, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertEqual(poll.voteRatio(for: option), 0.5) + } + + func test_voteRatioForOption_whenOneOfTheMostVotes() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 10, "option2": 10, "option3": 5], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertEqual(poll.voteRatio(for: option), 1) + } + + func test_voteRatioForOption_whenCurrentMaxVoteCountIsZero_returnZero() { + let option = PollOption(id: "option1", text: "Option 1") + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 0, + extraData: [:], + voteCountsByOption: [:], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [] + ) + + XCTAssertEqual(poll.voteRatio(for: option), 0) + } + + func test_currentUserVoteForOption() { + let option = PollOption(id: "option1", text: "Option 1") + let vote = PollVote( + id: .unique, + createdAt: .unique, + updatedAt: .unique, + pollId: "123", + optionId: "option1", + isAnswer: false, + answerText: nil, + user: .unique + ) + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 5, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [vote] + ) + + XCTAssertEqual(poll.currentUserVote(for: option), vote) + } + + func test_hasCurrentUserVotedForOption() { + let option = PollOption(id: "option1", text: "Option 1") + let vote = PollVote( + id: .unique, + createdAt: .unique, + updatedAt: .unique, + pollId: "123", + optionId: "option1", + isAnswer: false, + answerText: nil, + user: .unique + ) + let poll = Poll( + allowAnswers: true, + allowUserSuggestedOptions: false, + answersCount: 10, + createdAt: Date(), + pollDescription: "Sample poll", + enforceUniqueVote: true, + id: "123", + name: "Test Poll", + updatedAt: nil, + voteCount: 20, + extraData: [:], + voteCountsByOption: ["option1": 5, "option2": 10], + isClosed: false, + maxVotesAllowed: 1, + votingVisibility: .public, + createdBy: nil, + latestAnswers: [], + options: [], + latestVotesByOption: [], + ownVotes: [vote] + ) + + XCTAssertTrue(poll.hasCurrentUserVoted(for: option)) + } +} From 21d1cc66b7014cecc4450a286c6363e8810e1f1a Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 18:30:53 +0100 Subject: [PATCH 33/47] Add Test Coverage to Poll Message Preview in Channel List --- .../ChatChannelListItemView.swift | 2 +- StreamChat.xcodeproj/project.pbxproj | 4 + .../Mocks/Models + Extensions/Poll_Mock.swift | 77 +++++++++++++ .../ChatChannelListItemView_Tests.swift | 107 +++++++++++++++++- ...LatestVoterIsAnotherUser.default-light.png | Bin 0 -> 12742 bytes ...LatestVoterIsCurrentUser.default-light.png | Bin 0 -> 12293 bytes ...CurrentUser.extraExtraExtraLarge-light.png | Bin 0 -> 14415 bytes ...sCurrentUser.rightToLeftLayout-default.png | Bin 0 -> 12345 bytes ...henLatestVoterIsCurrentUser.small-dark.png | Bin 0 -> 11646 bytes ...PollCreatedByAnotherUser.default-light.png | Bin 0 -> 12979 bytes ...PollCreatedByCurrentUser.default-light.png | Bin 0 -> 12481 bytes 11 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 TestTools/StreamChatTestTools/Mocks/Models + Extensions/Poll_Mock.swift create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsAnotherUser.default-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.default-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.extraExtraExtraLarge-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.rightToLeftLayout-default.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.small-dark.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenPollCreatedByAnotherUser.default-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenPollCreatedByCurrentUser.default-light.png diff --git a/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift b/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift index 46d848403a..0d1dbb3019 100644 --- a/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift +++ b/Sources/StreamChatUI/ChatChannelList/ChatChannelListItemView.swift @@ -476,7 +476,7 @@ open class ChatChannelListItemView: _View, ThemeProvider, SwiftUIRepresentable { guard let poll = previewMessage.poll, !previewMessage.isDeleted else { return nil } var components = ["📊"] if let latestVoter = poll.latestVotesByOption.first?.latestVotes.first?.user { - if previewMessage.isSentByCurrentUser { + if previewMessage.isSentByCurrentUser && latestVoter.id == previewMessage.author.id { components.append(L10n.Message.Preview.pollYouVoted) } else { components.append(L10n.Message.Preview.pollSomeoneVoted(latestVoter.name ?? latestVoter.id)) diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index 172502e7e7..3c0f989afa 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1385,6 +1385,7 @@ AD0F7F1A2B613EDC00914C4C /* TextLinkDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0F7F162B6139D500914C4C /* TextLinkDetector.swift */; }; AD0F7F1C2B616DD000914C4C /* TextLinkDetector_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0F7F1B2B616DD000914C4C /* TextLinkDetector_Tests.swift */; }; AD142ACA2C739D6600ABCC1F /* Poll_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */; }; + AD142ACE2C73B0C700ABCC1F /* Poll_Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD142ACD2C73B0C700ABCC1F /* Poll_Mock.swift */; }; AD154C6D25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD154C6C25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift */; }; AD158B6526C1873000C104CD /* ChatThreadVC+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD158B6326C1872D00C104CD /* ChatThreadVC+SwiftUI.swift */; }; AD158B6626C1876800C104CD /* ChatChannelVC+SwiftUI_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B059EC267116B40024CE90 /* ChatChannelVC+SwiftUI_Tests.swift */; }; @@ -4096,6 +4097,7 @@ AD0F7F162B6139D500914C4C /* TextLinkDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkDetector.swift; sourceTree = ""; }; AD0F7F1B2B616DD000914C4C /* TextLinkDetector_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkDetector_Tests.swift; sourceTree = ""; }; AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poll_Tests.swift; sourceTree = ""; }; + AD142ACD2C73B0C700ABCC1F /* Poll_Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poll_Mock.swift; sourceTree = ""; }; AD154C6C25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatCommandSuggestionView_Tests.swift; sourceTree = ""; }; AD158B6326C1872D00C104CD /* ChatThreadVC+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChatThreadVC+SwiftUI.swift"; sourceTree = ""; }; AD17CDF827E4DB2700E0D092 /* PushProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushProvider.swift; sourceTree = ""; }; @@ -6630,6 +6632,7 @@ A344075E27D753530044F150 /* ChatUser_Mock.swift */, A344075427D753530044F150 /* CurrentChatUser_Mock.swift */, AD9490652BF6756200E69224 /* ChatThread_Mock.swift */, + AD142ACD2C73B0C700ABCC1F /* Poll_Mock.swift */, A344075527D753530044F150 /* Attachments */, ); path = "Models + Extensions"; @@ -10881,6 +10884,7 @@ C17E0AF72B04D190007188F1 /* BackgroundListDatabaseObserver_Mock.swift in Sources */, A344077827D753530044F150 /* CurrentChatUser_Mock.swift in Sources */, 82E6554B2B067ED700D64906 /* WaitUntil.swift in Sources */, + AD142ACE2C73B0C700ABCC1F /* Poll_Mock.swift in Sources */, A3C3BC6027E8AA0A00224761 /* Date+Unique.swift in Sources */, 82F714A92B0785D900442A74 /* XCTest+Helpers.swift in Sources */, A3C3BC2827E87F2000224761 /* UserRequestBody.swift in Sources */, diff --git a/TestTools/StreamChatTestTools/Mocks/Models + Extensions/Poll_Mock.swift b/TestTools/StreamChatTestTools/Mocks/Models + Extensions/Poll_Mock.swift new file mode 100644 index 0000000000..59e1b6f69e --- /dev/null +++ b/TestTools/StreamChatTestTools/Mocks/Models + Extensions/Poll_Mock.swift @@ -0,0 +1,77 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import Foundation +@testable import StreamChat + +extension Poll { + static func mock( + allowAnswers: Bool = true, + allowUserSuggestedOptions: Bool = true, + answersCount: Int = 0, + createdAt: Date = .unique, + pollDescription: String? = nil, + enforceUniqueVote: Bool = false, + id: String = .unique, + name: String = .unique, + updatedAt: Date? = nil, + voteCount: Int = 0, + extraData: [String : RawJSON] = [:], + voteCountsByOption: [String : Int]? = nil, + isClosed: Bool = false, + maxVotesAllowed: Int? = nil, + votingVisibility: VotingVisibility? = nil, + createdBy: ChatUser? = nil, + latestAnswers: [PollVote] = [], + options: [PollOption] = [], + latestVotesByOption: [PollOption] = [], + ownVotes: [PollVote] = [] + ) -> Poll { + .init( + allowAnswers: allowAnswers, + allowUserSuggestedOptions: allowUserSuggestedOptions, + answersCount: answersCount, + createdAt: createdAt, + pollDescription: pollDescription, + enforceUniqueVote: enforceUniqueVote, + id: id, + name: name, + updatedAt: updatedAt, + voteCount: voteCount, + extraData: extraData, + voteCountsByOption: voteCountsByOption, + isClosed: isClosed, + maxVotesAllowed: maxVotesAllowed, + votingVisibility: votingVisibility, + createdBy: createdBy, + latestAnswers: latestAnswers, + options: options, + latestVotesByOption: latestVotesByOption, + ownVotes: ownVotes + ) + } +} +extension PollVote { + static func mock( + id: String = .unique, + createdAt: Date = .unique, + updatedAt: Date = .unique, + pollId: String = .unique, + optionId: String? = nil, + isAnswer: Bool = false, + answerText: String? = nil, + user: ChatUser? = nil + ) -> PollVote { + .init( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + pollId: pollId, + optionId: optionId, + isAnswer: isAnswer, + answerText: answerText, + user: user + ) + } +} diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView_Tests.swift index 0adc25e97f..89b7cdfba7 100644 --- a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView_Tests.swift +++ b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView_Tests.swift @@ -753,6 +753,96 @@ final class ChatChannelListItemView_Tests: XCTestCase { AssertSnapshot(view, variants: .onlyUserInterfaceStyles) } + func test_appearance_pollPreview_whenLatestVoterIsCurrentUser() throws { + let message: ChatMessage = try mockPollMessage( + poll: .mock( + name: "Poll", + latestVotesByOption: [ + .init(text: "1", latestVotes: [ + .mock(user: currentUser), + .mock(user: .mock(id: .unique)) + ]) + ] + ), + messageAuthor: currentUser, + isSentByCurrentUser: true + ) + + let view = channelItemView( + content: .init( + channel: channel(previewMessage: message), + currentUserId: currentUser.id + ) + ) + + AssertSnapshot(view) + } + + func test_appearance_pollPreview_whenLatestVoterIsAnotherUser() throws { + let message: ChatMessage = try mockPollMessage( + poll: .mock( + name: "Poll", + latestVotesByOption: [ + .init(text: "1", latestVotes: [ + .mock(user: .mock(id: .unique, name: "Someone")), + .mock(user: .mock(id: currentUser.id)) + ]) + ] + ), + messageAuthor: currentUser, + isSentByCurrentUser: true + ) + + let view = channelItemView( + content: .init( + channel: channel(previewMessage: message), + currentUserId: currentUser.id + ) + ) + + AssertSnapshot(view, variants: [.defaultLight]) + } + + func test_appearance_pollPreview_whenPollCreatedByCurrentUser() throws { + let message: ChatMessage = try mockPollMessage( + poll: .mock( + name: "Poll", + createdBy: currentUser + ), + messageAuthor: currentUser, + isSentByCurrentUser: true + ) + + let view = channelItemView( + content: .init( + channel: channel(previewMessage: message), + currentUserId: currentUser.id + ) + ) + + AssertSnapshot(view, variants: [.defaultLight]) + } + + func test_appearance_pollPreview_whenPollCreatedByAnotherUser() throws { + let message: ChatMessage = try mockPollMessage( + poll: .mock( + name: "Poll", + createdBy: .mock(id: .unique, name: "Darth Vader") + ), + messageAuthor: .mock(id: .unique, name: "Darth Vader"), + isSentByCurrentUser: false + ) + + let view = channelItemView( + content: .init( + channel: channel(previewMessage: message), + currentUserId: currentUser.id + ) + ) + + AssertSnapshot(view, variants: [.defaultLight]) + } + func test_appearanceCustomization_usingAppearance() { var appearance = Appearance() appearance.fonts.bodyBold = .italicSystemFont(ofSize: 20) @@ -1567,7 +1657,7 @@ final class ChatChannelListItemView_Tests: XCTestCase { private func channel( previewMessage: ChatMessage? = nil, - readEventsEnabled: Bool, + readEventsEnabled: Bool = true, memberCount: Int = 0, membership: ChatChannelMember? = nil ) -> ChatChannel { @@ -1698,6 +1788,21 @@ final class ChatChannelListItemView_Tests: XCTestCase { isSentByCurrentUser: isSentByCurrentUser ) } + + private func mockPollMessage(poll: Poll, messageAuthor: ChatUser, isSentByCurrentUser: Bool) throws -> ChatMessage { + .mock( + id: .unique, + cid: .unique, + text: "", + type: .regular, + author: messageAuthor, + createdAt: Date(timeIntervalSince1970: 100), + attachments: [], + localState: nil, + isSentByCurrentUser: isSentByCurrentUser, + poll: poll + ) + } } private extension ChatChannelListItemView { diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsAnotherUser.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsAnotherUser.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..39aaaa805b73bcdc328df585f09c6a2f6a7506cf GIT binary patch literal 12742 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 literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..594e3ba603638c66a488556bc1ffaa856053bcf2 GIT binary patch literal 12293 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 literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.rightToLeftLayout-default.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.rightToLeftLayout-default.png new file mode 100644 index 0000000000000000000000000000000000000000..12e4f7207147bd14a65a8c5caaabc9ca651f3a58 GIT binary patch literal 12345 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 e_NH7H{>Krb9&P literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.small-dark.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenLatestVoterIsCurrentUser.small-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9d2018035865f79289c4d1a1d53400cd25b84d GIT binary patch literal 11646 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 IM2-Ca7hqh}ng9R* literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenPollCreatedByAnotherUser.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenPollCreatedByAnotherUser.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..57293f0f579ba7d003eeafbf8d3c5fb0683e65f9 GIT binary patch literal 12979 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 literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenPollCreatedByCurrentUser.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_appearance_pollPreview_whenPollCreatedByCurrentUser.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..74ceedceed56f0235977322eee6d3c12f8bb38e4 GIT binary patch literal 12481 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%0A6t`SR&6w7z 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 DYxc5e literal 0 HcmV?d00001 From 713860ff2f5e7433fb2f5054b54aa34f899f224e Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 19:59:26 +0100 Subject: [PATCH 34/47] Add test coverage to PollAttachmentView --- .../PollAttachmentOptionListItemView.swift | 4 +- StreamChat.xcodeproj/project.pbxproj | 12 ++ .../Poll/PollAttachmentView_Tests.swift | 133 ++++++++++++++++++ .../setUp.default-light.png | Bin 0 -> 3736 bytes .../test_appearance.default-light.png | Bin 0 -> 29952 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 0 -> 36273 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 0 -> 30096 bytes .../test_appearance.small-dark.png | Bin 0 -> 29143 bytes ...est_appearance_whenClosed.default-dark.png | Bin 0 -> 26132 bytes ...st_appearance_whenClosed.default-light.png | Bin 0 -> 25620 bytes 10 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/PollAttachmentView_Tests.swift create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/setUp.default-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.default-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.extraExtraExtraLarge-light.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.rightToLeftLayout-default.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.small-dark.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance_whenClosed.default-dark.png create mode 100644 Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance_whenClosed.default-light.png diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift index e44262627d..9eb5b69cca 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentOptionListView/PollAttachmentOptionListItemView.swift @@ -163,7 +163,7 @@ open class PollAttachmentOptionListItemView: _View, ThemeProvider { /// The authors of the latest votes of this option. open var latestVotesAuthors: [ChatUser] { content?.option.latestVotes - .compactMap(\.user) - .suffix(2) ?? [] + .prefix(2) + .compactMap(\.user) ?? [] } } diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index 3c0f989afa..a665d8165c 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -1386,6 +1386,7 @@ AD0F7F1C2B616DD000914C4C /* TextLinkDetector_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0F7F1B2B616DD000914C4C /* TextLinkDetector_Tests.swift */; }; AD142ACA2C739D6600ABCC1F /* Poll_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */; }; AD142ACE2C73B0C700ABCC1F /* Poll_Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD142ACD2C73B0C700ABCC1F /* Poll_Mock.swift */; }; + AD142AD22C73BB7600ABCC1F /* PollAttachmentView_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD142AD02C73BB2300ABCC1F /* PollAttachmentView_Tests.swift */; }; AD154C6D25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD154C6C25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift */; }; AD158B6526C1873000C104CD /* ChatThreadVC+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD158B6326C1872D00C104CD /* ChatThreadVC+SwiftUI.swift */; }; AD158B6626C1876800C104CD /* ChatChannelVC+SwiftUI_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B059EC267116B40024CE90 /* ChatChannelVC+SwiftUI_Tests.swift */; }; @@ -4098,6 +4099,7 @@ AD0F7F1B2B616DD000914C4C /* TextLinkDetector_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkDetector_Tests.swift; sourceTree = ""; }; AD142AC92C739D6600ABCC1F /* Poll_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poll_Tests.swift; sourceTree = ""; }; AD142ACD2C73B0C700ABCC1F /* Poll_Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poll_Mock.swift; sourceTree = ""; }; + AD142AD02C73BB2300ABCC1F /* PollAttachmentView_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollAttachmentView_Tests.swift; sourceTree = ""; }; AD154C6C25DC3BA000850925 /* ChatCommandSuggestionView_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatCommandSuggestionView_Tests.swift; sourceTree = ""; }; AD158B6326C1872D00C104CD /* ChatThreadVC+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChatThreadVC+SwiftUI.swift"; sourceTree = ""; }; AD17CDF827E4DB2700E0D092 /* PushProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushProvider.swift; sourceTree = ""; }; @@ -7503,6 +7505,7 @@ 8479C7A82812FCC000FC8CFD /* ChatMessageListVC_Tests.swift */, E74DB0102655473300508D22 /* TypingIndicatorView_Tests.swift */, C1BFBAC029CC42CE00FC82A2 /* JumpToUnreadMessagesButton_Tests.swift */, + AD142ACF2C73BAFC00ABCC1F /* Poll */, A3960DEE27DA2D2F003AB2B0 /* Attachments */, A3960DEF27DA2D4B003AB2B0 /* ChatMessage */, A3960DF027DA2D7D003AB2B0 /* Reactions */, @@ -8260,6 +8263,14 @@ path = ReactionListController; sourceTree = ""; }; + AD142ACF2C73BAFC00ABCC1F /* Poll */ = { + isa = PBXGroup; + children = ( + AD142AD02C73BB2300ABCC1F /* PollAttachmentView_Tests.swift */, + ); + path = Poll; + sourceTree = ""; + }; AD4473DD263AC2B80030E583 /* ChatCommandSuggestionView */ = { isa = PBXGroup; children = ( @@ -10684,6 +10695,7 @@ AD0EC6D52A45AAAF005220B1 /* ChatMessageListVC_Mock.swift in Sources */, ADA8EBEB28CFD82C00DB9B03 /* ChatMessageContentViewDelegate_Mock.swift in Sources */, 8897305E265D046D00F83739 /* ChatMessageLayoutOptionsResolver_Tests.swift in Sources */, + AD142AD22C73BB7600ABCC1F /* PollAttachmentView_Tests.swift in Sources */, ADA8EBE928CFD52F00DB9B03 /* TextViewUserMentionsHandler_Mock.swift in Sources */, ADD2A99828FF227D00A83305 /* ImageSizeCalculator_Tests.swift in Sources */, 408599972A1FB93900FD6E26 /* StreamAudioSessionFeedbackGenerator_Tests.swift in Sources */, diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/PollAttachmentView_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/PollAttachmentView_Tests.swift new file mode 100644 index 0000000000..2fac8236c0 --- /dev/null +++ b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/PollAttachmentView_Tests.swift @@ -0,0 +1,133 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import StreamChat +@testable import StreamChatTestTools +@testable import StreamChatUI +import StreamSwiftTestHelpers +import UIKit +import XCTest + +final class PollAttachmentView_Tests: XCTestCase { + /// Static setUp() is only run once. Which is what we want in this case to preload the images. + override class func setUp() { + /// Dummy snapshot to preload the TestImages.yoda.url image + /// This was the only workaround to make sure the image always appears in the snapshots. + let view = UIImageView(frame: .init(center: .zero, size: .init(width: 100, height: 100))) + Components.default.imageLoader.loadImage(into: view, from: TestImages.yoda.url) + AssertSnapshot(view, variants: [.defaultLight]) + } + + let currentUser = ChatUser.mock( + id: .unique, + imageURL: TestImages.yoda.url + ) + + func test_appearance() { + let poll = makePoll(isClosed: false) + let view = makeMessageView(for: poll) + AssertSnapshot(view) + } + + func test_appearance_whenClosed() { + let poll = makePoll(isClosed: true) + let view = makeMessageView(for: poll) + AssertSnapshot(view, variants: [.defaultLight, .defaultDark]) + } + + func test_subtitleText() { + let pollAttachmentView = PollAttachmentView() + let pollDefault = makePoll(isClosed: false) + let pollClosed = makePoll(isClosed: true) + let pollUniqueVotes = makePoll(isClosed: false, enforceUniqueVote: true) + let pollMaxVotesAllowed = makePoll(isClosed: false, maxVotesAllowed: 3) + + pollAttachmentView.content = .init(poll: pollDefault, currentUserId: .unique) + XCTAssertEqual(pollAttachmentView.subtitleText, "Select one or more") + + pollAttachmentView.content = .init(poll: pollClosed, currentUserId: .unique) + XCTAssertEqual(pollAttachmentView.subtitleText, "Vote ended") + + pollAttachmentView.content = .init(poll: pollUniqueVotes, currentUserId: .unique) + XCTAssertEqual(pollAttachmentView.subtitleText, "Select one") + + pollAttachmentView.content = .init(poll: pollMaxVotesAllowed, currentUserId: .unique) + XCTAssertEqual(pollAttachmentView.subtitleText, "Select up to 3") + } +} + +// MARK: - Factory Helpers + +extension PollAttachmentView_Tests { + private func makePoll( + isClosed: Bool, + enforceUniqueVote: Bool = false, + maxVotesAllowed: Int? = nil, + createdBy: ChatUser? = nil + ) -> Poll { + Poll.mock( + enforceUniqueVote: enforceUniqueVote, + name: "Best football player", + voteCount: 6, + voteCountsByOption: [ + "ronaldo": 3, + "eusebio": 2, + "pele": 1, + "maradona": 0, + "messi": 0 + ], + isClosed: isClosed, + maxVotesAllowed: maxVotesAllowed, + createdBy: createdBy ?? currentUser, + options: [ + .init(id: "messi", text: "Messi"), + .init(id: "ronaldo", text: "Ronaldo", latestVotes: [ + .mock(user: currentUser), + .mock(user: .mock(id: .unique)), + .mock(user: .mock(id: .unique)) + ]), + .init(id: "pele", text: "Pele", latestVotes: [ + .mock(user: .mock(id: .unique)) + ]), + .init(id: "maradona", text: "Maradona"), + .init(id: "eusebio", text: "Eusebio", latestVotes: [ + .mock(user: currentUser), + .mock(user: .mock(id: .unique)) + ]) + ], + ownVotes: [ + .mock(optionId: "ronaldo"), + .mock(optionId: "eusebio") + ] + ) + } + + private func makeMessageView( + for poll: Poll, + appearance: Appearance = .default, + components: Components = .default + ) -> ChatMessageContentView { + let channel = ChatChannel.mock(cid: .unique) + let message = ChatMessage.mock(text: "", poll: poll) + let layoutOptions = components.messageLayoutOptionsResolver.optionsForMessage( + at: .init(item: 0, section: 0), + in: .mock(cid: .unique), + with: .init([message]), + appearance: appearance + ) + + let view = ChatMessageContentView().withoutAutoresizingMaskConstraints + view.widthAnchor.constraint(equalToConstant: 360).isActive = true + view.appearance = appearance + view.components = components + view.setUpLayoutIfNeeded( + options: layoutOptions, + attachmentViewInjectorType: PollAttachmentViewInjector.self + ) + view.content = message + view.channel = channel + view.currentUserId = currentUser.id + return view + } +} diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/setUp.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/setUp.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..e99eaebf6ddd2647af8cb20af4cc7692a565f1e0 GIT binary patch literal 3736 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 B(b)h1 literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..06c10d5d9ca677866def393aed3a94cbe4c3c763 GIT binary patch literal 29952 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 Ce^LPe literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.extraExtraExtraLarge-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.extraExtraExtraLarge-light.png new file mode 100644 index 0000000000000000000000000000000000000000..df436e5a11ef6234f5c10f51236dc329f30dcf0b GIT binary patch literal 36273 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 literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.rightToLeftLayout-default.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.rightToLeftLayout-default.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed210492a9b156dc330148e303a1ed6a1445c73 GIT binary patch literal 30096 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

WsG83;&0223b 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 TRugy;C`ds@MY=@F$nSpv3M?u* literal 29952 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 Ce^LPe diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.extraExtraExtraLarge-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.extraExtraExtraLarge-light.png index df436e5a11ef6234f5c10f51236dc329f30dcf0b..806bea214155b33d542e1070f0bebf07bcd5801e 100644 GIT binary patch literal 36277 zcmeFZWmr^Q8$UY3&>hk#h#=A-(jC&>jmQAf-9sZGC|1d8eWzgN06p4g!I&Udc+Tfk0p=@Oz1h43v~C7clYpg6FurS#NCJ5y}(4|$60{`9GH8w26d<1uXOIF2p0 z_}%g^)cYpi`5wZkM7$)G(}i;_htu9MGnas`Z9toxLsltsFMA!!)>3-w{eKUoa;&1p z%@iIu>95rz+by*$(9_bct_+g%Zmo2NVVYlag~znXV}WL0{vJgcAs%5^^{n0OtZG2E zTWI(s#w^plmnO*9ESS$HU_)bM4a$&C7hMviuJjW5dEPC7b#r~tnz@>=zrUwnJ7e}f z@$*Vh#5-gY)olBWnE6(J5k@Ln7|ypMvNp7^04hgv;yCBe17DF>n~{SXC9tD9Gb*k9 zf4X(kVJ#o!Iy#UN@GuWdIH<*Z(r<7t z0);Ggl+5ffNaCm9!RM4X9uQW>u*q_4w!kVFwbTQ3l|nx7@Ntw%RRyvRWYI=c+C5zO ziJVgkoba*b=8FY_I2GKrZyjVNSQlmB)5i*LD!DM~_J}56BaY9j*_AOTza&HA1 z-WN^(YNWhL^g|8eVMa`a-uZB&E(6Gx{FZu6Fqn7Niwsw|%G<+<7{dm}gX@fy!Ir74 zTb}P6`L+-&cuf?e{n`|(0@(~`8vW@r{SFwptq|5Scq0uPcXgeBD{reK1jFV0mu|!3 zjtINOrb3q0FNho>o#_%-%4vd`3ytpM-@kBK^~XOu-7Rkw4%2$ML_h0xxGXkX@62#} zb25Ca+dbsm!+iFk;^zEdiS4)Z#i42G*XP=0ecZq9Z!S;t_{(2T!zdUZ`SyDWrRu+y z$69WeO+#-p$dSd9OBWW(mHQMC7!>r(eSdzIx2E~>XENOD%v!nFXaCaSgVjg|m|o#? zY!@|SVvO+BR(-8J&+`64<0B#>X*B#N89>{|gLKH)>Rh(*k&u!5Z#4?lr1sL@45zV- zSKN#0NJ5zC>J%tz1Epfu{D&gTnNmdewX4$QXOv(?WvOLRUIX_d

N7Q_y{}cSpAX$9| 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 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.rightToLeftLayout-default.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.rightToLeftLayout-default.png index 7ed210492a9b156dc330148e303a1ed6a1445c73..3f3738405d1f54e867b0ef086bf4fc0961acd207 100644 GIT binary patch literal 30089 zcmeFZbyQUC8wJV?-Q8V+3IY<+-HmjEv~;I1G%6{AbV^Ehr-bB4N_R=a&~*==e&6r@ zao4){-@ER`HJ&+#nRDKA-gx%2_kMVi~V-GLgk1@ zGDVI?8(p~1@Mt}S<(h)vV!ox; zv^UwXWeE8aeR*N@{mgdSX?Ig;zR?xg^Kem9SMob}q#o|jVsX5s-aF>hXiI3+_u(W@ z;Z6gSI)F>Bbz%&csKM*_O|$FP$O7-fs7QnJT3E-gD~wNMUN#`{)C=J`xH<4#2t8Rj z!OI=J<*rb4(upbwp@W^&@j+j`s*i}Dz9OQ$twXKDtc&}q09TZ3&+2q{eTH);>v^>r zioVLhBsV0RhxZ2LGhs(=N3UIOgjr=Tkr>1%gnksZCK}@tsn9RPvh@M+QwyR-g9LWu zc($AmLoC_M2-wd&SG$8;MUsVvsG%KkyT4*swxQdDSHTDIjX_k51Kk@?rRXhd2Tylh zJS>8SyDAD1W{1grNvpoOy2Q>{paUT?NnPp49y+MN9QmXrHX(G*TY&8xqW5^hqeZZf zNBCQb--^jh=`}}5m$i*KM&c_JD!7#poeod*3e01R#P5zjUk5Q*fVlge)mp5U$n(>l z5@jL&3j3A#iGbqk%lEb*e=A6NmHeJA4Ly-;67U;X0nYjy<$LtnuWs&l93;u7X%&f2 ztv(_i=t7nbOj70LBV(Hwau6?jUicG8Kej`*0r6MjuY9~pxxu{nPly^rduZ+R2@@g5 z9n}7ppm#UtJ?lT>srAkrmfE6pt1V6E8=P+|l!M9#eH2r9Fyo&n1)<5$zA8 zh!OHVXOMl^82rNFyee7xkm5FmT9wC_Z2#W=*;5Yj-=89gmg^m_yrmq?=j!YWHHz>C z5?Q}}d1*1Q?LM5seY{`4v^r6wzF7Ft)9Cj`?O{Qt>Nn$d;m^8fT_-{jB+Wj2pt*X- zzLoB9LwB0(D$C*G@@9)cqG@O2S0v+#@lP;6F{wni-(M?y^WMq(Qgcr$5q4RumFc++ zrDae^#IPC9@A(nWg#T4RIl2aJ4sT9_j>o3a?R6ELi0T1r%T%fUR*qwu7>a1S=(-HoG@Lff0GSNZ0>UprlM4>bJ-Xi;DE#t)`U$$Z7+BjB@4 zvR~3DY(PS)g|iy3--Jvs;<9#N(|bP;p#mid`Ff;@1Q_`i!1Siejbk7XxO5(ifzQ@& zW2l5a7&d$KpgQ`v2zczlwF=O;>|A**HM!fCrrP?H|EA}D^3nF)#sDGZtjW~}!skc_ z->^j+#~M5DT755m_izpi(T`dP`;=wS!sSPiaEN~?c+>M?7E7@AC8_B6TmglMzk%;e zrF%%d!$Q~n-Hm&zP$rfih->gDCMDkXxAdHv$bqx`<44SGkw{KeG>TsD)UfDQE$7AvyKpO73VQ63ka52af$fa%3c^S-{jY6qPX^h@ zszO*}a9a$J!V%Kl=IB?@ByYC>}ZoR;4G_e7Im3)bN2h``~t8#rZ) z#i)e@Lx!EYo1kPgUnzCS0+w?88;?)j=W=cwEIQ5mM`u7=92Df%8p)c}F~aP5 zFwbn%((poH90`-`t9}0whP_6y##0u92G!k_OzMDJwJ)U(3r*J#T}`J{rUl#PxS~vq z;!j)*@xazRem+95ifu$zy&4pMe}86;LLB8Z-t4(wox#X)oL0)1nZP-hQytsHBqc)@ znG{i#z-ytzM$kSZzhfyJc51()z{Rb#SFOdPA`b?^K~Ng@MgJRnpbHrE1fEDnm0^&+ z%#!*@wEZ(Td}O-S*RwR9L)&MiRIk>h^S1f0&2{JZd}H-UUsKD&{f*bff~O(-!FWN; zNMEN6_{#<=2F7=N$JS7_T@VOQYGiI*AKRdcEAr>(A&=B<87)anB1tzsSm3Z<4ezXm+ z)-cH{8e6&jq6XDmkABoK0~v#q$|H=JX_dBdz7|WOU}N`X2HfwweVyrd@?Lnc?Vay5 zM-XH=CmQJPT_;3Sd6b4xMVg}>P|787uC8yKWBsgfhZ@Jyo+DO3E%*FV*9YR|*#o3JyMV?uyQ)Msp`-)zhFp zoT)AlKA&@JH{FJ2U!F}Hp9w!escO($Jw5y|6e{Kyzh_}m?9_5nSbV40@&a{JWAG)D za1HiFyWCzLXMNeDnleF_XeO^XeIIgzajd${s$Ht5Nu4XCYbnflY}0@D&}h;LPVf7^ z_k~qI|KchjAc@mHQiy6o53ck83)hxq`FYk()X!6!sgmS#%N6rFhLYPv)>x78(M5bL|4L-CG!$dhrca--6C-m|D1&0-B_3yYEzsv2M6 zcxyqgpgBX2!^Nnp)2-d7j_LgFV-U-vkd@pJxD*xogRTab&7oxXzJXYTwL2teKEAns zZxkPn;Ja%#%-w;6=eyTOJK^FQ)7fUtW%eIV|@%frP}Wot}}Av#+%i^imoJ+_^*J zH?Is(@P( z=XegBMj^``esbE1M-h`7P4`%BgmvMgS%(?UhZ=EO%~xRf4bXfR0u46^OYpG3XAeGv zzrW-3S6V3{5td_b8^xY-eZlSSf4LIQ{|>l$pUeynQ@i`Ec}u%AN~TQl%aE>9-d(1r z@8R_Bw53Wafkk#$Oq@s6lVb&uN4{5uuUjlZqptwfPCVQ;Xo2Nmt9oS&{(ki%8&`$b z!QM=@J5eu3Y4fy}%RfSua}(0=GkrhGDabL8lHNlE8Rc`8`!qGqO<)o$Anf zAn#)?r00dKFI3USo85MD+&PI(q21WV-eOfkwQq^j9Lf%QyK`wStxkl;^K z>aK_ZaapN5>CtpQ-xIw0-sv_Ke(W^c2bXfqi_~F80b3i#4|M2y>W61aw)Sg};8J9( zs{%DM(b`pbCJ6@_89V+HO4ek6@pm$G1_EeEDXxze#olYi@k(nRan9vl)d%@A z26VAubbOdmiyWY3EERBAQy3Aw#wnSf{4>HWXj@A=1|{`K_w;&DRy+sX})?E zc%+I(1I1kV#`pee>r6NXw?mqQZG)S{XL&Ci2&voeGGwyIS4xn4nuiqFZoiecjTyZP z>@h<`Cz@C;SIrKxy`~u)=2xGsvB^FCX=Z`k%PY7$=vver!pqwoXu;u#M>fZvNFATl zDLR$eL@Lgn{p2?lr)8vYlqRf5CD9FqREg(z{Gw z0SjC6SVN~Rv@C?n%ERdiYPp0^+Hctv7K($@MLBsos+#Na5048o++81afOWr%!%JFo zB5;yXrS}AP)Ion7y^lOO^&DwE!w~PcZm%yxGQ3A>Dc-+gQJF_Rdc>@a?XG?11G5>o z`MrQ9?Iv+siC5Sm1Pf#(k2s-9;DuljJESI6@nzb2u&W52eLip_aeTL#Y}KKQlF_9c zlp$<-Ib)T%W8Re+bCH(U*}$?Z8Iy#w2}!~AP{eR#kD?NkpoZP=biPLJhEHpg)p4mv zpkfQnVBhWIo8Wj4avMx!twkPmwNbebm=_=k6ZDF_=7Y$ZZuPzkN>AUk=FSZsKlc(E zDRd^r+AMBX_3XD){Uwx6#kW5goqAmepn=9R7LkYB>Z!p8*VlNU8g4s0)&X!E-0XC( z3S8o(@iERaEew`fgo+iag8(ghE!)_gJ_-*#))OqLP z$uQh?)T>3O^j@4WE2|CpNYmhS8G{F=jIIJ&a7wzIL6eQdXypfz7s=*Ws9A`miMq?C zVE!L9qN&;;Dx?To!6%A0XS)TNFT607YhiwGsv5niyp9o|i7Rphs9DrrzVEh)mpf>T zGdS43>lng?<&Y$r`enesqf=w0fe@AHS%N@r6TOVS7xi!jgN>t$jSr+TT3DbO3okq= z@U{#()$2KAM-ZsSY4RmHN*1+WaKdvzJt7=Y{V*mq28e&nGHvaZ@%<<59`@vxA z!6Swbejr$e(9Mz3MOzZP4S)Vf(nkj&WRv5u1m`xT-t*e?zD)Mjn}>IUU0-fS`L6%6pb2@HSpx51a-Z83@VzLSK9U?62GV0T;BF=+6Tdj;1<*J4$EjXROJ6;nN11dN+w{Ix#ZsffM)L(XZ+t&n?*8H_aoypsP=yPln>MEvx_rgdsQX~) z<&Mto%C--F+x=?q7MBX{FM=EV2$MHj@;8qTW|~!Y+nni7c5OFPtVYr_xAuGEa{Gp} zNu~=_GCO%R%Ot|-+oMchrfY3gm$0O6sUzBV?HV__XwGeHSN7W;$(e^2i;TJxxAEUk zx559ad-ug>;kM=ZPR=zC@~G*8$HDCGHN)@YHKxjUTMqB$6Lfj-dj9vwF5i!{Ti$A% zy$hA4N!1cXG1AJUrsQ#<2#Y59c-W^XUhXe3LADucx!&j8mKnZEniKO>QyxvGYXOxlMXiYcg)RLL^59rY;;~GPy4CZW>WYEESIt zj#S=AARV>PH90w(G;Y^R#6BLsuCFBU#qUbn`au{Sbx^(`s7zs?6| zv~2>gPb8SZ;=YTKOv6X!E?LMkI}G>2YV;12+jl=Yes6zDO+)hZxpw(D&ZGcU!1kU0 zcxn0h>tr|BFI2yo+HfS1mAhJS^G}JxbZ=}5-mfjUw*2O<+fL>z>FGn-OE9f1nX|7C zd;wyVhj~KgzqiQU7kn@~5|7g@XPoDll`%xm`7Goc$@5sp!}95I3< zyVA8M*1wsIX$o#C9Z)pY*%GkWovS}I=^kzWZJTnaQXOgh%_k`amy*v%aXOwdNcQoj z?MX8vCCM`7SIi)-$ukD5qzB~&Pygb?rT{X zLW{mho-gP?l?z2*IJwbk-M_NB8mL7JQ5VAAy^~VVGRZlKUdXFIS$>$Oy1I#gNybpd z+}1j8uAGrR;Vq7Kzg#8X$5hGSL08Wom7aF=UGqeg_M9mdr=M7P0eiDGbR$OnrtueQ z4};(AWtmk#TKjYy$55AQ6s~x3UDnYL(}dpzz~9epZk6YSt;qm)IN}XfORV^89^?s!gtjP7jKZuJ8$d7)Cox zl@`NiQko9bip-=TBhk;{p$Mtoi$o=7n_L%hI*L87SqL}_rNs@CU`Bw&?E3S}RS)}Anq^t17guw1xi&M8rW9MWn`!ovz@Ae5@a;TS34@>+3SLehLu!maF_eMMAYl2z}H*Y z=@UYIs-XC1!oz)jVRHU$uMlHmj+f3zvXCdYo$+*F>`!eIq8IPNg0fC;kvKXBVv&#s zQ8;@uQLVeuRV|X1BgnIMW?XTik9XSO!)!0Bhx#|QQ@tqRyJOQ{#LmYV+9qH_H zM|yH;M~%g^DELqcJ9CmwuWAHN=i8p&G5Tg2jwO*?Y4$4B>bl@nbF4X?V4eP9kmbVhN|& zG2MHszp)Si2=mu4KUBpq8o^M}mNNgG-~KMA`2z)l<4Gav`)_~7n1A=tu zw?yFRz8#6|&i=nw2V388J3Wo7{x9g)RGZS|)n_99ixl>!JMtt)>L7pm0|7b`7WjG5 z|Gz+AXAJ)Zk8chbpew}|z)=Bmq}M+GuedlWqMM(8`>4N?to*tg`q2g1{u)_1(7)k*mHo}{W!#;pe&F$v_u6o8;-&N9wA^cKSvBjb=0>2pt-1$&~h7`$Z%L-%I%@l;wyB zl+VvJ(GbxHI)D_*onHct`W*}xjff@U_Ud%4w0^OxNWH*d>tL=P`)qf5dh7EGLo!N! zH@Hy_an;19>PVqzgyLtvCoBD~T+$`Cg&%HDf7RKi{vcbsK3eHc;~h=icUW1biTP%IL5Wu-Zj*kGk)O4ZAy^`z_I0adiv-d$|MhTt{vIkC^*Wteqmy3L= z!n8YQe#w5ergOKvooXX#kAV^$2Z~|Lj(~%M1L3xvYIp`nBtkWBC((daPYOst+#|mP zI|Gkt>Pkr(i#=a19_gEQ`4qg%{K0g2rrgxx>0+zznSZ%a>+<0tHDj7MFMbQG}S^#(EcPlmtbojrAXxS!zE*1)kqOef3KY}#&QSqAA1z& zB%+)iin8Oo7A;Be5cPb;pM)#3A-p8imT5`qtMe8Y2MazpaYj4QlmhedP=L@B!ucWA z7mSQ8ovc6F*$vR;W&l^m>woK&2HAu>8MF?qXv_CMo@DxWtvHo7Z1LjwK*ajN@9HEQ zcwL^3imdrQ$O|LuLD-6%qN_={*3#Zg`oQ)u@WIQG@3XRK_OI}&DB#wGssIYH#IRXw zbhST2sQKK1Z=V$y#Xc{DwrDt8CEw#M+tGBL0RwGnhr(pNwWk6F8I$xTpIGU#9FTRS z6~+|mUthld_=@iD+yM=fCq^Y;vexmHEY44SnqDMYEGunH(PyUJ;l-T()E1Q4Z-C-`-f#hT;ed%Qx23!Y2vO5M3wJ`;W~(b3T* z8eKMEAD;*&uY4@X^yil!n$6R&N6BLC4rZ3OLkD8qL6mr154chnLfIJTq3BK0*5I+P zrzm%gNIWusBn`wsCBnwG$7tj`4r46GXIZwFr7Pp-(CCIny`rPVddwjapo?5WKXwt& zA35`p7=CZ{Z~*-75Zkoy$^6L&z}Ai_8SCyrh`cYl#O$7%1KGj#28p8^D$tO4X1vF9 zGnA{dbQC!sES(+Y&8LlQ4WhIC8wYR3+%_nh^&y+(Y z=lMHwMohX8N0yNcp*dUGQ+Ndm64;r&|&|)5H_rg}*Qv0jk^= z_<70UKlWkPVOW1)%?*G+f4WY968W`%Gk}HuN&LXp&D@SpW5xjp^ca$5;r87qWUuxC z0^~2b@&A>JGjo96Z5>boyfSrnxU#fP#xtK4o)`|+7me<_L_{nGkr#RaAun+?V+9;d z*9Q!7^5iwUd=KA6c%KrjZVu}^7sYZ_cEDHug^GCaP=FKb{O(+>mU|_D@=S~LDHXa@ zao_1~=$v3L*QTkFif)Y;>40W&G$aehd;qT`(V#zxkNB2z6Ve{QQ;X2aCZR>Zrbc$U z#Rd~JJnsQxPyFp*DxNF=vBZ!~rqEba-J&q7f;uPPc8F9UyuQ;1>9Njla^!PhpPo>l znJ%2|9>#Jq8hiIIAJ9+x5L@9whe^=QYm^ zgeTr&lfFa%q%_O4X+W-KTlCp2Jc@3Bx1$+3h}-?TG{s8ZKbbwT#`O}7RBX6Is%1YJ&%Fi zOHF!2U^z-sVgKv{Yv?g#kzO-HKCO(>hc`*rK}yg%?)%rb!Yk5d)C3twya@~M#`7ey z(`Hm@WN?CBT8dh$!hP8I@m~C`h-w12L8tEz>==gzv$3yos-6P!pP2&zKS7q)@oIk> zA14|CGX&6+d#?kk`B%nOL?)-B6%KC>+sk|LA^xXz&9gXj->7IZ#Ht++}aVRaYw|5)44j4 znhzL0(ZfjTOGOJG*@+J6HEQJ+n7(wKnTc9sCjD84tV$LePQC*}Z9K0|ln;ebfzh2#1ty=Zh@ zr3Bv-ldWr%U;aa>-z0~h{~P;L!^|BNd`u8v0D2h8X5JNO_*krzLVp&}HQ%y&D|;tN zQuU=2+^)DnHbz0S4$Rx(j^qrk(P2_GQqsGZG`zNOE`>)@vl>M>8Lv<*x`X1>_lXBG z2&EGG4A}K)(4Mi2XfkA;7ou+r1=0;PzbG6_WHG?Wvx^ys2EndQD(PKApbNXn^kyPV+#PN7Z27P-Z_I@uUc@97AHKNB8()%6m8_7TckTQdWa zdoYmNEHLynEoRfC9#9@G+d+nL`bX9(i=#Qk{-y0^=hFd~L@%I)d;nY#ra%I;=~Q#J z*oy4d!uM5+)f_cSbRZzKm@$)#U?`lc2#v17S_&aldknqaJJM#TJ9KN?^)x~K*j$8A zTe(1JwdC1U+VgKB@}cH3l5yhJKeMQ2+is8+3ysk=2Z(ydr6g3@eQ^fX2cyJiz^Xc+ zrg0hjoPpxBIfPowL%F$?|Pz^rh0LWn63j-JTYHg?8P@V&R z1r&7j?n1TP3YQIeq5D|jcRm#SZnCMzz?Y`8;{oVo3Sc9CjPvz)m8M?idC;)f5+H`r z*-n)t@jBBbvg(J`FZq*$K%hds+Ttmh(I(5`l-nE$01vzki0@gz{BP=n=DvZCkqg62{wlPN0qTi6%;QISW<=^w zy2Bm5%`UweTg43BCTw*|&Bo0CnQCd2(e1ipihQ}DnjJmSPZ_HQdIe|NDYiXzMvp-? zj~Xmf)3^Q9kloL~*Ueg+I%-#|)0R!6C){yT?6g<&*s|IRn)CA`2O-A~>Qq7RmjK=d zVT}PYyfQXPoy|BB&?*FEjHi1}sC^1w?ukP-mgz?6OH|VN^G+{z#``STsOW39hLUq* zD1ilW_FXJsl{kAKEg4?`wYqL83*KL@0a7cq!8OYM(UB9S$4V#g#D5DOP;p97!Wu|N zqvbTdV^S-fzSQ3%by;yr`i&CaX(T+(ZZtebe zu>zhBUcJ?P_+RA{o*fi4*2Ubxe|=ryj=X!pq zP-!Kb3s}pnfk_s5;cN$alGcjomIw=lZr&09{Jo!o_Fd^`tFb-?IQG2I&;qUAqrqE>i2qIQ-eQsQl6F*DJRii5x}LTpZg0_wTUa^l2D#(9Ni01*K;fha_KUI#vG6kkQ%*<;PfS_G8yvffPhGZd}=aQx_`awSqSEV z2*10oQRWOFiT6MTQd1``(N~U(f?A>%s#sTdki87$^2TzsTw^V>4BAXdk@_t<^{UHK z#D5UvGJ4j|Bs&tX?G%d;d%ujikJdp<@j?B`I|+*HV{B)Q5>=$L-9)jo2-Ogze6c(< zTCanv9IqWhZt7+^3yoqul41R6$$}9~_N+dA9l=uaFigkrFUCcYV{d!=P7?;2i1*`W zcpyB%fhAsmJ*@`W7765g_B(Gyew%D%LM}{YBU$BjT2tRmH%d1n>7>CK zpn8j0gz?TJlNJT5!#&q5{;FA`TP?lioQc-Yj)Kgwlh?;EdLDtL>q+D5Kzsvk$ZkV} zx*H8`sbvC*+FydHI*{Gyhm3J_v8%&=2rB-Y*6=f$?38J{9vah0D}@}f+z-}9<#ffw zL!nKKr`h|@aSIKE+2o}|mP?;#a=_;5D}3aw6n9Ulcvwjy&Q8O#l@n0bf2@X2Io3zi zrpfUIK2T##HIA-kZKcSyE(0E{x5dGDK`ARC#717ANBUveoHqnrf;5DCZJ45vQ#=WO z_R06o3W=F2i(|lf@*6AF3?HMEL^R-h#;VL4+7fg5N&S3p=8Qn8?RKJA^Z9~}Mv0D^ zaZqpyMa?=!G@x{w0C3F5ByQs#$W|3Oa!P`QBS~vAOg8V=h66PPCKR5%y<~7_F~$9T z3gm*12?Ef)!@~o(9=(i01q;b;)l=hpDNp=T3{`hN$Y#D^CDTOh`xqK@Y-jD^Rz?_@ zQLZ658b%1+U$Ek+ay1*$4i0q<_lvmdo_(_tftAGFKq>8J`>|wa+*FyuwN}YHel^8; z!E zw_9wPVUW>(kV*fIx)#um`c?Bz^|P3$W@LVMpuQ)hX<+90N!J>h}1AuYy!CTgEdt-P7f0}shr!Uw7P!oXq+ z^ekN=#1B6Vp*tTFefX1KZTM@PjHS90`}BsCmv=#tx(Sa7eYTIiIW|u=1}`+PLVRRj zI&tq7FHD*&d1pDvB;8I8vC*NZ?{Qf-%2o_LNEQOx%;J1*$#+h}O6USrGeC~*<4A~ghi za*eKNz^7+p^=UersK00t0fu1jL730$Lv$&jG=1*NHWt6xL9?Z>6=iAyz4QBLJUr^( zLM)=ENGjWXpRWBTNkglPlWaoiyh@$ei`OwkEjHw|hY2CSy{oc3tZ4?!8+J2TU*c!+={l;D4JoDyI@5{PJ3*serQwjC=JyIrHv`9U2(wMSY)=j|!NPb53 z1-7qDW%3^m8OZTA9XuX>d;@!b3sPtaIFTQw(dBpK;cuG*j}kwJOv{Jms1KvmlwJ`a z)z}6r4HB=_`7r9N|Ev+M4~4UGXy~4@6Unx;Ah;6Tfij`F*S4D^8@1L32M7+ANFw{!pg5`4w2ED z=f9c6R}Jm|^&EKB3;fs?ML)7CyNuVm-Bz;`^$^LBZXLqQJ~wVf%vLvK_ZtJLswc0G zb=LIXuILd}c6PTQJM7$)J7n4}-;o%vIO4yU!@@8myfXdDW+_z`UUX+Mhj*_Zl27qh zcOZiH2pGlqY1aL)7o3s=J)S}W@bVuPNe!!Q-dVr;OVbEtIWBWxHE}h5OBASzz{K04 zvMxRla;GLb^cr{Y3;S0%tHE-HwPr6)yoNZu6;;w%)?FwoA?p8=fz&x@HtN3pPX?MD$}>=|{Z9r`?ty%sEBl`eWXt)*g>UkI zG7usBYlmjN|1_wwVS|AUjsIy-8W^&T`)~g$U;qKbdXDbg*x z0?lMQVb)}qJ(bx%%mgkjI`8oRD2_*IDV4{b9pK7u>ZpTwT9#c0)L&#RlYfBRZmfK1 zObT-LHh+FrW7JR@Q}oE(WYEX9m3!MKtN=+H3A+hg7&dh@F1@q~knQNS`fxiewvZmW zU{UfD0M^?W&-+Wu7O!JEz(O1WSo+NX%WD$5X^;_s>IqX{IrakH%e8OMM*RNI423FS zr2eXuN`y(y6M1Uc`tF9OSli}n;Gk0&lADhA*9*4dIte!~`V+4RVWO-tI?ymw2K4TQ zdjxMcc&#@o_^l>0K8E)B(`(7#HR!|B!)R=zwGNk+-IL9gan* z3Lt6T!zH;jtLEhru{1$~Yd$}Vd9Q>&HbJ|J0mwF_FU=!XqwbIU zsQW)Lq6^<1bz3LUPzdFj^+hx5*OhFUvX|GJ;mgEO^(1kaIRVaU>+3iC6#)R{yT|J9!kV`fk*&^X@- z(*_I2CABZfa#>L&WlPI`3_QX3CIC<=#%SQz%@E4QO1WKX0YY|UH!4~pxt4LV^l6- zkk$T+*OUl^@*^2cSt%r15Pf&PV1BR#Bwz{ho*>3sA@0WLJO$ zp8r75byM-HY#dm~2L{)Nf3h`N-fD6&t5K-hNeFgE<{CBi_gtYdo+{B5yQ};G;B>!p zNR%>`*9$;Z-Rt%JBRU2mqi)}Js_Z&R4Xj_`6bf#*?V#C~^I3(y?axkx65HCwBpY$o zd#9nd?)0}L5Y!~}l_C*eiGPf^W9o67@bI;sw@VNA+P=9m(G)*} z!yY}6R3;A4tUx2H!9=AP`--pw$R-V!>3pFYeNqdBlLjUnAZ*9{q@jpR1E`5en?)*f zt7X!%#>~IIzV{&OE?u~H?Un~aZpy}Hmq9BL?z>YffCvLN>y+M3aM408u*M?iQB)aU z*HG&916=BP)s67iliJ3Uocz4@F;@+Mnu`YrUux>?qolQJQy8fg^cCU&(So`>YCCMJvZ^eTJN@ z00*Mu+8KnHyS^bxkBnuO`m^(D*pmI_zk&$@$0Ua( zIHXdSd53Zf?y-QQGa0Ay$8u+I?H3_yD9zm}im6f|IZo4Pa6Z!z`wt+Shz96_H$Z9~ z5fLHE%I&qsmpNk)V@mWqR0VM{;xFU@Z{IA`_@o%BCtG@o2r%Zkfop&qT5VIzcPeI) zRf4GJBk}b39*Tiy;mgRMCAyr`Hh%9zL^ruwD=OG)92WRTz8KBBH-2U?kpLR(AQ@Lr zbgc4YLS2V2jrj(8*b>OeLz zUr_H|dEhUh>z#V@^ohM*MOU!8P)gq!uIsIh-f{Ul4t%=s?>{CK;bP#IlPS^?KC z-PhUmYg2ydkSy(C=xMOC5^-c#W~aWi0JDYI-a>4gB%|(j2&hK?G!_wB$<4`^F~QO?Lzx!T zcNpqaR&%8!egG(M$9HmNH#1Uj_WJXD^V?~i>c^I9LlHMzu7Vywl&Jp$4XN`T5@9)pgSW&hZJL&T!`h?qZ5k1|BN1Pr>( z9C4tYlP-N%3hJ83nwhJVjy}sA$DaSY2E7EumL16=Z`lBYf*sGVwhM%}7fm0`hY7M$ z$yD*DE_9Qo!xUa_2u<(%N{Ca`F@7W%!bA5$-~N7~@@Nq9)fW}CR)8|dTLUPpmAv`$ zi1(vjrvK>Ho%M!`#hZIH_56`a&mHz&^Kbo6FWUl%%G){qC#TIdS1RnJJvxg1n1R!g z;ht8u{wJr|ANIb;bItfqtn;9P`}+MHa1{Mx5BWb|{2#0E|HF$jAc{VS02R0o59x^1 z*l=*X7mww)`{}4@*c;S+xO~&K(T3Cf9@Ay6=?abF&*;Rz(mj>B-6)**M1B_cDVO5M zWOi_@{1^G3N>X_)4B{pFe)mhGLn8-!qlfk9_1dSYOBdd)8R^MeDO*yM>Jf82pZsICeX-J8AXSE$z=smP`Wq1y8dfaRWRCi$5xJ+bQVObun^&; zHWiX)a%vtc6 zAEQYF!Fqu?c>M;zK4oxy$6*AR-<7GLE+0=-6j_*T1vYSgL#ut|gf-kmkT$RIpuF4YSZ-h=|G)iOZM4}93#OiSwPew+ z!(eMU0w=QQzOmCT(FtU0zr|xx$rw_-(Xv3SF*_ov#pi#^`%JqmGBy?ms4ncVO)inY1?Z(m zqVuuHP1hZ*eNM=E6=BiuRH?+E5l`gy2!148;7blBfEe!1^;<4iKmM&1ji*~$f=6^) zcKyjgFN>W8l#|JQ@9AMQtPjVgmQH?YaRgL)G3D(jPsu^Zs6k4}4|f+!#Od34UyNR! zba!`mrWOg|D1QOt1iG(uA^O%Tyj@MqZv&7V0gDa}P^oMB;ac!$s?3V^8|A1Q)p%N> zURyoC@A)1_2G9Ay!Y=DgP7Uzj2+@gHj-E|_M7xpw+rM!zxa;fP^1cXM`qu^-ujZZL z0oa{Er-WT44W7tCT>`3oRsjc+vNK*#EfBT~waclVX%>I}DuyrE>T@O@MaGRoNok*y z$AXVqYj^)}`D?Ukhza_OXc$f@m4|x_u<1YmH878tntL2D;*ehfu$hAk3e-M+g@XY| z5VIP24#34PfMU&K2G(a zu4vp`Jex;F*YJ1PXSba1l)`~dX^Rg285XUS&;JZ_F(0^LRM=kiXnq3^GA3DwzC$CU zR0@@O6avcduU|TX08;Lak6fsMU2SEOr9+bYBRi4^JEpNWa~7OL=>fW^)E7ob^~?RO5W0Rd_V z?NJ7hb^%OXqQk$a8ajTEgNNBBUKcr^_L?9DeZetq@v4l20ZMBgG>DG~oaSL>yaGTu zrFta0+C~6UyCv`cU8-n=AP(dCn7uL7j)r}`b%5we^3q)P1D8-g87dAG7Z+E04XESi z9Ksi*QB+8H7OEnA#efQ(qNC-W1VBZu<5FA0PJSxJVJaHoGa6dj&O#ZbN(Tj^;6adP6%*f zasi^iPRfQEO)Ju+YzgfyqX{U5<_72p3{C{%ZWNQ*3>$&`S72^yaBPZ)x%t=Z{V_$3 zfO|hEgC?Ls5J1ii*7Hz9kAOvn2B--&wXU(V0#e0Znr~XAA7rS!8G0b&;BBC`vImaE zaFIoHT-hG+h51;UGAAaj3U)RyRNnyp(J&i(0FQ?C9->2AilBD!q$_~**9QoDw{PYD zuFhld)-QMy0Fxu9)d<1`-^|svg1w@|ltKrXYyUfjw(+}KQ{;RVAl-M3;_6C-Yz7er zD#iycP$~2u2Ut&M?L(g2Hum#6%=6|7-DeXc);cU^kv3HHOG)`w7{IaOBNLO@xKtvi zh_MihzHM$n^@8WxpM=$qCUX{4*3M?7UjvoZ7e!*~!Wl-)T807jEn?8j`OJSq$qtB% zP3y(|M42J^L{3@DiM$_BM0{`1t;Yk8mt{XyMO{rQJTjPIog}n<+|luXO}x~g)7v8m zj#|W@Kx*8Uxvatjr_@=3b9fXv5vG|?GzN#G z(LZs?;J~{83u&d&BvT)5rrb`G(1aZJ3HGrLdu^J+JEm zSotv9vPLAL3RD#z2k6b(LGvNc{FYAmxu$ppker%O`Yz998!YGQ1}`%fZmXGIEbG?3 zO^E9w=MGf19%nFpCGx0>TaSHxzfz?3O^X#sPZ{M>3sNaF;aJMCGcsodgp{{yJ3GD@ zp;-7h9PMk?_3``deAjn z9gQr+f2GFWN;+%w3`pmGYpeeUQqFA;Y*yf6;ijeb&@)JPUbfqIg=z%^foD0q&~Kxe zv+k08^mtSmM5h}jj1W}@c`sLE7MdAY-F2k@gAq3A9(pfg89KE48+DRqS1sSJWj}BV z8IM(6?#x90cOs#JFI3G^V7KmE@~rmQ{Cad^r12Y`95DY;<8~4*bJju-J!SYSRGcxt zYW7kO^Xm|G*LxtcwsL>T=lTl@)Ig6Ddly04C-%el&`If`1F;{_%Z%31H|6;E1#-i$T%e#%uo`*dd zLV?6Hj!}WE@ViZG?)|$zZN&cG;VmKzFn+@mjZA%?vR_`%*?-_{cIo)%1AmYcFjsHP zf8KS38JgTboc|anUo*NImI6kdx~$ByI`|$u%jHbrk>%Z;Qq#n}vSG=W^r}Z99P8Wr z?yaFI3~kvCV^M*9=hrv6cupw@6W>?RxcJR*(5wrT9QReS0BE_7QP-G5jJ7S>7kIv8 z0|35eaMTD%2zb_JT>l1t`w;;K+m~&Jg88A&S$Cc(0HiDv&E-VOhIq`vrtT4%fCD2Y zsn30~Ay{q{)(`1VK!`QZq1%yS%vtF?t+gV7FMtD_zcxP@0gsOoc{ZRx4!G+7-;CQY z5aECo;O|*n61rv@hW&cR8rA0q9(#HbqU4jDtrZ!NKqKo_6zxu#4o(lE6B z;hoo76gRK$xxrf{>kN4s1qNW*L?lb+h&6iV{dg6 z)i;DH4IsU+su(70?PtycfT(f%i}UXAhtAqk-yBh3h-lgd4V0EkStt82C+Wkn{=E## zE<4UtJhczOiUsNh8naqeNe3@Q4`WzZqL}qDI{}*>I8^)tt>b-HKNCklCmjj*+Y)W) z&7?DHnmyi;hx$leyj9oxzhf-UNVFaJ>mJrqC8TdBi$ehsei;bYE$ewo&|b}UWv-34 z;3eyj9)tI9@_wU4mPQyZHc7vdeh%%Zm| zic-zNc7#ZO$PY0!c|v$U0~eP9CAz@2+BzoTep0h`8WDTm9WEU-A*R86Ql)p{1e|q!%xl|B4+2ReKvJIE4rY30*Elna)YXz{hQe)?^0w(notXxkB^Ta zeZa=u+vot=ocTn*KGnbvC0_d&5H^@LNU9O z*7K;aq_b6T#qX`e`UTtaj6(w*2@L2e(O+#NUyg^d5Z|P=#lgFH_)9Ez4S#vkPj%$l5S4oa(8!BF_Zs1|Xha1}rwJ z6dS+-AR;G!2^e%(if5jWu7HhyZAZ#y48Wnwl%#_+aR&*;1%_WlQ723pSEVO29lEk0 zf?G<0Zi&QwuL`~VC?CX}6?k+-#KdvNDOINt-5n4bj4rHq9R50#Cie{F9cQcuw8v0V zK%XK;HaD+USk%H7>hjiVg`IZe#2*I>EcITHmM8Mp zWfwd(6=3$tbsDyzQkv%bsoy5Q{iUzB(zF*A)6+L?$|p&RUocqcSwY=ctL%Wc`HiNn zr9pW}Nyt+VdH)HI1^K=nN4`=M?-Z$Q5|#LOWuEz5b=gDJb--%T3FJZvDvWF_nPWh4 zK3_g+Z`#D26+6<{#m`R^Fbdfe0TYA|(5}Mjgg^;O9zfBsN;3%?qIA1kP2uUOA3&t{ zhlvl>XWU2#t>IE|Q`)C_)x6{d2;5cx^5a>!MP4f5KgzH)xy+~6z3bm9cJ zq_1;Ix1*abeo3ca9+4@Ildofl4RWKj=E&$v{qnGnUK(R;m?j*3=$`e?G7+U%tAyLu z6!Cned(_3w&lu^3x^B7#iv$Vxwk`t^v)p#T1hzVyMS^Av$ROiCUjfDmn!UM>(2nZ* zPe3~%79+xDAmQroW+Ex;gS+>)%H8bs5GV!9H^t0Jmf4y70Q@n0C>OWMvMRs|cm^8Q z*ka=hP7+c;2!PrRV7*xZBq$V4ftZTs7`CrdvD&I^p*QI{Qm9mxU= zZ332O01dN}qA9KV3ZP5s_@08_#C0s7XjBnkIJf36-|fjh0BlWrK*5b>^HRV_((Zlu zq;AhEk$In#YF^b{A`FO<X*T; zK^fOqiaczGP>@-(BR(FzALgs*%Emk&{`}v)!hk3o|m-`#0ML| zm-4bA6M+RUq5_(ugz?wJNCX}~ZMrM%^3;jif4`3+L0r(Y2*VMg-Waxt?WmcQ_) zs*npp^4bRxND3jj%T2`4y%BemGb%^MwIrqC!Y->7adNMfWGB%8&mdLRO0iP}d>@ym zH91u?P^iw@c@)YFPzO?dYBGY^tAlAnye=Mhs~yJ+RO2G_nPsj|nf-Jb^PHBKAW>4E zET95`5K%|zGN4l(@CqGxxOwOk>d zgj0@G#VcI(Yd3y$;E=rdY~~kw=2!l9fx$$7th+>HJHcE^Y;_!Z`p<%)WC zhj{?*OFT_ni0b>Z1+O7440WePw!AZI5~+}lk~5&;3Dr9HT^^e8!^m(E{|lzOb)MaU zKwJfE3b?oQMCQXrzYUJmwlN7ut|fSb|2Yax!;sp8P*7A*rsDS;8M%Kk0aS*9V~E<# zw~c?t-k{z}my}C~vY|e{2VdyH3S{Geab+6ZX^wv>its8oCck zd7fuFnXn%?@$M8!?bbV#Fcxy=%ETVnG5-FhKddOgT@Rh_TwNcilx z=R?{ke~cCRm>4xL5WQ~)A0pfLa@ID!Jv|c+L>LWBedf{Yf1rlUK6Y~BAv+j+_y*m; zW!Cuv=W%SI_Q?2~dzSX%6c{J880I$z%Ln>WZZm&g&ZdSHS{}frgU^R9C^WCYc|X|!0$e$$$i9O_59d*Ub3|eJAb9(U-*eKz}y7)VSr%I zF^|ZZz!>yt*ds>y1vDsX`o&tGdi6TtUVTdrop;t(8j9f+q|j*A>*Ix%=}^-Z3^BI*XbW=c;+>e9Fs!r) z_1si`NRXgWu-+#7OV6C6AH{*lcj-u|-D`tP@Z!CCnU~jqlLBq><)(iT^wKJLLf(ccZG-^uSJOvJtI4 z6FxQWy3yz^7AD+GHPW;DBEKI&9=Pmi@*tcE)E?B$GqL~hvR!tY>)o2s?mFrwP1)~Y zNDAA`eqqeP%hH+Kw5(~oU#Prbxt&GM#8WGneo&sV@H?HwLiY(M&7a04#rAmZUUZ3I z3^giNkqL9hFm@;P8luq79KC$a6I=TFOvk1uJdBc*>_s*KYjTFb5F`gAz4I2X-d`%gE~$ z`~%?trO-H-cf;shuB z!SBs471mC=0R|cmt+KB!Md*y-5|6p~)Zhhtxlz70c&3~?!ZcjcVe}jRoZ>o8_IiE~ zMdWID$9K$=_pdsV6=)v3Y6RDRL<;<=@XkqI~{(%R=KfLI7^Q z;nw4-AjXmgs(ODd3V9G+5Xv}_L&YD8W)%MALj`8;9}?$|bl65rt^PlmzLu;5()R0g zq$cpeUxzeM5M+?`={4f`L*mr>);Mo<-TOoHL=rHHFPEqNlRA;Yj3kWeel4W{AN;l7 zNMT)=gmj+Mx7EPkY*YEWa(KYrA0lXD2{k5B)aACGcng(r(S4>L>$^&w{zGp7>tPS1 zp!~M(KYWzSy^r#O$q%jT9x9A6xQ&v4OwYXo(6*#BM>OopHlcA*W$yt&}c{YmzF zlu0kSFuO591CO)(F%v=SiXTTSJv!b30w&i(p3ZL_s1~ZG=j>Wmlv)m)$xFp!Mqfq1 z&6k#z-7a4o-V5P0`uiSK@38($BzEC#05K2jDQl+G@8K<8KB701 zQpd~o1#6aLBHG;{cgywLNs$*<4CTz;El!wwv8fHw2|5T4_AM?#nBER1mU5t_jMowQ z$b!9_=reM^hZCjk=$wmqFiC5I)@qm}pW=Z-M@CJR!zjq5U3i53SbX*byrsx3=zhuZ zIxOc%ywkhwNKDJfjZ}jzd;P-G!fQk`6ocLZbJ&mO)a|)f059^NNy!9h>`gHc%pE*^ z6!i3z{_`^lSr|W|zS!!i6yI}RSV-`RJYRUs+1(H(LJ2Sy9ZD>{{@|Rm86#GB+2?T zcE?#~<%o zdqi;Y4L?GOK-DBS%kKNSHGfIEZqYC^;@ZXq1V4;q{|9sc<8dTR?(3Zn)KaI^-w>m4 zC$t-k5b_%0PtPuPt=Q!-*^>No#Cmv}6xtZoUrRSZ83@YKbMG z2Rl!`n9~e}*h$_PQws_iauDvIW@P?q4ErK`+K-2MEow_o(l~;a$i>26eld+Ej@;1C zybswk8_Qmj^f6uH$_s|CDDfTZT=!yLk>{yV&FTGAIYXh%Kn;EUo`2S(T=>c;s>n8`Xz!|{-XtT|Qa zO&`KP#XG`X^LGU6y5qQ9IK&D1@q~mW$h7pNUmDav#wn|dTWrK~02+_!Q`hn))r#~i zD(gdJ1Wfjh4tZ3CeV8Xfgw#fdr{$vJN~2W;f=`@Rn$UaGdP%K!aW$AH!IxH-aZU>4Gg~zI?w4r$kT33lxQ5vIfwMUjD0BUf)3GMR#$Tk+$Ab@fm#)j8>T#%s7mf(vE zkzj&cMLa*84=pg^6{E+P{F3wdXx7;0zS@vD^@Q2U+3s?u>tFRMD(-Q#1$??g4tY++ z-IhzB>d;wK-f>Zc>`b4&GgHbzCZZq6m^xifjY*EDa4g1zbsvUQA&YXXBXfxC#nl|4?p{8 zg4Vr!S57lp2JMMH?=bOm)@-TF$Dh}dp=xJ@lYL3ZnG5+&i;K+7GPy}KROGmS?_0i0 zR+3~~X=0N2Im*fuuPNvzafYttuwn-gIlqF>AO*3LB$0b|d0b)&{fBeWY~TIe0;05L z8&EW2YVkRILY2((h(@w;!=W;h7TH%DEuC}gxYB~_dz<0L0let{7F#rY2)jL3)G5R? zGxzki#KA%>Y$_dy=>n=ri{_fJ@;Jwo+2f+}FBEFdYS~8~pTHwbb!*i(X zI)6>t-PI8^4Ya&6wn?dTM2veEETGl$Ou?gLgo8whUJ2R|7Ch_EV#AfssH)hNdOP<3 z3D}ylk5}%OX&&~cY>gc1;yTc@@(s^qnnr7qA#+Jl;;w@8=SV5dZ-^VMYn(``m@IcB zIcDa^IEiRO$^I!TjZzA7j>X2;Er+@e-EsX|B zZEvm@nStl%zY`2$&gIZ^Ui`+Z0Aj%v_IW$Q`UjxYy1;+>M=1UQIsgBP|Lgg<%B?RQ z1$SKGZ;NO0UjuN*WBBG+(giqL{Z=@}o*eq^zMdNEI@}f8ZmTS@Px=Evk3%QiEid!LI76!AdNLw3(JADhAzg*j%cH}6X*OG7RwtoTw3VM5o=E} za7CXE-jcBJ28w6@Mz?Ft&V~+5uVb+JCEDph!)l}6ahaZjU~dBGx}i6agW(EowUN%x z{i5%zY|YFRt{$64n#39Ts7nD?izVLeG zu;A`&kJEU7#m&U91qWoiV?DgN0Q~}dG!q*BlQ~>^Y{rD|r0kh;+_8oR94Ge@Pu+rG zH~{mse|mAHG~A$_x9-)1NNlm)W#BW6nOQ#Q%tPtCG?}M(Lf(Ivo}(f?Pk~gxO0pr%a#4(LP{1p z{3z34*ybwxw$S{$^87fs#(!v@5ytGufybwTBgnz4^az?K_R~(cuvoPl2dZho4GYqh z6nw8}K#PNCY`q3CaW2b00Y_$(sGmqSAM@o!j`+@h|wlYlearQqczM2S$`dOee|Cc!^^99?K8h;P%}y1 zw3-Azvz!tQe~$`CFrTYj9Ve8QUrNS&9!x8NPD+IIU${`6QI&wo5d_`cgl&z!8XK-Z zWN!!78be<9GBPEdlzvt6gzVA&VtfEfu z_3%u2gf@L6$nD>lc`P;-WN#Q&f*D;UE2}J(?4=F6;|P9Nzqlz(f;B776PA=7&`yqB zaY&R3^_+xuE2_YY2pB}X%hvRXXlg_RRA&dmT}q59GCu(*4a?v8%#?DjW@xIYOarKq zeQ%OE!$_Tr*zy09z&Va>KHIdxh0XQ~Z*df1Y#1m++B+We!Y+xt7tb%6z8CVekWe-c zKiY3Ao(UITC7)Cv*;ZA4M7CN+Pt&JzCoe)SF9Sm(HEk$F)$icA5=rU&jm8hq8 zj*GKx!or1X{z$e4yFmvvHk!ydY=Dk3FLp#U%jib~|o8AS< z=Y?614u?dmEezAR=Ygoa@amIBoq5o!RI2%w+Nv<+tmALef_1x++VwDkHSt3t{n3N4XVI%s*$$RGW2 zxXPT-Ml5WXGJ=Xw2&bLPy`@f*msXl=rtRemPI`ykz)v!|xKr}-&!;T7!s&YMm^%KS3!rUYIvDIihzSW7Le-eHt( zG(Z0FCfMJmlA`lkk5^L&b&#y`X~Kth5(Pm)YT@oIIHvkS*i&;3#%D@g3H+Qc5v|li zmwom8aE6LqMr>NC0H2HMLgmPSn$0CW@b#lG@0Z^93U!+-cQUQgXXH^_I_sD9zA-}8 zr95b6>girZe^bm4s#aPJv7OyYXkCuAdn1HY@Q#6IjfXe|N2|zk*DTk3_B0g)g;r^E zRS{!7!j3VD#El#fd(O|Fkn-d0gpV9=#(j(265Q1CDZ;)j>P{)O;Z1ZP|r`I8YYD;E$1 z5f5%E&_G!y7l>9s0P=x$&`7;C&mJw+X5sX+WHi4nDhO1vxhxdAi~T{Y3s|_=5Ft_J z_b^-ApD$nZzQD;OfRy0#gt=Kc!+d9J?|n`|;j-hI&cm0TWD8DSA5^iZtBhpnR2GJR zZ9L6ipzFeBqWjfH%-bqt``E+HcB;H5}tJdL3n5-rmo}!woT} z-6VhgcHE&ARc|R<0we07Gh@kY0-KK$e2+I0Hq|9~`>jpy)vf7r;?{@pxE*Qkya`k9 zkPOOFq~A>3uk#3T4`Yb>k+x>N*fkywo6Z%10Set;P)}xjg2Q(HiX|PIwS0+kxT7bqGP!jkwI6W@efmX33D5 zta6jhpJq5W_$bzywB#9rk-dokjjNaSmt_q+-I>Ge-tn+z#+K0(IWW)Wh3+$(Rr+!{V>59AYTVFR8C zGw{Ld!aM2f7+qf)P;8og`4_M_bz91Qh$~YxlXh}Fp-Zc3Cr@Bouu<5FR)NfW_jt9~ z&;+5rcCB%Rhz{3VYcCx*i`brrLFIrTBg?u(j!oJs=^KUaXv6o(LqoxAkskf9pRpje zbz#1k`H_MkFLJVm(6CYtR}eBqK%`M6Jb?x9M7OdRyh+38XEPYH*4a_T$ko1w{+^1X zNOG~CqEEoUK9DU@>%25|tQkNTT6}*8nW9ds_|S!_%5%V{gXn93kK7rcb)v2|`^cUA z@xyEV#|MUN`hy3^?t(rSD&uD=;XjqKkHurD&wi*gBn!X)Yv^-Kpiqzo)}*c6eG_{E zO<5AerFk?M&SemrcpJ!1HCgr;vPIKx?nO?g+{VCgj&MMlh@caGYAAPs1qifr-2r*= z*WHer>j%d^78ig%hFjWe^)q!(GyxByLLKOQ$+NrI5qj6%Up?h;?O5Mn!dvQeDN?cV zmp;(@tKGloCaP`CUrnt^g)&Pq?uCe-1LQO zc%7%-bFhTmby@^`ssYj4Ja<_tg2pOVpQkmNEoTrnsAj)I+7-R~xJqln>fSCj-_B$A z^3j}_b#DymVns64qn>M4?)YH3JvEozp8>1$(8#IGRRCfCO=@Q3v9#3B$&ttA*7;lJ zDfgyExa)4B5M{uarCAu=5o@HM5-2)}KDZBEJCg@5g=5OwhGrDu-#fCUx$7C7N;4ER zo_eTuodW)mE}8CHM7x`DNmDk018dncoZt|!I37^Bd<5NpR%13GIM#WnvS81CnDNxT zVO=eBP!+BkE2Gu~K9<}x@Q=N>Iwvv16PUAm)k~r0rm-IPV0pcq=fi1wCE_m+5M#Ik zERmQ*DHFvlrnl~?etkZ%^6Ur^c%YP(+eUhlHM9+-(Zu>}{LRUolM2RxU2M@aj(cLo zbN9oaQmNA1|0Qf_w{7yJMQNGs%P#ZmiQ(8F#YkI3(G81d#_GInu{Vd)8^HsL*lejE zt~~2ai>Br+k1swh&>iUkJlD_a+w*&kSS5l{?%p^GblnI&C<;AH=F#?M)_{#_sL^ua zv80m=q^JT~`epy>%?=stP5YCB0ix@gd3K18#>dJqY59rvH%OJ(tzwy%To7UJvIfOv zRAQMEOxSrfi&}HD9PiTHx=e=K{Hhr9-KR zzs-eQAlX})(Nd$ZwLvR%w5efU?^7?nOUtTWJQ-RA zb9ENt`!^H`Ww@Gw98vd2W7Zg1ZoE`!9z6TGpJ`66$+KC^dMEWXI+dd*h(jgo z2eF9pz}%yE=WmWFC>|g;-yAnW_o*jWCCS!KDcDVN2Hsr1ZQOqMrou}9^$}Z5hsJ0| zcTc3VRcyz`yUTMCnF!k}w*0fg>V5MNL1FXuu6!BlY;r0Ws#~CiN=%3{5ok@G zP3Wz}K69hqsVuWG#_C2U>Ym1r8~jdw(3EveM6HR7SSF>0B6z@PB0yFBpw8YzCt52P zIa68Gry69EH-!F3J~R#8(}~%9bU$`VD2z)a3I3)-ey{{~BsHs!6s4LtkYm1H)nm$g zI5hRJ_#>RM%9DbiDo%d+V)*mb=lX9nggo4KI@cdWW?>dbk2Mw`rNG?TCZahy)LVbx zy6v-^BwNc#L9WZ?I7IrMnx3k@h_ogBorIz_IUVU|8t=BwGoI_0jGz(Cr~?|>wG|VH zMSY5evg$dx@-k2HUJDFBX^2wgghkQII9EGukvgNl4gkWp#8}v|+;<7h@0Y|)j=vMX zg^CJ$Y}qoLD&A`MYt?-Q5(S^XwKuCLdOI|F)d$z^EN&^{pdTW zX==vX!Qcv!QJ2lO$3s-d%LY(y**^SsM0yK}Zg=AS@VT>tz9*>!oOKi`JOVO$#=o#m zvic?2*T2e`vi=?6|2jBsufAP2w-My`&Ho2~0&Lk0rj|>lOm$2^7~q9OQB{1bP$_R2 F@jnW>o{|6n literal 30096 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

pa$(jk~8h#}1*vq0IBerdFPAbjUI=E98?M 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≫iRn1yDz%2<+4ry;q}KWT5B|OR(HHUF4F0}>LBv_P*<#3Z1b+Hh)4oD zIriCAD$h4cJL_1f0T>ZFsju;Od7$HZ@_yFQ`iqM@7jF0&j8d?JLxjn;kvHVhXiO9?Q0F4oiR zZW=?rT5~^z&Xt*nm~wijCozq&d%;!%0`93;+Z?JRBRmivx6&73IgZ5~nvfxK*$gAn z?Pvt})A|=T;)ezC5C?3nTBp=AEB&aIv`IEatx&`*N=&05ergd-y=n0y+f5?ng$ZU2 z+Nk6>#xR|09O6s!R4H=;`VI@<9L9}tMUj`a?yT-a3`!vFI_v7DG~3tLo(jl|N;hce zn;jdu#!|6rQ26`L7J+fv`sZh6SElW|fVhAegE`pkpUS0Al>62?81NwG02yqRzr6bo zr@%!jAo4V?2>0^WR^q=0T#^Vo(+Er0YY?j8$B1mAk}>GbD5Jozh!k8bLUR^NqeE-H zT=_bsCk|AhV=6`gDz`D9?)8hH2|-b^fRIfzwaA-A1~F^oF}+EsoL`nmF& ze)0W7lpc$Irw*9`*VgyvSd1iq{Wu9JqK?_D;zAPyQOF5Kp^X4N#HRvS zLyg;0mH$H_`c8@%DE^2ItVa5WLkdZkx&*AXR|Jn>(Vg1MZW7?V(TVXd0Z+h9Jtim5 z-A#KsiT!pLpQRLczxZ=ev;9YQYsVb}o`T!NM!t7N67g_8#<|Vfy8M*#U2)X)e+S}g zJ(*^~&nBZ>0Nn<2wdyvoCr{Sn{fPqriXkH3;%$-fk6lj-PWehZPM@9%fB1ri@u?I z*<+-E04}ugwDN=KLeS04s)h+$0pQ4wU3;$(2Ov5^bLSrFM=*u7#n~)q67T}4wUZ>< zBUnH*!d^RY41ZUo#~B=`NVVey^=I_32M~!or!$6uVEDAlOGqoZd(bIh_BGA2zlp+N5P9Pk;((_Fy^J2H0-zLjuKVL<3H zH2lJ%OZoYAaGu7|4+iC0#1BF7&{x&UB%H1->agoc2bOd*{6kljk(#)Tj_^mY3TPfD z@<%mj`^k^jfP zo}5Q<_5ah6pBelf=tjBEbCtiFtClF?RloTd#-M_{^0^yVt%BV0?FZ4dK1T-aCa!_d zVA>ag8b+foJ^NlG#V^vQ_<-bA8wA!pUPi(5BmXN?8gk z3;&%h5&uVfUl|ou+qMluIi!Mgw=~GmH6Yz3A|NR-G=g+Wik zkNBvGO3cWhW!zz?o|8dF8Qt`hpE(*&P{;F>VtW>>nb|_WS!I-81(ri1podb#jDsVyqV`5`_{LU6Oj*NhAI;6l+ z6Aa*>9&7Rd{!?01M-!BXn>edmD`JGx*QB5T=1ZTj<2B;nlST|Z+nOQ(z^XMzjzS$;691t1fexxex?p!If149SmY@3^ zAL@%dSum9dLsy^G(jXkCwheS7;WUlz1^{0^z;X70V#|6w%z6$Gy^mF!mJWo(g5dOR zx!ZWtNns#E50ffbHpWBbkZC%HcRVrluCxP4{nT2aLO@~(klEXS$3pM^Yb9YlYY+AWSVG@k!ls19b=nV}^YNU2kStNf57EWd;p zDV+P*ygylb5dLU98Lm&?hb%OldaF>29bc>?LL!j&L6g6ZVG_NX#E%|2HZby0hjsrJ zh9Of2Z0u#?qo#OSJP*LrR;={_6VO1yfgUTwK)FNp+u$jAfH{wc!)>~NTKHvT?h|=Q z)EA|CT&fRT#{kQtX1(K!4+C&M3+Lr7@P`3FC5Q&r>@rZUpyA*ORKR)d?|r$WxuhiLLjsby#aarC7=oQ^L~oasyE&3`k24PnS`5DxMNY=1B_?2eQg0D=hT!k%=8U z(zdzGW6vStB@K$zpt>!Pl{ePqi93N3g`0jcD{U7`r2{m@Gf z*mHg|h)vvxq|>3e|60BM8MAKxfFzTmu{PNzas~dxku~6+1axSPGSlnXA`@F z6d7EKtnbj@4_=1V>zu3VK*fR`DmLZZQGw0maVL5#$(|9fOSDZR<2o6B=FTQ9XyqE) zC2~J07a8KUNQ|<3^YeDcQg(L?@t3&m7-zp|nF^j*o*V9GnJC6OBe>0gdDDI2;a}fc z%?W6u6tXEIG5QOasxLbEd=)k3k>y;!j(>*aUN^54QqCqY zP?z<%#h<7I!8brmk5NLe3|V{6Y)5Y3Y9DnP5l{B5yfl|j$8KG6jQpcox}_l)A-9tJ z<%_mlX|7)l6QUXMz;SC1Cn|ZU`zUJfNsaf!%Lkvh3ne_m#ou^5Da91{LbT-Ha&w3- z&Rh4j#mH@Ki~WitGxpBGlJo!2d*wx0_n?Ea1e!4 z1Lx>rp}74tuP>1Q%8TBrW{OTAJAQmL`%+rjHmeWMKf8yf#t3nmMw{X;Ca%#K-v&}A zS)C6>gT6qEveRY#cK=qsm`t%R9ox*?BvHzILFLp4(piFbBG1=2al-6=t;_XjKB_p; zDg0g<+P@c$9_nDv8nE5({+|Q?q*-l0)HLT)QskP-MAwUJu@(H0Ff6<#3LUHY$R3(D zN)LifCMRO|FA^UrJ6jVRJC2_VegEF$*wdL%*?m=nxl(N%_MzW08Y##&GFh`UTWgQ( ziKRUgb;d#3O_nJQ)XU6dUh@H_ zNqjA;w_5*(5;eT-Pja+)yWCfG7_V!}R!)_*KaKWKamb>qn- zQPb&4(@K!ea@^ymlhQjsCMD;NSbu|F297`)G550XDk`)FZMvp%l6l@Z-3+fqx#(4$?#UO9jlD4@F*;UJR77$5eAm3ITq`_~ z<^B(r9=Ud)iO6^aV977YC8iZ~9|&{?rWIEMCrzpNV$r!14^tKPjV0&8oJhidv#=4+ zs8{AKS1lR6{dxCUoJ^SV1=T%)vN_UhzfD|H?pRr%;Gzcp=;eKug4sM`kGc^7d09iQzMH=Q6#lk%czXOlD zsDB+IJDBeaVeWHEb7A-fR|N`|-3X z?epZiJwS_`e6+PS`~~zvgO@b%@)g(xqFjIP5l*mQ$dUD`D~|+?XnV{A=6_8;56WPa z7^|@^n^r!qqeD^%eu^%1t4|9)S}r30x-8Zok4O5}3QRWtNfh&iF+r3Sen;7Z1s98Y zmSQ&lQI7~LpfDu1b2HxW+MDllw$hKfPj0P@ntmATbAI0?`bR2f4joPhYGOXdn-sr$ znmjACGd6Gh=waKM?{r-{eU#s_jjmnUYC(%uZ|Gkyu!5!}rP^CCtQ}{vq@+=Iupy!r z_q{MSx7&U$6g#pWm!(9IR6npWU?c3Dn^4HcoItWwfJA!~a;*n#+%zJfTW`N_&J?qI zBPv60A+ZWaA=qTd0?FORPvEwhs|u+j)qc!kbn`VesF-OZEtl2X7g&LnUEhllWiSJr z;Nz5vpO$7wQTG)3S_vf{!GnJ5gb4^OcR^M{!YI zw%7`n_~K_Qx^%|)j7>tFeys-Ixt~*Q>xhvY6{+o8$G~P#lA-k?8)#`AJ9Gxee9viL zoJ%52LC)GFm_2X5^y6DNUH;c{Y(a_nEykRu*KiAHxU z`af8#-7|_Oi}vBM3xqACTlj9UkTJB4aL}Yix{`}mT=HKa%8r=#5#o>5H25q$K_2@! z9WFr-HA+Kw6uB1olkL~jLt}gALRPqBOY@q!WI zJcvP0VkehcsfB)X6WK_cr2K1}2rY@(m6ck5(du79q_qe%=8nn{IsDTK@{K*Tfq-Fz zLVfyf>pNw@zcs#{CBB0UpX!!hSR2u|AOBL zeRz^7i)*h#dS>#PEzHd^dZrW0?5L@JKlXgb_MSRe)dY-m?Zh{Ow@nu#5Z@kG?IPkSGVG%`A<|20nL8< zQM8682lBlLG09&EKW~+uen!z>v#4?TNl^Ru)c}4;5L~Ngsu(Ec`Xw8&tPtyqI+I1i z&Qk+PIxI_>_?KdE(<{oI#CZsIj(0*_tGH@+^tJCORx zcZrVAbm>1gl2CQ!@cFf25UXGstvto;+r~`Ro~>1fy`EmSh>{aE@Xo*Y}_@H;qZ$jh`o8yzOF%xB2e;ZU$6Vq>K1KN}%DF$y* z#n>BK)V=Hwy7C?nSxbpz-0D54Ed0&TTwx#rQc9Bb!06fNzd==QAiiYaW`ygrKRnOI z?#qeEV2wW%3>Gcat*h})s{1?D2c$fYPqtfsu>vpry|5nT1QXDSF3;bIeZQHYMzQC$ zCrkgu75#;EpW0>jPAsoIbJmHetfzBTGJCDSVEK!#HR}%BaBmU4BRQy7N_uxfT%NkE(mK1MWf9kjlN7z zl62=XbFZAy_42#m5+j=v0cF7esrIBHT@DX9{{5KK4*%6H*0k2adFN%wepCLiCyss- zd5%{Xji*JfmwD5wR2#jYiAE->o5hthcm4J3ul1Dx4?59eo-SYCne)qIkpF4!_9Ws;&K-{*#yzv8#^QuD`HOrrL^B~THNZWwzZ0A1#3Y8hEoiA+VGdOG4mA`rLM>ZXf zqV5)Ze$7pmF&xV=4VIjuR@CjJ!>l0aFm?{5D$0!*PkC+jEjo7pIhMF}mJk=~`RVWA z@?blVMbcZ6fiA=BO-St4@!~Y&Qr#O28{1q+lrA+rMKv638;xrFI7YB`I#1iFaN3J} z_o3!%f8@NA0G|F0cz@dmntq!KqoxHiW4^Q2Yv!CM1+CJ<>2=PZC9+ZWMbg8R9a?e% z8$Q8hw*7KpAyrqN&0aNd_Cj!)u+6NEOZJR{-N6`X4r^Jje()(eqzB5A^7hF9>-(@* zL?5PljQJwb4gZauvqnrGNYosfwy1JaQ08bjp=0^dKJ27>jt_U@1M{6AE6LP_3mzue zaf`o{J47B%H&I3qp0hYO=4^m53Vl_0xyAkRf6vbH%iqj3UH zPoUY&WC~9Jmj5|pD=eta;uN;2t%FnaBdE?&k`GDZ7+`KXhmf{@xlDJr1SZXLz6p~` zfzNHo8P({+nYrMAKK1)xDV&mjippAR%)R^I<*6y^>?i55mcPD8`_MJ~IDy`OOr?mq zyoa%?k7C3!D{@5M=s6jX`_aY6+Yl}=*uF>t{^1a>0kN{Zz=f1|&7-}$e_1bq%o=KQ z=1ZU<+4~y(g~rCC2pr;9@Jv3$W~x&h;gzOa963h{-Vw9`{i28uCbl6uYx!P9a4dXb zAO4hGxb9z_A{|M_L17^|lJ_J2`wx-tKfXviq|#758zSB@G`;Dw2ALhipQ50PEufqSjLkrKU|C%a)> zD~63RbGLWEqx=C7>4d#%7s;Zof%`cnsBTr0eE8~2wd!d87(2Jl2{rA$HKks|DW6x6 zJj96`ee^~(z~OYI&U(w?mIz20vH8(%;BmF8QWAA?XLz~Vr1YAeuOn%oR1AGBq*QZ$&?amv08vm+=o z@$pR~85H+cAJ2Yy8ftKPe_y zjv55Xe*c1)U<^vpp_cc54-3X0W!! zmIHjU1ZWI!T5dwEOT1bxHM=*KEdBZhJq%HQDJ*r;7j+lw-)txr^ zTdcg%=&1b$y0}E)@kRH&u``%wxEwF3p?u$s>cMrm*mo%fy7&d6Y!j1``p|NulFk;* zin_3V-ZybvruZ*twYe>#Lw!+2yMMCRw&l2h*V0NX?2fJf3G8V~TxA?H{5H&Fd#My z-S}pFe3BBJpW=wwmLO>uRQP^F62(fneaaUtBmT&?H{%avADYjvN%@3wy`%19`|CQs zKPaL(kYfXchaL!#Fmg+P`B%~T(UIFoq2<8xe>|jvft**wi8_M6B!1_(+EdHfhAtti z5rpBf=^N>XX{qvxM9aC?s35q37a!kORqu&`Z;W;JS?PsoRjAN}%fL|3%dl9CpGje8 zN#Uv2*a@z$A8@5_Af3(r;B3F|;Em_z=<5GX>k^D<>7&R(aA*jp_ zBh3u^7)|o}3uKrHC%=(S#55P|*nH7d@?q}yKX?~NRIXS12I4K3&ppMUJ+ZvXL>=Po?meGWGUvIV5*pMc33uY!odj4XQ8X;&~&FK8726Bs)BwoAn`^&gOK8 zWV49pGD>)q?mAI}d(fNi28Mfa>%Q@f5{d(QdUd zY*Knyf~4p8KtZxkm+NOTBcz-Q(lm}3M=3mFAM@3s}L%i2_i5!{}=N}dpaxy)RKG`WGoK5E;Ji>FBJ%tj)64cG; zxP43cvn@^q27QZkn)C6}qI}&%Yb4zBT9hojPrhJg#*>Cm@N;voZ&{qKb?)euG+r+Y@%h|)*BnI(9|)ZymMWpH;jF47E$t&U65ZnHBg=6aKj$}2|6!t_X)|-j`_bN+ zDDf5UAp2UT#3uEncWdH$sJ z6tH=Fg`oB?fpIDhCz)iwg_2Uky+0Z9>?KowzwT_NtLs5D&imy4j7paWr>E)Q{s+Id zNo#HKQvb`%k(%vkpv@dd{wI6ROl2#w)CK){6aLl7ln6Mr{TCu%8Opq*1Ikdz(5VOv z#$W!H((xA>){yeP*I%$O;BRqWU}tU@_3KN1L!TvVFqNq1{&ectA$A64QlK*39O07D za>gqRD!2Q$ZRq&7*Jm*atS?hdg6}@*@PB=hiB_^j_#(ph>e+w&u@QtX8WCUu`ug>2 zIp7YZYpZC|gzwCJ#6zz|e}^HHs>1p{!SJ8&rT|9_ZufrFIRr!S*in<9$;=%hU5$x2 zrjPXV6=e$IJ_|Gfj)(??ey(l!0K6d)Hjv;-G7x%Xo1h-oQN6m_7(gqUxQ3&{QG%`u zI-D#R$o=s3E5X`$2KW2QSN5YFi~JubYiEoh0rMh3`~z@0L-`}P*GTl7z4i0SuOE-> z#PH(-RV!qGW-SjfptUv_(aLljgiG_^sg{lUb`kh^(L9VO#+pnf^Iy+t7U-AcMtoh^ zH0zc!>MUvct2no+xaWEur4VhwOwNDs&!4<=-OXZsnr*yZSbKkRAuH!zy=M8P}5!0lh`q2T;R zQNgbb9oGpjl_-O9M!?Rw2}hXpl{Av5Nu1vWob2xGfK3wrCwVp zcA<{g&-?u^u3GYB<`x363r7wN)&&Ob(x-$gUmG8_oQhxp|FErXo&W0Y^CW}U;=_JJ z_|tJ$2N8<)VduLG_bFtin$LAnT>r7~)K1l&!a%uVG{Y0Gb{A@1mE6w807SHt$G!#c zm3fL0qUU_a&_5?5ikadmW{^ML{_ihqIN;-JTzBSF!s;GnBXJ|AUWE14LK9R_XTX8%vFzL%tW>6H}jEZ)i)n z?slPLJT#smvU)klrB1O;<^IzmVuJyicYQmeg*IO|=HkDI2Q7yZMW<-nF1(^9yLf{= z2DgUwPbNo&=6)%mbok_u6}<6yh;73?it05L5E6iR)Wb|iEArFU%kh4OFAi_+GlG@q zj$%_2>m3gPi$V=sb zuDX^1MMmd4r&p*Vd0{pF)+fBWFM=wHbFirJ!{xUbb6l^+U5bGlXAh!E3A|`TLSk`j z+gx5W=cfrPhfWC^uc$YiD(kklvE~70Cy05o9<_E(TD+dtp+1XN-{H<@ZL?aua#2Wr z*hpck`dfK_-X5%cyt|QPN3B=vFo6<%hCILDmps!+gbWdBpUMq%?|+)Nq6scWzaa)+ z^|Qnj-1g<114##wE^u*6wNG>t^l zI`Bj$6(5eV(r1-XSh!@G^M*8ItG*bm6G_J);3*0nxz4&?B z10C{EVl-cHTsnQ)1p1@NSO$dWM>8G2q~vf(Poy079Z8H*zM%?oHl*pVE1}v;y5jga zh>i3))E_P7H9753x{^U0OniDV2pR4;Qe3oRJ1VljoINU#B4*xc=*rGFijdIwMa*>o z&+rkuv>ZNa%|6WQ3#d8IdwVXj6~*3GP%3ga0r-k^fW^Ekn10=C6(Sj*qVR^ zkUhvK1i4tkU;X>+GxaT=9hDulPz!wGd(%CoP0(x?bh+$sZ;kH5T^ z3ffQEaUaRId;S{ZxcdERsJ()U5#u$V{RkperFEDoChj~^DsVEE`T6KX`Q4Ozg6}Q0 zfYMlSf>t;PQ*cmP{S{<#8kG+fX0X@{_y;MRX2w>hIdTeK*zV6cu*4VTZ{wD7qjDXH zu_e$Qs6ammFbsLN7+YZu%!Go!}ekUr%`A zBVXBbLi%pJ)1EU;CPCU!%W1dkZ}^*@0(*vv3)Lww84=D@0ocQwMECBYT7qSCJ3NW7 zm~*Ju*CeY5G)ES;C_*VO$8!-TZ=3GD$osyhL&PN>|@VtuhYm*%$P;H(Z3@NVC zG2NOgQL?}Oc?35m(RM5vC#U~NPl!As(%qYLt#a%s?(8fbyGz*$dxlt}xWetULpuDdb{SXS0JA4|W)>L{nu-WZU*RNre$=^=vkS3)HO}D~buYL#hX4zVm zo;rT`_aOryWrm_9yh^}BNl}#K)MYDVOyB$;;>>GJ diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.small-dark.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.small-dark.png index bb84a7c427438cf67c71da5053147df2241361e5..d60b1dd86cb11c161111c981569c35be6de732ba 100644 GIT binary patch literal 29105 zcmeGDWmFtp+XV=B;}R@ra0%|g9YV0+5Fj{&0FAr5C&5Ap?oRMP;~GeSK!Aouf)kv^ z-C>I7&i%aapYO*vYt5`RYX(+RO?P$G=~Ji9-q+syyw^}uz`-KN0)ap{N{TPEKp-## zcw}Lq0k254Yy|-uu$z{`b5PYV+{=_TfhncmSXNyG70g|IZO~k^bEq49P|Q@AIsO zkFnIn_yHSCXGMKC5D1&_;Qz!iV@*Nj}x%j&Nfx(fRSPl3>*QPU}eB$lma;j^p8-Urq}F z*2CFSH{UD`U%xhzd#iH8smc4^uVCfV-4lwOoAQ~UXl2Ea9W8V(#@2C}XglP8KVX0TXVhi; zRp)JD&sA0F>?b=~@n?=-Y;)1`EeHwNq#a#oKY=Huki#5u0)hiV0`eKpeONP)ZI@Cl z;%o{`4i|DyY0b{639)w!0wun3*QnPx)x-Y!V;`0 zFZiq$&1giH-!Z%~G`LSW`rU-~dr5ed!5Oy=jU%G2Q@n)Yks4Bcr@vlo}cq(piA6)X~GQ8|6PAi!tz9Ot;D)viCO{p-a zwxpSdH@e{&;~8sTh%`}yHO@iZhdWQiT&S9`%hnfRn=Kn*$36dFX^r@aCBxDsT$V#v zy^+BJfn!8FzFU?%i=8ye>c$HdzHgx;Ka{yULudD!%9SpErSsuAwVw+1s%BQK)lmCL zSj~NxA6#?Giy6pcAm=Q|^Gz1M?;81EjlbA63=*S}dD9Sdf4wN|yu=)Exe_n6Ja^2E z!l@EuNyRp=qh}gz?I|AZNp-ZHl=eA2WJL1%(PGejd!(C^exom(nys_tFiUyxusgcd zd40NE;+fkK_90wd>dy~jZl7+%!p6v{&EN>^RM6=gJ?BPDk~Ly``j~{@V9#{2V&d7O zliN|*u?zHh>FxIc11_}q5xe@xH`2|WI3JT~8riE`(87s15u+A;c8YgLgWN282AbGB zU*9{(l=IbQGy1y|zg=6U6XArr(a?=dc|89}A@g&)MRZInZ*ACNHVlu7Xyn8JK1;{R z*SZiAcBw7ZqR_UceHJ{BXK+^By058RvV7WDU3Vwo!#{ZwFkN-Rsn`tl2M^%kyqcCW;nvCN=9at6J>4-;*F znk|ffYmI43X}R`wdn4(wopG9)KH8CNw7y+Q8c?mWqFg*W%BgV1>UZWjI^ZJE72kd_ z>+&dfMCAO&;C$|S>RN!3&G%&T&*$JD)PR)Lcxf+dv3gsn})v zJc)+tErPvIzU~^F;Yr;DlbU#I;yo?S4DbJxm~5NUC3SzPo+UL;g2Dsm5dHJi|8Om( zMFr)VWjvXLZcp|UbSLfpn#Mo4y7LZAU8)ZG7reh@B52#eYiY2$W2`0M=x50lPMF5q zbZOAgw^&P`<)0-y=0~sE?s_RM)-#;y%Zti9s(V6wyqVP@*Gg{>~PFkx84n&Ew4YagO;XOwu{&;7TV1LkuSf5O29L69(g6?gp6lw9)ZGOkjIDF$h@B^3k`j+d zWrJ&bl5ktde%y5-U_W5@!{%fi-Vt{6;U%dlgeA-Cn`zCP3H=!<)yuHRM^mnwvKwau z<*oHnx9N7(Q&T6Fa0GLBRr{Sh)fr-Ms^+M|P2+bn_OrU5TI9@2Hj5Z1$FtK1zzM)r$QVEp&W$h!Uh)= z3b^vuXS;AG^~}Q;*lVJwZjPp0%$N4W==MP#5oLh z3w@8Bak*<7Ohz~XW;@>5-o)gS%BdgB*%kY(OWbziHjs8t*6lqP1sGdVXCqy7jLRH` zXCi6d&)7sOCj0NDyrMfD*EBF>kjx7hd34&AWAmwJmettjtt-jU_}N&Y#pQ&aleYLZ z!L_yasYUNZHD$8n^m7uTB=5cL`Jj(+)}p=WSP+9RbHa3k*Uc1-80b7EQ>gBmN_yVc ztAtu(r(NCPsIAN7uGlc*YQIy8(rS^Wqx23h$Mwo^bLdj@lTPvNM2f*4?`b=PG-y|m zXhwUh7nH8M()F!}$NRS;Y*!`)<=cdpG-G6J#aLFdE=NFpCS)bS5d$ejm*sXUTvW&) z!rk0C^p~H+S)6qad<*mDN>p;CN#f*yA)DWyabvPRzqfX^eM?`&SNabd`V}-l^<=bV zO&)egjm*))rgDeEU#V-b0DZ1{@%<%PtQ z#B97#-kj1Lb>ONdXQC7KTnt`%$EppVwcX(5*S^N>BrYf-cJD+Pe*0Y*@pi9dKWhrD z!~F|vX5DS>c7{4D%0=Y%^ls>?Wp567-|LtwxPf__@{5iIsQs!9+t#Bik3oJru4OCR z&wMz?FR;YZ26p}{E1Arg7`pn~XXTTYz}(g~V`1}Q(zHtC6KOxgd=Ig9ZfU~FxlJj7 zE%>a*K@%fHe@vol&6O#;?-HAI`?`rdVhTXu3RO|0bd8nZRf#9^LU@hQ+{V?$PoY{O zv;_U-!v?X+T&+fZ6n1UA!Rw$+iL{w^JyTBjBQ>-dqq4qlVW$JJdnA(8#MarBoIwaH zCh*qz#;o-991@N*E{fGh{$ng)_)t$ZftYO@FGq-ex z-Ys0O;%H7!!n`(;_|zgBg&?5(gq^}CW~CSUh%Z=hlD;PM0o9S{-8QY&pa z>;c1b!ck^NtE>C{Wwz?=n7IL+tQfhwKSdR6i7|3*BwSVs=WvAPD>z?tbh{NW%Acc& z9T#m2ZSu5GV7z=DN5R}krmh?_JDkN00pW9HqO6qj({=GfC7VYj-rN+T5v?nBx$;$S zJz`#JwhbjT%fv50RSXgdvCp-wuvF_9J>tJ|85>*8nfhAS$0^I6e&?cwRGSISZ$^rc zTvMR-GuoEkgrmxw<5U`}l@fS|FGkS>6vD~8e%8YEHtkjx1$a*CanlpMQ2346jm*D& z>w4YzD~gLEdA1^q$z5cr{br!tH{Z3Vm)+xu&8b_#VE1d-;ZGaiHy{5{zG~+*Z^=)k z$-!O(ZF*Tf*`j`i%*l+_{MGRnUqXSe*k>KexVL$nNw_Gmg5DT-71-1BN~alKqLg|@ zA^aPz)SMZU`1*v;EsZih{G&des*eI^N&A8$8sP|o z>CjeL)6EC+#p?G3>Yqst7w^uz+C#$}K~A@+ag!|Q7*_+B8Ust|HVk13EpMCJV$Je9 zvp|7o%^TlzI8IJ$cgC}l3&D*0E3;s9iuDmp6}2i&^*ZqcpW_*h#FbAHCUt@B#~UKx zA#j3YE?tkpRuVU5urQA+bywkr;Uh~jnrG; zr>0w_a-0yUG{0)0_@r}jZMV~;T2e@P^kVDRJn($?ENL}}j4>y+uS#^3jB~rg% zEgA+BUp8q*f@Z$(L-Q5@>_DE04R-TQLxl;VWNGU>md4J_!hO-Y#U1R)hT~A$2r>XU z2z7}V(}1BkG8?awP+&-q668_GD`3BuvJ{BtLo)0J-TC7+oI)Z<{}I$(&F zlo4U%Hs|L;^MxW~sjCC|HDf)S1s2sEOJ%&cb|aT-sbfv3NvLu{HBNhyBac1`hm>W_ z1pjST2&m;gmw-&bv-S!Fl6RG9#acX^8b2p{^P$3TUk1TEd4HK?o=atOv58qPiA}zF z`^jX9YDbXvZx?h17iYX#hKgVf-+xU{gpZrPwDf>YI()v`h?hi;G+#~qiI9~Io9MeH z^zd#pL59^i6-na7#>k#8AbX^PlNbmJBoP*(>N1+7kE+viIgY<>!oI$aA|**N9}Z2_ zkZ?hB4Z`Ew@>#7$VYOaORT6co%N7#gLtm4)%CGPA|AG};$^5sp zFB%oyy%%!c{VNpm*%&DBl>8IN}%b?W93@72L;tp!3pE1GzyXETe2MhPy8=SyF| zm<(~k2*x$vT(irTbMj5?eIM+U{9J84fr~;L5yIkMlOE602up^~9=%(*9B7v4vd<0! z%|zz9mAwRb7|zEo#C#A&Z%htaD7V~g9?R|bz9GYW=@~+(ug%w^^rfoJX;Z^6@f<<7 z5HvP8j9bF*4)dLk?m@1(4taNR$T6v#xu(GVqQbk4n>$P`V797MU3cp4oqNk5E^=?XC6 zR^{O0hBf;!57zAnFv7&7t}U^6L?)(;!sK`;?>P>Wl8rt&l+Ij$=EhoNi*5OwtMt6| z>-{Bs%H;NygnDW*r?0O748*xfr>Yu9^_`0Pi9Q2CRK;d0PuwZI z2L;)s&HB;tZqSC+^;{j$%UO}0JOZ$~h8Q#VD1b$(};I};a z5!XuQeF0Z*%8Clx4$jn?xU4~FYuHry(?yU<=6OQ!o}T`3XB6dI$YC!qnG}x(>xStV zo{mhdBndd|tr%jUleGAi3eAf%RW0WJA^U>HGRb^eM9pf0e&5=l#I4{5G6Xru!bEf! zgTO=T;g30}h&dpqa%_vcOXe0ycIHhDBwNhINeUlJ$~sfo?x>nj2#vAA(e;8pvnocE z@rP5I-eWH3FT0+$zt<-}K_R|{xw{-t8^DZPPpeMft3)cW*riGjbMNHe%wv+btS}9s z+CgJDwS(iHxbrC2m6BjL)`SA#iNn()K{D=d`&tTOeiP&(i-ii_H_TW?> z2K{x-o+G@54@DZlm^k}0#wEqkJPH1V{2(r`^(2p7FheC?e2i~qVj-qpN5lfjgG zi3WO$n@StyE_k(NMCQL&a7aG2tRuxpz_BbF${-xc5>%D8ly522;#(V6t-qzom!=3J zxBHxE5zar)pfm7{sgNZ_V?R&YKXZopIhG^47!e^@Y35%)3M%&@0 zgDb)Eoo$C%a9eI&F4}dSf^&YHyBS|n+xzy>C}i|`ISb}ru(d*`MU{?pepe_>;a?2F zLV*eJyqm0EK@;}?%M3O+zMi*x9;s19p*GmI_niWc|H>gS=VOH*UUk6wm%YQJ$?(fI zg`dw3#UI!9k~(&88_Y7zO&x031Z*vBQ@5Bw60QeiyKSZT#Kxok#Rue>K&o!sEG_qs zp5_mz@t+$W2?CA=M^jeXU;_~K0G`;nm0O>YguW=i(NO*iZ?7M{UWKR{;!BGqMGB4s zqf51fs7Xm8{lDk|GU$5KMXz8t6Z&6}v=c4rQbmkH!T$q-B*-Kp25=G-m|9UD&MAqs zA)FP}Q7gXqU-Ww#Oj1Ku(?6QtK>II}&ZMicIw$(_J4pW>(qL%tk6^jDNhm59s%-<2 zZAXPoy1xv`7%#9vMuJd;4u4_8%thru<8Xx*b7K61x17NZ#oAbNh19AP_|miZ?rJ(p zAWk!0vxEWxhku6=7%GsZwZwD^`TwVDYT0uOmOqK#zjGk(IOmlVQN0bZJ-$&l?F>^K!X-QT7npZNCz+Op*mer6PNeMO9>iz{Pb<(GpaD#1<>hKBd; zT|xmt&SwOlsIK`||Z*@adR#ip9B| zpSS}9s{k?}0QA%(=w$N*<<$Qj?6IgovlJfD@M48rZ9iwQfHDTKD4MnehBa7a2U?-a z$B?gVJuTr9qsrK8*6aK*oYtrjb?otZQmwiJS-RZ!{_ZwA&SUWwZ)vzyFt4t+n z%xJX#kzP+ag>@WPy>Il-Jhl(i>W(-D-67r6{E+AA=R&J{O@Kb*zVW&Vf_dkAZ#AzZ z%z804Se@&-iGj1J@3u}S!H#a~e_510&frZrTWnWD`0LmHXkUY!v~@W+VyZV_w9=Z! z|9aPpOu|z5|G|wV$Dk4hSb|=|NYBCogr>s_S`s;H2N64({6Q-cz-ub}njW322X#&MEJ1+=KIy8YFLdL* z1cKPW+rI^D43l=fmmJvs{Uy4gY0-N{b;tWm1coSz+m1V}pb=L_h}PN~_1e#fL-lN*^XCCXvBYmeKmX?};UtPf9d zk+mr3R)}J!P5W$)w&t9P!Sy7Z4|p6jz4j;cxJ#CUyD*goI_`Qi#C@*ERJ#qRy8w~Y z|CYomn-l%AohI-dW?~6K(7gLr1nZxvjEW_=$d6SbQ7>hEuJH9z|LUVw}2ZYg|nlus;sLW8-9HSx~MK*c=@ z|5v8sFV4-vm0@u|kIJ@KTvvM^fE|4vxvLwI>Qhoyhwld8S-1R95qq|E1GM3vB84Tl zy!VwK?UuTQ#4B<&5^A>C&O;+dg~2{OUr+v(y@R+C^Lq`*y;(@8kw}=DJSlL zO&l)$Gt{=Ix__~1oJ_jz@L0Q`M?r9LY6sUEJ+Te-K=lEG{;5GpU}$4kD z_|1ACKjGPbL01*bFDB!5TQKlv$Lv!hsDl+ixBt-5{bHmU{epg7gw2rh0SV~ePZ|HF7L-P&cA?31c@F(T3^)jw-!^*b1w(k9G|l`8Zzl{hu(%^_4;y|m-OK(TB6PqFKc z-?f&^@xO}Q`R60FpS3{%{8B7sR>gxvF_v7FNdU?Lg@-_dZc$;5dDi#?tidGGvpCLb zQwks|6z66}Y%mlwvn379xI=<8!uT-Oh=BTf7frZin;{q%scG(01aQh-ciI`%ATZQ$ z^GUcXRxT>c6FC!pN+696Hgf#=95|(?DE@A7CuoNA!O8%$j|G%>v0)&If9#h92l%l+N!OXzKMfDXk?cIA-g;%ez z=;;aZ$*H3)dh#bs?vF9wYaHhBLOfLH5BiDfndvy_G4sr^e&xB?#>**YK*Gc2S$@l3g}ayQx+w09;e5R$ z7GB2N5=N+}`EH2xkoECLtvvbL)#iHA3cXD903iRgNmEoBdH%{sOGDH!=PrqbZ41Fy z{rh_ZnShlM%w2@i*=A3iA)gSRN|}Y3Rz?43Ufw9A;7r5vG_v9S^9+j~XZLdao6C0= z2SK({%cYZ$3DIBMJ}*`_8MIthgDmOGjP(jn5K*wyIAKH(QSQXBTO@CsP3oCOa?^w* z$=}PQ6C9_w8`^+8m3LcV+%I)0M#OP1M^k6r@$Peo9l=7w_wvNchKe?^0YDR6YCm7> zdoUjLOy*-HsypKbxjK=;3%x|kM`-*v%`<(@Y;%0vcg9g4Y@W9p9w$$n>bW>oO~PH3 zp1$a#XXV0G`idZ9J z3`gW8tik_`xOA*dSd*tBl?$>c*F7MF{`*4~MP->XBoD~;WWQRBY-{-I?~(N~zV<{%vrP1c#(hwmFeB7`-2w8+ zE}gwcIGYt(Ye+wJHf(0vWrWa2o{$tR+k#Z56j~QKw*WKEQQ~@OySnq6oZY1P&V^DF z0EP$Wo%>>&`q#%5DE~|m(?rq=Z{210^3}H^YProexUR_lY^~LUHp)i<`i8tWV_n$`kj$`>oavB>4P#J?9NAPelv2+)fYWNkFnCv8{0m$qO%Toy z?U?vrOeLyIRPIXvhBQX(YT+xQHZT=cP6b?|(~VhhJ^-(HSQr-ouj~?dFJsZ0-5)8- zX;dT2@0oMD0m8|^fjGF32$;yr>dt265t$g|fqU6nxI zB82dj)eJs3bzDxa7&858bo9el5qdLDwlmv^XVI%Ver_vWEvlSj>N6qW4e&~yTvwLJ zII>u(5y_~L&I=@c5g*ZPWDIoBz!SmRmnFtNlOm$SpJn4TZM(UV{tVa_i!q#}S|mKK ztgu<@5MD1W_?SW-y<9=`v}}9l0A8|n_=_9148o7`PC-c4 z)spH_1hA6o*Ac1VME+;f)}@r9-3%6Qbp#$<-$F~P0@*-(?vt{#Q7&kC@|*w_iuOhOs%#f*2K*lO`0SH{`Kr_Me5zMcfk9FHt0;m#Wp zS0;>M$_KxWk37UZrnj1|7p@Ngqn5`95rYQ5YRNJG3u-91n~*}>4sjmg9PsCCRHDk# z-2z8LrJ&mV`YLxS=TPT`P`THEy)PelepwmwCa$)|tI*r)bGt?8)>EkMlVpI;0}h|q zekd0f;r-mP7_Z&1cz^_?-`PP1&M9+1xZb<3BJCDB)?ctV-A^0yU_;|TaFP5`*MrTL z2V2j_kkP@8-K%6p{zLB-^^#p&Ri4hUoy%qDDlmw!JrcoW<6^0sUqUyl~rf zk)CFFdX$~$?|C5?)iCJlXUckU8tGit|RR68uw#>Tku z{kzd}l}$qCisq-=K&dsB7`c$8Gh6@@qyzUvetxr80Zx@DpdlHe32o*>XTw+TzT76U z=(+mwTDV-wir0SHJG0G|a#+OcQ@U(wbo2;ir4d83Bv@705ET;IRHeMKZs^p**|@N0 z6Lu%5{FeivVQv0mjYmh>M4Wc1cY^dJTzE1uAp^$~2kM4_XpmvMc!~{j4-Muar&rOcc!u z_p?Ai_sIAv_^v(|GDs8?540BN-3J>zqM5+dA!OHB;6sP6<9t6No@iPPee&D0&nK0q zqs*LC!53~!$(&QGLIGM~Rvkq?x`~KBoqfDPg%sfU?=6qD+4kf52F-mVsVmwqB)$`6 zVE6aT^axx|I5NSP3Pd@bu%Z4iS{uX{u zXL6Z|j*50O zAoBJ?7p@xF?t%jaOBous@zK;70n#wO$C{66LXyH-&3<$Zr+%5EI&QK0^LfGNwbnGI zmq{CjUd|W)QTTP9wTqYv^(ZR#hMHC&R!%R zKy;DV_}=gq%hJn3qh&_Ion!QBsOP2d+FJ_COo<}R-gM%==5J7`%vpaKL#}9etL?-- z8~e9<17<|G?#VEasuEi`DtS>L&P&OsJiC&aS0wBQ(aW4G!IC z-hGZgTA*)7t04`4{BkdV2`l+_hp^*^tz2KKG6fo6o^j0%^V3rUMrY3_nX!zj(Zad` z$fA7tIIi7s-)eAw3O9Sv$$MyY@~bGnT0|&HQ`8fU6`p%koTlg@GDZ~2jqi@i^j+w> z!;Fz*!R{2N2?b|-+1iW2XS)bUzwM+8Vs>=5L<)W2aN_W3g{2{k^Y*e<9krE4Igk^I zMve^eg!NB&Zb5)FS`ovB|{ZX>MnFx!l_nQH($e4F~nxQQl7Op0iD- zSxZqc)Xv2=;M*?7W~fiAW@+-aOOj%UYszoSse2=}^VprLQsf4)2H6H6i*vd|@IG)n zm8Bis@E4UXj z-WRt{jl;&?AmPg&R65gyli5Rv@`gps8)-lfV8_#EU#eFd_cQ7WV{!)!jU zQQta=j0z)0pvkkW7sU*0b+4MA9TCSU6X=Zt-+juQ4Ny#y&o7W|$Wc>_15rt`oV5yO zK7wZIh3h+(R8ifZyOPVtm34Ow&?yeu@7KwcSX)}amgvZMUHO+2AwRvn1Q$0b1Wn$f z3p&ZE1=0Z-QeLaM7yf6L8$i|@NdI0Vovm{ke!YoFsvnC8NAL4JDzX36d(L;>Xad2p zTVnHyL~~E}HN+bF|DhKg?@!jn3u1NL-}%kCY!n+f^qbzI{By5oAZ=#0AvrMiF<+w_ zcc)EycshQgqqqYK=kKbGa|Z15=^iO&KwNsOhRbr^<-Gme9B?Vz71&tV4hv7w+~3;M z4|g8WKNuDELCZ=iSuUB(S)EjBV-t8#vnkbb-LKTbcKG+aR0OP91leC0BTaS+b1Hx=vbV)f=>ICXD;f=ZDQ6N5O50vN+MDd;8r1&v?Zc0|i z^Blgt<_)iWuX~wP(EyUO-Px!For(HY-)-iNvk;egYl8e4wdYC^21N;Lmc;D$M>%!) zrgO-2e|*TtGHF)9aesN;+;7pu>sIt*a`;h!ygsOMgS+zzOTzcO2Vj+7uj?fMac`_<7?KnH;9CG; zc0W+SfXyI535Vy^*QnTv=UTRCk7tW5ZX;s>t8!K*3!akw*oyCUxusje6XTD%`tSQs z9#dW}ZrP4#B!)hLc)arazM4!YSZ(yrT^1>}KYGsg#3*zMc5Do!#=-8nJP9Y0Q_>b7 z)f_h?tywe*Z`s%!mvFwd@f1furLk>toIj(b_PrpO^SsX5l!Cld8yP;H&@)|mh?weW zbtHEjAsk=nsKXASx#~ddydm=L6u_x-G`Mq6;D(x!SC8uHx?zsw5^q52_c-0TZt zT8j&f?-8P*6Gl=eRw2DGIPm-7Lb;*vE)5l;CSnNVA4G&$nzp>5Wq5+&baxtv|^s&c(FIWm3e&}>aH#BCuFyNZPFFOd)M1OUq|`rZba{uP1@&8m`7}X}HGoNmr&!d)RbXdg|6AgQ2QRlaI$S$Y6qX zxs`}l^nFi0Iu6s6y?*e`IYVLuS!HvB8)lX(N6;N~tO-PhK~A(IUqpfsRPU%yi-@IX zQ5-pCVu7x0b-K^3ST3zTRQ4W3c3c{P`bZ@cHA&Xzya%-~ejH`81bF2)1N8ZEHTv_Z zNcq8Xyvw;#ReX9|erp^QEQsfc+0Cb#HE>Z8^6|lEb;;k0neO=0QSA@Rti0ogj0n0SsVaa(}RL&8E3+^@80_ zss?IqQqqq&ym59eYG*rfg+G!Ir{rlXHK*fqV?pW@Kn6`fOMer

($eoEc#*mrhuY zomcH%uWWXk>K?U-W1nrRjl^-c@&SQ&hbOi#G%RcZid7uV;Diu#7dHlkQgT1GW?H z{}bL8(1+av>lp9vy%t2-frWt)4+{f#vrscB<<9ygFJfFV3A5hV7f(RTOB;1Uq1{F552=6i#o7#R#pO;%z8oCRTP3O>w17wcI8*QM4u zcVLgHifuE8%MzhNwe5w02HebY+_2y_FbxESt2;a6T^sPvi=T(~fC2>$*Uyk=DGlCwimc1(q zo%x6CQS1^$4DSICZDY1;`peeqY(JYTrMfLZGJFQk($-K3YCRL3x!rL)S?Y-|buR$W zEP8VluBNw3M>YA{r_sb}K5L+LV!BE*${tT5CTz=l_e!iucbPmhCE5G-|F?O3j9WU^bN*4`a3IGm=d3cNXF9@vk$>Awb+FKWr1n-FcQ<))b2 zrP$(~j--l2NnY>pr3+i8vqfiM9dVh~%Y&(&wck|hjpLwo*!LUjwF;a*?TaEEKcBw` zWp(Z%c~IfZub{O%T*n0qGgNj|f(%GoB0?yEbiy2YO*jR%b%8eW7>j96E3z4C;RdHs z1+|c-;J}_%@^pzVBHZD%|n+? z2_=&OZiFIDz{%H8p<(n62dK^JzR{>Gn0k_%!(mlmfMG;r!$DhD>}+JVAq$9+vDVp} zE2V`7$g4?COzZ`JlO4K|�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 literal 29143 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 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance_whenClosed.default-dark.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance_whenClosed.default-dark.png index 80740c8feffc311e860f564d8d2e95918ad61956..660764585484b9a7e4baa49e51c3f71bd1ef1e6a 100644 GIT binary patch literal 26106 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 S5x64}fTv38iY4;qf&T^Q{Ep=S literal 26132 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 Y7sgc-Pc8)fF$PHWf!6&BMXS*N0qj1iCIA2c From 04247bdd23e6867a5912657fa6acaa51134b30d6 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 20 Aug 2024 00:17:14 +0100 Subject: [PATCH 41/47] Update CHANGELOG.md --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index be6a66b22e..91488ef856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming ## StreamChat +### ✅ Added +- Add helper functions to `Poll` that extracts common domain logic [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) ### 🐞 Fixed - Fix Logger printing the incorrect thread name [#3382](https://github.com/GetStream/stream-chat-swift/pull/3382) +- Fix `PollOption.latestVotes` sorting [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) +- Fix `Poll.latestAnswers` sorting [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) +- Fix `Poll` updates not triggering message updates in `ChannelController` [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) + +## StreamChatUI +### ✅ Added +- ✨ Introducing `ViewContainerBuilder`, a new, easier way to customize views [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) (Learn more by reading the docs [here](https://getstream.io/chat/docs/sdk/ios/uikit/custom-components/)) +- Add `PollAttachmentView` component to render polls in the message list [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) +- Add `ChatUserAvatarView.shouldShowOnlineIndicator` to disable the online indicator easily [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) # [4.62.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.62.0) _August 15, 2024_ From 3746d0f252fae4bd03e45655a17662fc87cab17d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 20 Aug 2024 00:37:58 +0100 Subject: [PATCH 42/47] Update CHANGELOG.md --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91488ef856..8baa9c72b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - ✨ Introducing `ViewContainerBuilder`, a new, easier way to customize views [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) (Learn more by reading the docs [here](https://getstream.io/chat/docs/sdk/ios/uikit/custom-components/)) - Add `PollAttachmentView` component to render polls in the message list [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) - Add `ChatUserAvatarView.shouldShowOnlineIndicator` to disable the online indicator easily [#3374](https://github.com/GetStream/stream-chat-swift/pull/3374) +### 🎭 New Localizations +- `message.polls.subtitle.selectOne` +- `message.polls.subtitle.selectOneOrMore` +- `message.polls.subtitle.selectUpTo` +- `message.polls.subtitle.voteEnded` +- `message.polls.button.endVote` +- `message.polls.button.viewResults` +- `message.preview.poll-someone-voted` +- `message.preview.poll-you-voted` +- `message.preview.poll-someone-created` +- `message.preview.poll-you-created` +- `alert.poll.end-title` +- `alert.poll.end` # [4.62.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.62.0) _August 15, 2024_ From 87f802e9d8a6aeb753049f010d2273615b60631a Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 20 Aug 2024 00:53:39 +0100 Subject: [PATCH 43/47] Fix Xcode 14 Build, conflict with SwiftUI Spacer --- .../ChatChannelList/ChatChannelListItemView+SwiftUI_Tests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView+SwiftUI_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView+SwiftUI_Tests.swift index cb3f5931a6..1363f295ce 100644 --- a/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView+SwiftUI_Tests.swift +++ b/Tests/StreamChatUITests/SnapshotTests/ChatChannelList/ChatChannelListItemView+SwiftUI_Tests.swift @@ -27,7 +27,7 @@ final class ChatChannelListItemView_SwiftUI_Tests: XCTestCase { .mask(Circle()) .frame(width: 50, height: 50) - Spacer() + SwiftUI.Spacer() Text(dataSource.content!.channel.name!) }.padding() From f4bb25799b0dff54038920b9f0800900686d9361 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 20 Aug 2024 11:23:54 +0100 Subject: [PATCH 44/47] Revert "Change to SwiftUI ENV" This reverts commit 6d9129ad59fb1e263fe8e32747824568db754695. --- DemoApp/Shared/DemoUsers.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DemoApp/Shared/DemoUsers.swift b/DemoApp/Shared/DemoUsers.swift index 7911adf0bf..48b0473ac7 100644 --- a/DemoApp/Shared/DemoUsers.swift +++ b/DemoApp/Shared/DemoUsers.swift @@ -5,7 +5,7 @@ import Foundation import StreamChat -let apiKeyString = ProcessInfo.processInfo.environment["CUSTOM_API_KEY"] ?? DemoApiKeys.usEastC6 +let apiKeyString = ProcessInfo.processInfo.environment["CUSTOM_API_KEY"] ?? DemoApiKeys.frankfurtC1 let applicationGroupIdentifier = "group.io.getstream.iOS.ChatDemoApp" enum DemoUserType { From 6afa55891da0cfb62fe269306dcefabb971ab045 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 20 Aug 2024 17:14:06 +0100 Subject: [PATCH 45/47] Add documentation to ViewContainerBuilder --- .../ViewContainerBuilder.swift | 56 ++-- .../docs/iOS/uikit/custom-components.md | 244 ++++++++++++++++-- 2 files changed, 252 insertions(+), 48 deletions(-) diff --git a/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift b/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift index 45464444b6..5aa76c38db 100644 --- a/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift +++ b/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift @@ -181,34 +181,6 @@ public extension UIStackView { } } -// MARK: - UIStackView.embed() - Helper to add container to parent view - -public extension UIStackView { - /// Embeds the container to the given view. - @discardableResult - func embed(in view: UIView) -> UIStackView { - view.addSubview(self) - pin(to: view) - return self - } - - /// Embeds the container to the given view with insets. - @discardableResult - func embed(in view: UIView, insets: NSDirectionalEdgeInsets) -> UIStackView { - view.embed(self, insets: insets) - return self - } - - /// Embeds the container to the given view respecting the layout margins guide. - /// The margins can be customised by changing the `directionalLayoutMargins`. - @discardableResult - func embedToMargins(in view: UIView) -> UIStackView { - view.addSubview(self) - pin(to: view.layoutMarginsGuide) - return self - } -} - // MARK: - UIView width and height helpers public extension UIView { @@ -268,3 +240,31 @@ public extension UIView { return self } } + +// MARK: - UIStackView.embed() - Helper to add container to parent view + +public extension UIStackView { + /// Embeds the container to the given view. + @discardableResult + func embed(in view: UIView) -> UIStackView { + view.addSubview(self) + pin(to: view) + return self + } + + /// Embeds the container to the given view with insets. + @discardableResult + func embed(in view: UIView, insets: NSDirectionalEdgeInsets) -> UIStackView { + view.embed(self, insets: insets) + return self + } + + /// Embeds the container to the given view respecting the layout margins guide. + /// The margins can be customised by changing the `directionalLayoutMargins`. + @discardableResult + func embedToMargins(in view: UIView) -> UIStackView { + view.addSubview(self) + pin(to: view.layoutMarginsGuide) + return self + } +} diff --git a/docusaurus/docs/iOS/uikit/custom-components.md b/docusaurus/docs/iOS/uikit/custom-components.md index 2cf6286911..bee8d7522a 100644 --- a/docusaurus/docs/iOS/uikit/custom-components.md +++ b/docusaurus/docs/iOS/uikit/custom-components.md @@ -12,11 +12,10 @@ These are the steps that you need to follow to use a custom component: 1. Make changes to layout, styling, behavior as needed. 1. Configure the SDK to use your custom component. -To make customizations as easy as possible all view components share the same lifecycle and expose common properties such as `content`, `components` and `appearance`. When building your own custom -component in most cases you only need to override methods from the `Customizable` protocol such as `updateContent()`, `setUpAppearance()` or `setUpLayout()`. +To make customizations as easy as possible all view components share the same lifecycle and expose common properties such as `content`, `components` and `appearance`. When building your own custom component if you only want to change the styling and the layout of the view, you only need to override the `setUpAppearance()` and `setUpLayout()` functions. In case you want to change the logic of the component or how the content is updated, you should override the `updateContent()` function. :::note -Most UI components are stateless view classes. Components like `MessageList`, `ChannelList` and `MessageComposer` are stateful and are view controllers. Customizations for these components are described in detail in their own doc pages. +Most UI components are stateless view classes. Components like `ChatMessageListVC`, `ChatChannelListVC` and `ComposerVC` are stateful and are view controllers. Customizations for these components are described in detail in their own doc pages. ::: ## The `Components` object @@ -57,20 +56,22 @@ func updateContent() ``` ### `setUp()` + You can see this lifecycle method as a custom constructor of the view since it is only called once in the lifecycle of the component. This is a good place for setting delegates, adding gesture recognizers or adding any kind of target action. Usually you want to call `super.setUp()` when overriding this lifecycle method, but you can choose not to if you want to configure all the delegates and actions from scratch. ### `setUpAppearance()` + This lifecycle method is where you can customize the appearance of the component, like changing colors, corner radius, everything that changes the style of the UI but not the layout. You should call `super.setUpAppearance()` if you only want to override part of the view's appearance and not everything. ### `setUpLayout()` -This method is where you should customize the layout of the component, for example, changing the position of the views, padding, margins or even remove some child views. All the UI Components of the SDK use **AutoLayout** to layout the views, but our SDK provides a `ContainerStackView` component to make the customization easier. The `ContainerStackView` works very much like a `UIStackView`, in fact, it has almost the same API, but it is better suitable for our needs in terms of customizability. Just like the other lifecycle methods, you can call `super.setUpLayout()` depending on if you want to make the layout of the component from scratch or just want to change some parts of the component. + +This method is where you should customize the layout of the component, for example, changing the position of the views, padding, margins or even remove some child views. By overriding this lifecycle method you can customize the layout of the view while the view functionality will remain the same. Just like the other lifecycle methods, you can call `super.setUpLayout()` depending on if you want to make the layout of the component from scratch or just want to change some parts of the components. ### `updateContent()` -Finally, this method is called whenever the data of the component changes. Here you can change the logic of the component, change how the data is displayed or formatted. In the Stream SDK all of the components have a `content` property that represents the data of the component. This method should be used if the user interface depends on the data of the component. -In addition to this, view components expose their content with the `content` property. For instance the `MessageContent` component `content`'s property holds the `ChatMessage` object. +Finally, this method is called whenever the data of the component changes. Here you can change the logic of the component, change how the data is displayed or formatted. In the Stream SDK all of the components have a `content` property that represents the data of the component. This method should be used if the user interface depends on the data of the component. -## Example: Custom Avatar +## Customizing the appearance Let's say, we want to change the appearance of avatars by adding a border. In this case, since it is a pretty simple example, we only need to change the appearance of the component: @@ -104,7 +105,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { And that's it 🎉, as you can see all avatars across the UI are now with a border. -#### Change Avatar only in one view +### Applying changes to only one view In the previous example we saw that when we customized the avatar view, it changed every UI component that uses an avatar view. All the components in the `Components` configuration are shared components, but it is also possible to customize a shared component of a specific view only. Let's imagine that we want to apply the previous customization of a bordered avatar view, but only in the quoted reply view: @@ -131,9 +132,11 @@ As you can see, we override the `authorAvatarView` property of the `QuotedChatMe | ------------- | ------------- | | ![Default Avatars](../assets/default-avatars.png) | ![Bordered Quote Avatar](../assets/bordered-quote-avatar.png) | -## Example: Custom Unread Count Indicator +## Customizing the layout + +When customizing the layout of a component you can either add new views, remove existing views or just changing the existing views constraints. Most of our components use stack views so that it easy to move one view to another stack, but you can also override our existing constraints since they have by default a lower priority. -Now, to show an example on how to use the other lifecycle methods, let's try to change the channel unread count indicator to look like the one in iMessage: +Let's see an example on how to change the channel unread count indicator to look like the one in iMessage: | Default style | Custom "iMessage" Style | | ------------- | ------------- | @@ -141,15 +144,6 @@ Now, to show an example on how to use the other lifecycle methods, let's try to First, we need to create a custom subclass of `ChatChannelListItemView`, which is the component responsible for showing the channel summary in the channel list. Because the iMessage-style unread indicator is just a blue dot, rather then trying to modify the existing unread indicator, it's easier to create a brand new view for it: -```swift -class iMessageChannelListItemView: ChatChannelListItemView { - /// Blue "dot" indicator visible for channels with unread messages - private lazy var customUnreadView = UIView() -} -``` - -Then, we just follow the structure defined by the lifecycle methods and apply the proper customization for each step: - ```swift class iMessageChannelListItemView: ChatChannelListItemView { private lazy var customUnreadView = UIView() @@ -182,11 +176,13 @@ class iMessageChannelListItemView: ChatChannelListItemView { // We change the alpha value only because we want the view to still be part // of the layout system. - customUnreadView.alpha = unreadCountView.content == .noUnread ? 0 : 1 + customUnreadView.alpha = content?.channel.unreadCount.messages == 0 ? 0 : 1 } } ``` +Because we added a new view, we also overridden the `updateContent()` method to update the visibility of the `customUnreadView` based on the unread count. + Finally, don't forget to change the `Components` configuration: ```swift @@ -198,3 +194,211 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } } ``` + +## New View Container Builder + +Since version **4.63.0**, we introduced a new way to re-layout the components. The `ViewContainerBuilder` is a result builder that allows you to create stack views with a declarative syntax. If you are already familiar with SwiftUI, you will find this new way of building the layout very similar. The only difference is that the `ViewContainerBuilder` is only meant to be used for layout purposes, the appearance should still be set in the `setUpAppearance()` method and the component logic should still be set in the `updateContent()` method. + +The interface of the `ViewContainerBuilder` is very simple, below you can find all the available methods: + +- `HContainer()`, to create horizontal stack views. +- `VContainer()`, to create vertical stack views. +- `Spacer()`, to create a flexible space between views. +- `UIView.layout {}`, a closure to apply additional layout changes to the view. +- `UIView.constraints {}`, a result builder function to automatically activate multiple constraints. +- `UIView.width()` and `UIView.height()`, convenience methods to set the width and height of the view. +- `UIStackView.views {}`, a result builder function to replace the views of a stack view. +- `UIStackView.embed()` and `UIStackView.embedToMargins()`, convenience methods to embed the containers to a parent view. + +### HContainer + +The `HContainer` is used to create horizontal stack views. You can add as many views as you want to the container. It has the following parameters: + +- `spacing: CGFloat`, the spacing between the views, by default it is `0`. +- `distribution: UIStackView.Distribution`, the distribution of the views, by default it is `.fill`. +- `alignment: UIStackView.Alignment`, the alignment of the views, by default it is `.fill`. + +### VContainer + +The `VContainer` is used to create vertical stack views. You can add as many views as you want to the container. It has the following parameters: + +- `spacing: CGFloat`, the spacing between the views, by default it is `0`. +- `distribution: UIStackView.Distribution`, the distribution of the views, by default it is `.fill`. +- `alignment: UIStackView.Alignment`, the alignment of the views, by default it is `.fill`. + +### Spacer + +The `Spacer` is used to create a flexible space between views. There are no parameters for this method. + +### UIView.layout + +The `UIView.layout` is a closure that allows you to apply additional layout changes to the view. Here is an example of how to use it: + +```swift +VContainer { + unreadCountView + replyTimestampLabel.layout { + $0.setContentCompressionResistancePriority(.required, for: .horizontal) + NSLayoutConstraint.activate([ + $0.heightAnchor.pin(equalToConstant: 15), + $0.widthAnchor.pin(equalToConstant: 15) + ]) + } +} +``` + +The `$0` is the reference of the view. You could also write the code above like this: + +```swift +VContainer { + unreadCountView + replyTimestampLabel.layout { view in + view.setContentCompressionResistancePriority(.required, for: .horizontal) + NSLayoutConstraint.activate([ + view.heightAnchor.pin(equalToConstant: 15) + view.widthAnchor.pin(equalToConstant: 15) + ]) + } +} +``` + +### UView.contraints + +The `UIView.constraints` is a result builder function that allows you to activate multiple constraints at once. It is similar to `UIView.layout` but you can only provide an array of constraints, and it activates the constraints automatically for you. Here is an example of how to use it: + +```swift +VContainer { + unreadCountView + replyTimestampLabel.constraints { + $0.heightAnchor.pin(equalToConstant: 15) + $0.widthAnchor.pin(equalToConstant: 15) + } +} +``` + +### UIView.width and UIView.height + +Because setting the width and height of a view is a very common operation, we created two convenience methods to make it easier. They both support the following parameters: + +- `value: CGFloat`, the same as using `equalToConstant` constraint. +- `greaterThanOrEqualTo: CGFloat`, the same as using `greaterThanOrEqualToConstant` constraint. +- `lessThanOrEqualTo: CGFloat`, the same as using `lessThanOrEqualToConstant` constraint. + +Here is an example of how to use it: + +```swift +VContainer { + unreadCountView + replyTimestampLabel + .width(15) + .height(greaterThanOrEqualTo: 15) +} +``` + +### UIStackView.views + +The `UIStackView.views` is a result builder function that allows you to replace the views of an existing stack view. Here is an example of how to use it: + +```swift +bottomContainer.views { + unreadCountView + replyTimestampLabel +} +``` + +### UIStackView.embed + +The `UIStackView.embed` and `UIStackView.embedToMargins` are convenience methods to embed the containers to a parent view. The following methods are available: + +- `embed(in view: UIView) -> UIStackView`, to embed the stack view to a parent view. +- `embed(in view: UIView, insets: NSDirectionalEdgeInsets) -> UIStackView`, to embed the stack view to a parent view with insets. +- `embedToMargins(in view: UIView) -> UIStackView`, to embed the stack view to the given view layout margins guide. + +Here is an example of how to use them: + +```swift +// Default embed +VContainer { + unreadCountView + replyTimestampLabel +}.embed(in: self) // Assuming that self is a view + +// With insets +VContainer { + unreadCountView + replyTimestampLabel +}.embed(in: self, insets: .init(top: 10, leading: 10, bottom: 10, trailing: 10)) + +// Respecting the layout margins +self.directionalLayoutMargins = .init(top: 10, leading: 10, bottom: 10, trailing: 10) +VContainer { + unreadCountView + replyTimestampLabel +}.embedToMargins(in: self) +``` + +### Example + +In order to show how to use the `ViewContainerBuilder`, let's see an example of how to create a custom layout from scratch for the `ChatThreadListItemView`. + +The end result will look like this: + +| Before| After | +| ------------- | ------------- | +| ![Before](../assets/thread-list/ChatThreadListItemView.png) | ![After](../assets/thread-list/ChatThreadListItemView_Custom.png) | + +The goal is to have the thread title at the top with the unread threads on the right top corner, then the channel name in the middle and finally the reply author avatar, description and timestamp at the bottom, horizontally aligned. + +Here is the code to achieve this: + +```swift +public class CustomChatThreadListItemView: ChatThreadListItemView { + + lazy var channelNameLabel: UILabel = { + let label = UILabel() + label.font = .preferredFont(forTextStyle: .footnote) + return label + }() + + public override func setUpLayout() { + // We do not call super on purpose to complete re-layout the view from scratch + + VContainer(spacing: 4) { + HContainer(spacing: 2) { + threadIconView + threadTitleLabel + Spacer() + threadUnreadCountView + .width(20) + .height(20) + } + channelNameLabel + HContainer(spacing: 4) { + replyAuthorAvatarView + .width(20) + .height(20) + replyDescriptionLabel + Spacer() + replyTimestampLabel.layout { + $0.setContentCompressionResistancePriority(.required, for: .horizontal) + } + } + } + .embedToMargins(in: self) + } + + public override func updateContent() { + super.updateContent() + + // Displays the parent message in the thread title label instead of the channel name + threadTitleLabel.text = parentMessagePreviewText + // Displays the channel name in the new channel name label + channelNameLabel.text = "# \(channelNameText ?? "")" + } +} + +// Don't forget to set the custom component in the Components configuration +Components.default.threadListItemView = CustomChatThreadListItemView.self +``` + +From the version **4.63.0** onwards our own components will be using the `ViewContainerBuilder` to create the layout. This will make it easier to understand how the components are laid out and make it easier to customize them. This does not mean that you need to use the `ViewContainerBuilder` to customize the components, you can still use regular UIKit or your own UI framework to customize the components. \ No newline at end of file From 63b843928e90cbe3813cf5c67a63706bffb4558b Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 20 Aug 2024 17:21:01 +0100 Subject: [PATCH 46/47] Fix vale issues --- .styles/config/vocabularies/Base/accept.txt | 4 +++- docusaurus/docs/iOS/uikit/custom-components.md | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.styles/config/vocabularies/Base/accept.txt b/.styles/config/vocabularies/Base/accept.txt index 71b42f66f9..8b2eed9485 100644 --- a/.styles/config/vocabularies/Base/accept.txt +++ b/.styles/config/vocabularies/Base/accept.txt @@ -46,4 +46,6 @@ swappable telehealth subclassing [Ss]ubview -scrollable \ No newline at end of file +scrollable +HContainer +VContainer \ No newline at end of file diff --git a/docusaurus/docs/iOS/uikit/custom-components.md b/docusaurus/docs/iOS/uikit/custom-components.md index bee8d7522a..8cea5853c7 100644 --- a/docusaurus/docs/iOS/uikit/custom-components.md +++ b/docusaurus/docs/iOS/uikit/custom-components.md @@ -401,4 +401,4 @@ public class CustomChatThreadListItemView: ChatThreadListItemView { Components.default.threadListItemView = CustomChatThreadListItemView.self ``` -From the version **4.63.0** onwards our own components will be using the `ViewContainerBuilder` to create the layout. This will make it easier to understand how the components are laid out and make it easier to customize them. This does not mean that you need to use the `ViewContainerBuilder` to customize the components, you can still use regular UIKit or your own UI framework to customize the components. \ No newline at end of file +From the version **4.63.0** onward our own components will be using the `ViewContainerBuilder` to create the layout. This will make it easier to understand how the components are laid out and make it easier to customize them. This does not mean that you need to use the `ViewContainerBuilder` to customize the components, you can still use regular UIKit or your own UI framework to customize the components. From 7326c3f999611d96d06a38ccce928fa564b2edbf Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 21 Aug 2024 10:51:47 +0100 Subject: [PATCH 47/47] Fix using pin() instead of constraint() in docs --- docusaurus/docs/iOS/uikit/custom-components.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docusaurus/docs/iOS/uikit/custom-components.md b/docusaurus/docs/iOS/uikit/custom-components.md index 8cea5853c7..0f03e5efac 100644 --- a/docusaurus/docs/iOS/uikit/custom-components.md +++ b/docusaurus/docs/iOS/uikit/custom-components.md @@ -240,8 +240,8 @@ VContainer { replyTimestampLabel.layout { $0.setContentCompressionResistancePriority(.required, for: .horizontal) NSLayoutConstraint.activate([ - $0.heightAnchor.pin(equalToConstant: 15), - $0.widthAnchor.pin(equalToConstant: 15) + $0.heightAnchor.constraint(equalToConstant: 15), + $0.widthAnchor.constraint(equalToConstant: 15) ]) } } @@ -255,8 +255,8 @@ VContainer { replyTimestampLabel.layout { view in view.setContentCompressionResistancePriority(.required, for: .horizontal) NSLayoutConstraint.activate([ - view.heightAnchor.pin(equalToConstant: 15) - view.widthAnchor.pin(equalToConstant: 15) + view.heightAnchor.constraint(equalToConstant: 15) + view.widthAnchor.constraint(equalToConstant: 15) ]) } } @@ -270,8 +270,8 @@ The `UIView.constraints` is a result builder function that allows you to activat VContainer { unreadCountView replyTimestampLabel.constraints { - $0.heightAnchor.pin(equalToConstant: 15) - $0.widthAnchor.pin(equalToConstant: 15) + $0.heightAnchor.constraint(equalToConstant: 15) + $0.widthAnchor.constraint(equalToConstant: 15) } } ```

pa$(jk~8h#}1*vq0IBerdFPAbjUI=E98?M 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≫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 literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.small-dark.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.small-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bb84a7c427438cf67c71da5053147df2241361e5 GIT binary patch literal 29143 zcmd>mRa{%!w{C(v6pA|(FILzKAih<;1^cNT63+r#+q}EZ+zbviBwmW$Hk(+0ssKG3NN3(0sw&4h*ug0 z8sZbFhOI!v2I%@qUItJyNVSFdC)DD#f~ATIfF1E31Aq!71Ry^gg7^ghDFCQ{y$1jk zft3Hge+6Xya|{vy5N-oN`E!guV*Bv(67fQ`{>#0CHQ8AAMJMZ6xig8+c=+YAXDC&ZRZ z;kmSy7jQQX-HW(ursu%3b;!3AmH+$20^KJ(dU{MIHyIUJvnR@94Imr42k3G61=n`< zn*-v;w+HLSWwi#K=l2^@&M_>@Pg3JjT`N-jFTBsE=f6#RE__S78fZNDJ$;fVCGrj% z`$OT!kCCm+?94|Yu)6PoJ>4w#1?P(^gsrfmA5U5e zIH`MS%}o!ND=hYOGSNR{2EO@R4kLIJ!uT`GJW15r)gEl0VxMZCW}j{^B`)glVY?Q6 zy67OP!M+~tC*!J40a^pMsNkbaq%}cw26EG8KAx%bY4j=5DV7mP#BCzA3sY88o=@khUkEf#wjC4-bh;!mxsISE z52Ia9uoa5!s!H!{2Y#|Oy*957b1epWBU?{b-ut`vNRD?|q*b|#Sg8##WD}0XsuOm( z*oLh?F|{L~nt63wj(>Y+M&cU`s;aTXJ=A^mRs!34hVZFD_S0S2U8RZL^{fO=JMbd; zCv8fk%?W_M!S6VKg_ij@N{{t5Z31xQbQ~}svkZvim3NhPH79oWvJ&=eL7ez-FztJr z=N)~7vV)vQ-;fmd`0!!$5)77`i>)Fom+oTRfGjB*{a^x5sT+U{ylKKpH zsP&NHe1HB!LQgSXKFzl@m!qE_xR>FS4z?PSt{dE)DUL1gG2`-VMT+E&W7Bx*r(LcL zS+jjE^DX9tb)VhRa=anHe*;6VhJvsZcOQ|}QXu=*kc|yYFP&3CTWIyo? z=d^iPcEk(a$Ydwdzt4k?;C-b4jOI?q#jxz3V(1&(saz;>CTr~7& z8YXhf`Ioj!+)S{jo^>7BZ78?hQd7d|+ipG$SCR-VI zGZb%2Vc?5jmL=YH;7ct{TV;$QN3yZdSNL@)?h#&IwB8q=HER%EOi`z&|0)F&A zr_(&oA716(^;YRmziPd>yS{|)I38XSsReseTvfqKoA=TDuEursYt&A$(U8rVkV6PsTciDian}7l1u$cu#yE4{kF27309N34W9^VFmxZNrr4)? zz38)JKj*wT=mW{aN&Ho(!0w~He1}dmcGkOj3hju6crF4<#6{FK2S4}6j0}D87C7rR z+s-Sdo&IM6L8(9{F4M#_K3rUE9aZF&0&Na;&fztE7>ggc>yTE2H^}uw{nVF`MYn z>_Hv2QXM{^H!m=0Tso@!O;B@D{?NJcc-zj<4*)cneoX&@XCJ4H5`vBYxP^qQ43PC4!e+Q?{UC>H|I~_$4OkE(Ofh7oc}Q<8@Z3^ zGPvW^Pid*UJ!(=L8EwZ7ucRsWAT7n4;|&?7mqR!A5PYrsn8*0ML6iVAOZa|5t3d>u zJ1*=6!@!}|KyHwLeW9y^;}>*CB=a_mjzr~@CKB0;kKjr#jbP>6C#!GD6@KEvQT~~Eiofd8uy-zY=H5|{zHqQ+1h7|`n0{5b0q|M~XH3rEve@)zG<;J4!Edhw zp=`Av>r%-)&^h(^xIA5q~SL) ze${W-0h6hUc&y)m5OvA~r?i79$aFVgPhgK|{W<;UNkGFZ*rrF)YQR1wbVECEVCJmk zx?3%|;LVHMuPoBf7uj$7G@^y2Pe{8S$AEL~-g7(^CL`NPyn6O^l#^26+9$vel88^Wah%?+MY^ZOISC0Hh&5M;Awht z4dK5*{gKiRMU*GXYxxU!7R2G4de#a#{y?|ADa;vxwn5cac277z<|r^Eyg`&LDbAVj zLx3e$-0Ek7XFHjg7^*A7dB13rox0H8$k%jcGJDxn=6rdS6^n}`4v$qo7J%@1ED;Uv{QQa-IEYEzTA#i@&W z-(sAY)-d{oAF}4}C$?nTaU&A+>zBZ`O(M%PN8=O=7sHAkyNOcYJ8>3>2;B%S|2y+y z>l7-U` z`lRb}8s&6@n)JexwLWqpX2hb)ByFXe;|HuNO^cO^fFx{4W^QnWfap#!=r5cC(?%(B zOB>m|$A;?kDU>F^-YGAB-EZo7y&C=NjCl@_4CeQNGt@4}nk%P|#Y)=a(ankL9WZmA z*eS;-F!o5zQNNX*O$Z|y6Z-^CRK1qZvv)8efEvasCt;$;ZS>iA(N4;ppmWc`3V0la za7TYt9}KAj?4_a8+DyQz18SbH&=ms=DU2=wsO9?)QpcOI9;!251$U;JW{$wS-k!*3 zC{T}_Ow=Zu*=7x1++E%3E`cXTE$~%f4X&!3Ple8D6?1h zW19%_V%s&@;;W?HBNzNbjtXP{@cfL|_eUJECSoJK!*SdGBx94;OwDa#Q}&=gCU69* z2z9NIpAe_smnFxIj+-c2cn(k4$HO;c1485=mb+SKnVFf}tGAJ&O;+P{r&}h)L$Zvk z(82@LG)r}N+_z)${>qzdtXy5aym9dsl6Xc~N^V{n3L+ca#z9AMR`eGaJaOsrcZ#1} zY`ay5y;IJbZ1mDJh8v~&e9wCF%j3qc0Fy&suR=ZsAcxyg!wbwp8$6P122Y|ILP9$7 zdE+#uio;cjvI4Gpj}MDYy#~CVJej;NEK=Q$&MK-h~!|FVyOr&=?^@o9qEJLGnRJwX?`09x@Pl1O&k zWd*y`C6>_K0mJ+jVk7X!7;iEm8|GJht^{eHqA)c#V1C)F+mc!4bkA#hyb@xLMbvS~ zp2^65K0>*@aXFp z`-W|Z-1*yEiO1SHn&vC)m=}IH)trTIIUq*3MeV8qfv8er?8bjo{mSDm7}cN)3kqJ} z(H5A>UcgQ&dM-UlV|%DD>B6j%lD8B3j72SDlY(IWB*E1VJS~n6tU^W1%mhCmKP6qz zxaShj$24JN6q6{ptOh)ClgqFKG=pB{V^e;dyi~Hwr*04;p26!|j>bL;<(6<9)`-y7 zIsEj=PC299dJKLdEH$ zKlZsCbGsEKDYGc6RB1>AJMrK`0vC^Az3+>_MN<6PD-zfF@Q=&`U-Qtu!V@bMboGtj zOK%$+S2k%{4$6Nlpfo-i$b5y%tgtmrQAPj8o%Y5`WQ%>}f-B#1uTJXjwAvP2u&KaT zg{sC8uu@eI%Pz8u%b+SowLB63XU>p7QSe&%-ciuU`r*71o7W(9{ zfNjddLMQ7{zH;%u0_y86qA;0Ue@GDcmUlDx2CF+>x;CisUFEUa>7@;<=;^x);q*MK z&9`5W5;60x&7&&ZF#UoZy!O0w4adQ@XTbYAir^|I5#g~dz09+*zWehun^5_s9x0YRW`7Oc{-D(|o5|SC zHu>|VJ?Ds;GDj?(nr0xc_OX}~CUe7M4E&NiR^3ln+BO&>Eq6qnT};H=zC^D4FiduM z=GMxRL>0vMbl2d3=o?O~`UFo26gI4`UXU`B`CxB|&NEcpv4@eg{ zKnf^d9*;jMoG@5d6T(BU6koq6L4^C+=(qb%iHhwSH1mzkbRxlxeO- zx*`iJOykMv8mJq*nvdr&YpG$N^a#aSPs)*WL*`LK=2o3Jqt?1u^l1uT+SSpw%H+cx zjnTe{){)P(XPs0=Bixv~X2nj0^Q2A$m}T&A?kZjkf;eN5DQ=IuJyi>vpVx!G>ZUF5 z@n7!j7=6FJkfX(;awCmS;a5tEYw_p1vPCS!KA#Z2guu;1`xhx_vYk%9HHPw#9|eVT zHtY>I_RohL7QDNO1x9j)zC zoYZ=dbI!hp0r<5};xV{o`B4olCxw?Rg-#tt4V zVaJ4^K1F-#a;j#42pAq*rvYFuLzT@b&WHbB#{jGXcY$BT+}U9NITbeKc9ad(;ZUNamUypsAr-?Q9okoR{;BSK~060x~O+RM`&IAKy zO8BcF3rN=YZi+!EW7+>t#wkP+W#{^J7CV)@+(^5MaGSLGXd8iWG#r|!yO8a>$T zXyS{@Mm~K#udBa+eGqsE>{dywFiGX6{!w0)WauNp)o?ii?sa&ohUw^k>B&*pW+Zmd z{SbZ^mNu*2Ui&0jR{vvreJmJ?#jlC6nD(XZH!p{_*UF`>%r{MYp>N2v`6!MQY-mRL zQO5LAYQVDy=3$2W_8gmQ%$aZVcPZ)S7HxU7p~=eS&`SE9(OmBrvz?By#UU_SCxWcW zL*K|`v~?P4zF7V&Pir^P`UCs#XFE>_@*L!V>bUq-ctV*{ZHzY8NXC#0^9JQW5A=%H z?h(tjJE6XSW6KqZFR^724 zgE^PfCG)O2_oRs(9Wutgoju1k)VVt*=8(X{Nk5G*s{!sH_`+_E(tVHW=jKyK>xTFbAVd(eEqC~uT@9USrma>-XbYJQ0wp;QA?@85nGkzY; zJQtVUgQ$PwN(Vg1)&zuUmm^grg!#L7pyqyz>yVgoTrhXjC1F8$ z> zDj33@s+)Vo%98#p%OB6)mQyx*-Hvguv8Zwr~x-#1<$lG>j|*Pn57 zbXu(5(R0d*J$|56K3tzoF1E#~N#N?wpUS(M_^r95C6?Aq8U->Qe^5M?K!Vlan_tv) zpKPWFzLBaWnO#&7b8x7N7L0#W^2avk#89@aX`kvan~$6#E-Pi_C>At zW*~M{bP$<;u}U!A$47!}G(k=`rPSW=4=6SP&O5fzIVq%-Mo(z^l$I&x8gaMKntWgFv&sG+!gNkDUn;m;kJ)t>(%s_9YS0hk)I?NT z-+!~}m%aB-I_*| zRRukWK)q#kBEfEPfdR*OZ~|*;&P( zBJF}6oXTH;mOpA$E9XMDA2bLi%%BOT`uMLaDFyG(2AZntIHP1UD$xAjZQRNxq|vih zBb0#%n(!Z|fuP=S#mQQq;K<2;5l5K{vPSsGzdWZ9I`j@sg1(ND6@qBtXjk*ks*2za z1p@+X-ON>%S}Z4%sg;jO+G@WeeBxj3ZQc+>`EsXp1a-+5%DF}7QVOUMnEmHsoIrjt zX~>;Mj)2(LHBPXj0>Ur-<$oJ_=wm}fzXrHY9+UC_Y7{3CCTw68U}hgwm3)U}od@N^Sbq${h7_X-H|{Wk z@sR3Lzr6o1@w6t4Jk$jXf(q3^PMtq{1VRTIs{WEeT(U-tpg6Y`FvE6=BO~%(0`3q1 zSDrcje**5k$3AG8sSkY`2UvOfqd=trNtzV|h)eF_Julqi276#hgs7`N^vM=n*(iww zqXYM|>0ux)>4Ba#eo6`wd!H`Nn)lErfwpNQTA&+2+j{&{1fH>OL>{(Li+DD%vUn0mdodWUzBI$ayG#63 z$5MI`+f&GF+Qy}+tPdXv=l0w~O zt&Fw0{?m<{bl-!HusA`V-`Qn$Y?8O9w7tJLPRS0U{aErM)wv==zY0I;>SAQm(QD%! zj=;i}wSI}-`TRK@3mfp)@FNU-Olk9Q_2=PX4Bw4>-GpzPp39HSKZ=&USG23o4t7M# zs_2X7U^Hp3!*T9vJ{@$W&Rs#=jCZWir;R1QYiiHs`c0Fz7z2kF-b0cDK7)UTZPjCF zrZe?t!ELO^C3nQ{?VvDK)4bRwoJ{9wV*#I^mo3+{pv@bGH4?WjaJ#HP*^s1FitdFF zX(&P_A+i%n)#Ap7E3w5k_+1Xm!{QB=cw6edMVDL3B3Pevb~A9XQ+&p1dW6+C9eLEN zrX;7R{6vO0RE(vIkwX%V_YJ!$^~o#3&%~tBbx^!*ao`@FYB6$&iy=GeW?1LMXj&7k+kmU4E8#PqyK+Y&0LXudwOY5rUHw<|ECk&fz2OCRNDU;&E2COndSknEl9@IY_np%oC z8pW#@r&{4USRXV@ zx#5gt5zoo48aYkS-MOMMylS8qub&N&v<~ClCrIeN%*EXD*xODo&+~ahDSU8)ZD=1F za?Fz97p0(?*Z5O>ev?i4@8$Hv29l_FGu0JG>j~x{+LT*RXrAx+Niv!m$Rw~sw!&+hVjQ2qdqI#y>nrQ5_+$CCa&_;iGHfiD>UP!@1)~{RCDYWRfbIeJ! zA$HJ$t}ImG@$`ImI;5P4dB;}(GMSM-#N7lVY&x5mCDW3iLZ~d=2v`?A)Ov|Dop$0T zj!u9Fi08|){HWTv-x=qg$`($QO)x@_^oBk&0ux_8{9K;yeOok!?6oZZ3uFDK4His{ zyy7?_n7pv8^W7;jdlg-eL6GG;eis{yB<%uiifIR(@?-9M0m>t$=0}9-dGrIAGUhXv^f{a5Qhg7`j`CZAp`c#Y!OD@YwKb$H#L390K0QzCRWiUO3p`qqMbI=}O) z&6mmp0L1MbDBqRQ!_$cT6@NSUEv(`q}k2NvsH^#-W(+xw~MT<3RWK|<&w>M}md7Q?$*#HqF_P-s`K600J5>(c)yMK{y)!Bol}X%{fx1RSn**U94LE9b(A zr457om?RT#Vno)3?KArh-+}5sp1TEEl)^@K=md9=1z^E~)MdAGov&HArB-rsklbw_ z<3{Zi?6ka+^Vk!bwrz!oG|5YG{DbHQnw zG&qGvM2_A-<<5e+lV0yCSu>k)ICK8Z%a1U~(+yU)S5A^A@n&WAv+Sw9%Zi2`w`lJg zFRiJXi_nO|&bs4gq+ur0ng+epSy-P$T!i0Zvp*t~L+B-qybL2sQ0KSB3*M@eXsgyL ze4Gc%%~fS*qFZRl5!ZYxbb~@qW#9+3i4R;smFa5F&jILE*GkHBI(vP>_UQuKHXh z3$xHxej(I||CTvN&c?bQA676Te!4YHT$wkqQm`Yq+-IjMVKzQ1OK3?c%zd>`=z>XcUk7l+uZTru3@fu0!B$S zGSUWmbGC$^rL2!O^vaB!)TQ=5RyHXfaB2PlY$m`ot?EG*;ZfU`4TYsvDPV`tBs%{* zwSxbI&n_Uftp2QK*2p=O!HBFXf0|sl{|*sT?qEun7%(^CLbu}X5c2#^(D4EW~im+jS6G5x#3SH0q_jtJpTTFN}OPm*FyS!t(1_W4I+3z-bz zHv>$1h#Z34bbhykA{UzX=GEUFmcS0L`2%@2hG@WDCunB-r+2Tbtoa2~YXGw~G?9#( z_&)hYQb9t&npy+ySSuFF(f-L@<3Kq&PGwjm3W zO2DeW@FpA!R%C;Jg#tU81!n{RxqQq6g^8f?n?IImTj3~w1@3h@{jn1}S~jSoKi9w0 z&C|_s*Y9E_H3pT0iS5tn4Uzti5%igR&gp2rM<#xD$_LRN7^h0bF|2T_kD0BxMSA+$ z?Ym^2K){~6&{9{D@dS^h@Z>K`bI*w*a_UAH-f#EHu^NGqizv5%4L1^PaFIvh?yxMcRFbZ=8wi=X z?e*pwQIT_cI#apsvfBfcQ=h5e_dY1vj!LPXhiCPekiQV~G6&=&aqox%IzIs%@(1|c zFsZk+^Fi2#lJG$N<3&mv{-=D6*U8NZFUa?~KIQJ4iEhlkrs&50x}%0OQCQd!+h%fq zEOhpvoe^4SLL(Q;*_Arua=Q05VrJzXl~4(lHt`lK=g?1$ldz@aO48N#LfzHeO48-7 zv{~n?ME8i_Si4W?Gq_nWOnh(Mn@;w9ebmzhJOi?anvAa~F01}T5?dS)?3jBSDUhc& zU5PL`t4juo7EuVx9Ma7(htpVf`m!>1@^P~5F5x7~B?Y*>z@0d^<;PJ{$X%G!{nb5z z%T(r9!*Ah1-;VP4zlO%ipSE>B$`Lm6!+&SQk1?yO);6D1+8$GkU4F7cT<0+Qxo)e; z?6Z)y6DVo=TLX5i&Q95Qie`s}C-Xu|_CG5ol4#&~%Pm0S;MG$9K~VW7I{^m|QBx|} z&5hX7XCcaPzEO>Ip=jfgDbg`N0}&WEdSQlrZAVd*_^DF#3kw$^`)VqxMF z#mchpO^hVCtZmwPLp|R(!pug>2-ou6M_gIXx`XS95@_{r-x;W!I&UiC2HvT6W$Y;d z{tj?5!7@YC&<^ zN)*@E5vE7=yvqe?DCcGhceY~xS&%W;`yWFBPcXJd50C=1Ompp4qXUuVCuuRDtwF~( zjL)hC z8ulBj}61d%vBNHc}~oYl2BKiHoM#dT6%= zCdBBlT+$TR+Q4OPsKu2b2J~ia8EcFlMnW9i7mD$Fcj1xz*{`0c0vW2=QZloX(NDRO z3fpYlSEjAn7z{orRcL;w{9;Nji@2<>&no3F6Z46w&4z3!eusLr7i4_Ws$MYLJQ<^B zDza}+A#wf)CvmfUj!_|2)v;SaRaD3&YoDYQpVOI@4Y%<^7pR{ab1l6{(%nuO3jbkr zcgzl{BUo-P3EBWOgur_>^7PaS9YMYx?)(-4J9Xo&S);%6q(xNRL6LR_>K=V3<{4NX zQi(S+*0}uW&|T}B@OZ8diyDcC+%%k9-E;$|H(!jrY$MyI-<042-6-EjJmzo`fEt1- zD~}vYTsFkR{mzE7yTQ9O>4CfW?6;M0$vih5w!D)Cq|RVGs!}SJdL}TlpYX3FQFA_* zB>w`brP4r~d_%JC1Pw?)#83QdPmLpGQi>F|#LCx$_6-OUg*tq=jkpd$hmbJbr|>Wb z@)L5z%DLP}za)3dm1NeTdJk(FHohmNUw_|YMejM2wr#a^J$6@lCnDU=-8d!~}euOO50>{tCXsJ)G zpS_D+s4>b#1jTsSK^$eoK%=rl;>SPMeGHjiLFSlrrq863M*SHZ8MncEF$n5K13)c| z7P-c3+ZF}R{lMr5pYMyc_nWpAp-noiJ`VuXF4U<-^j!r_{xoQaIhAh>c;IU^0P`r% zpRhX#n7#mAkB~npKG9Klef#ah2S%qRmsE2E88NusR+$ojWZmo_OOH3)q874q4aqf!=Tc zR5i39!P<`coWJ}>^1z%l7jOZ*w| zu9dbb#L0xp;N3b^BcM}c5kN?`wO+^GU^OpKbGjw;QU(aKYr zM??qiEIU&96kSXf#(DUbn+Z+&Xlqj2+!W!|sbR8rEZ7>L}??ca@%mJNG*6Bv_<9RHz0DkNAq*SHHP%UFLBciLOlgagg2n61#WbCCeFRV#DdF zbvOXh()s3MvBp7`L|;;uwBTLRp@rxH=fM%$2tU@K#DU*a3ELNyGoStpKm#mT=$hNu zf2%N6na_!(Y@Y0q8b%=SQRLv&i-+veDa^Q|2bOt1_{G`&1?b7@Jq9i=pF!+m8*tA0m5mq~m3rtQZ)gl;xIsc(%(W0s*QiqnagDHf3 zG5;AWs10A7{pq)MYlIhU{h^f`MeTK*0)&j>{`ztK>B3$KwBhpKRz02D;_YR|V6L9?ELS}*0zE#nIwVAU!Q zMIDmRKeAM@E*JVmHzfsmHs=QUB= zs?3FAwIbu}0K3lJdaEU4%XcA}pC|m^MWlOO!*~bVz9sS>sK6G8;>Xnkyxf`s%*-wk z!XO3&Ih^|QuKj~|aI=FFp062OPr)RNh(?-P**tqhW@}avy28&+wox8;_*1CQ-Em3KF%nTy@NPB$ zxIg245s)?-mriKO`?}D=_4Bu!m!&0g=5n4?$F1bHLt1gc->f~YSvuDe83jva4*q8O z#14ip*vSopC&y0atF90U5VZuK-GT}c-Y;2lv+nyCGo_bibcS;%-#UMy!^!lfb=`i` zHO-vw;%(hNoRZh6mnSVfZL_enr8@*)qR2$yN*_MbUuud_^hDE1PI-GuMkb(vcPF%a z3#JtNhz$Do{Uvn;!+w;b@;?n|Ck$tmcj{!dfY0RdlYd+viNs#-KI zHncTkN>yx=yDrg`^z2l0i+Mu^1sY@)^YT0sfdJeTeQJ!0m+?)V|B|)R{h-Whs(=yu zM-=4PEr}yv@~WxGxCHdtGQEu6p2 zW9|sTTveYOH{=_zDf(!wOw1yfU_v!-#jn+G=E)$KRzSBUGWstDm8Y zVIjGC=WH8W%^9bVMiMJl>gY+j?;Yx1VY;|`m=fOYZ%YxH+p*Mle#>1+r^jsYngR2- zW))0x$q-4%2gZ&-t{6^(q45xJ*BPX1Ee;QxUk#k&2#`j@H_^&LC#*M>s%pA_G-328 zTQu4^=&SF#wF-d{+)!BID{-pAPXx0!$ss~9o`ZQ`4QSweRFTlX!UyTOB8A@7^rnnv zuF?2{^|>oKaOa+h1y&;i-8f{6IV}$OAe@%c*M*vqRK6h5Pf}V(x(KDFmPw|@MbGaa z?dfj&DMJs<(%HHQ>T%ve3vBqc{y)t*AlK)#WbxWm(EGFVEZafhNF#7@ChJgf$Y7DtFTw)vL9T z+jdCk+OVwvq7vYG$ABuHk zdya}CuZ@*}_Dib=_fPm;)?rWUs^4#Nf<1WDZ;jjnfioG@9O9DL^`raG+m9ZQ*i2x> zK}!_;Kz6yvS3^q>{qJKF-7S&Vln6X!t0Qp^3U z`q+<);4k*DoN5-d$#w2u>85v;22-1O>`VgDM-V!e+n#YIbLR(tefuYWF3y3}V7kn~ zs*jG~yj9xwbW1N}5+JLZ_)lOJeB7}gEK$GMBqKLxPr z?6yHFuW6mE^b7Y`)bkeA`LBVG&&XI!Yo?dt(-^t%GQbRxw+6^MC~mSD>4yE!Gt*|k zb;39Otnx}kAnco66e%$nJJ^H&)vbZo1IEIGR>mQ?$NOh}!y^w0ky!f>UIP|{I$GEcm_U;iyiud;+r4%}d%E73I%E3KE-5{lQ zO^+T8(~~Ei+KEr=4H6C4Nm$CM^E~q|(myTuI>w`tU|<3XO{Y<5(ohpo6KhT>;7EG< z7)+-vRkfk0h>Q-7*r(H9RQ=4be>%07}Q55q==|sedCD`?C=~R!E(8M0EnPKm#I^c#D?<#qDXD|{cH%;j@3mI z(~*_{v?EiC@ktgyz0l59M&yqLVFY|^NDT()gBgSp{s&J0!?IR-`;3V>FWm2TD*cNz ziNUMhQ>UP33mcHnX5E^$xjSXG#9ZHU(i7*OWUbnBHXu?{j9?@{mr!gdx!yFt(;-1J zk27I(2G8g2=#2atVH%$NW!wSXCyRH~?XU8La*gh9Di-;ng7PLj zbWUldm!k>%=9jDu2X}$c>{tm^XC3)AcSq&JBfW$(_Ret=c+4ZYfS5rp9iJ zezpUD)l}5DF(7VRSB?Vy3n9(ObjXjN<1+548vxxm&ZpljfY<4xmhIEaKi@qMk<-+M|y|%C#5NI66T|1}f6au*`EUiy0X}&|-9&V&n zNt29|ykEgC*q)ZpF>?Fm06*%XwduF9Qoom$jW?lOnhRKdF;*<^s9)~G>5r)Eicd4i zKSnO2^*=2?7Gsn;zB}x|*P3o7Wt!52btT>Xn328ZvmDGsl%~ZqtA5MvTgeS>>ensS z0EH`a-=0{whXip`x`f--mZYy;_6EZjuJ`k>YfSP>vNL_>Ahicm!Ox7Pa2lHQ*2HqM#q?8Vwze9+l}nMkD@l-ey!7Vw z=ZKtfw)k;st$ky~OnIyQHJ;B+B#Xbr2gOF#sm2rW#|86maraPsYiMbhX%V7&lc3GXC=w)$)ABV6NU>K!j>{ulF}{ALq|+7~5C+`1&C!+3Nb zgChKT@slu~?n)w~71o$aTo3 z;#McSAms!u!yV@;a+4LDrt#*X6b-z4PinJuoB*6e61p&OXy&9F>|KQF0E)5a89*_) zNTQsh#X5HUW73o`^ns?q@Ou(lA-)$F`Vg}d(oY#}x-42(A`YK*DC*2-lt>f{|03fY5+Z-0W9nC?+ z^sP6?*yJT>ml3=v`1fu$n=Tg8^wd30nQf>@lS$c>{-C0_TVuaL+VA=^fSrnfbe# ziP@SRze#f|^P?2B*Wh6I$lo>-NNCkF_`$zrMdXB(ot9w^zs%aPX^R_0N}%s8!|>v> zU|QeRjp9>8)iPT@>E6xWU}L^-X$yPn_~!yhOag;bU|VsJ+a*MU)^Fr>@O$~Umz?Ee zL$3vEefH4S!v)Q|2UhO_#UTJ(QhC`u3JY^zH$Zd>n?p@q*i`sExhpwt^Hbt&eawH& zEa5R13IXAc>){i}{`x7qZlf$ZhX=MZJ7&OVhJXCkWon_WD{E(Z#B3(J)xP~sxiPa( z;bs~AqIY-|Hs0*JRqXFr_zT9BFi$z3aZ?%#&?jwp0j5$xJH0$a5}hNdzXyFrRMS?! z9OZSG@j7lNQga*V=i z8uO7Ba7+EaS3*>^fve!`^KUL`++5MaV<6 zQLBa{J8m;V<(eyq)su_=?O`2&dQdtPAKvI9euE3c!psWE9zjC?d9z2PEmB%%I>6$@|066kF_-(?hdxk&Y^l*fzfMjabtqG-sCfI&5g}fx7 zrizvX$Rd)edr+%lbMQOu|Er%cGF85D*@~$`ykVlt!*5D-RM{cYbx; z_aw`~A7Iw^@hQPKfiXnS0eO^5zqt?(RTlb9`^f|7+y#xP1OTh_Z1OYb9x|gGzJq}Upq(foLT8rpF@&CFGNK$}4MpeEtlp)kB z`VkLvdiAy<<=y$y3jI;Gg)h%}og>G1C;I45&myBXPsu2&4?ZcgWGra`uOl>VaO3Us z7ZP(ZAp?rCxa%aKa5Rt-dOt-nAj0y1jY z=Ju01QJDo<5c@6FKB3u*rVtCF`tePAXQ;O?lbmmp;JEsG+Jv#-V6yT=ryH8fGlO3q zQIV(-BF|kTD%7=l$ZS1b9#@O}K(4l#4VtOhdATRn4d0qmWXXt^wh!FQ3f;w0+?mgK z`>tzjUl^hD?=s@q^oBHrS9I|x{9=J^y|O9gRmz3lwPC+Xw1${ z4{6Ros2?XSbUA*arYNHna?H6sXp+76yCNnw4p`Ur@fqTa-(hojCE<>4lD}G%iUeN@ z!T;g-~w;f&zJqZB#XfCBrBA{BFnOv~|*0esK53(#Q^26$aree94LG_E93`ncN*W zu_HVoN=UO8U}_ap7xi{`U(Ow_Yd`YR=!VuHNT7wsPk$5I4n?vSPKC z>zPFw;UQZ@=$Tr zR8#VXNO|5s+(~(lXeMen+A{=hgCo8N!TPE|fZye}m(Th1CJd36Z}TdUucRC>Q^Y@} zzK_Vtk}MP>etOOGBt8V#XgUpya`nIlXAhU(){-7H#5*)xB|@&E5Fib^XZz(@j!D_A z426hKswmfD@u@7M?CI7s+hAD`_DecEr@aS#A}Mu*Bb0!|Ga_p%Y7Y1G7_ zJ|W%vT(1H4WnSDnp=884t`31BdeejDH&6<87d|*N-a4``N?a_+hlIx*RxbzAR2;m| zism%6GZbesu#Zn&LaksbV03rR)6lSdHof}xaVYi(ReT~rDQJE=?H9O4BP?N=X7#XL zFX-|$OIKdP|7q{5;@WzmZWEkhrD$=AdnxY0p%j9jmbv%Eku2Q(A|Kf0Il(nCHMPaU#M`4(b+oMThrT2yxfNCv zXUlsm!92FwQ0Acn+Fed{-|%89!drBiDyyD%i$GM#L1)mk`(X_p7*u#U!Du4GgM= zxgQQC#><&ks=tkiEL@@`-EwhcSWMzENZu|emtrC49$~Lq*C4SMEBo>=%FsGI*}@>k z=fV=n7cZ?CK>Yw&5el;HFz#Dy}!F~8Rz|LwblhapXtftL0_Y4<* zjC{KF?^_VK*U&+TtwRnqba2rbZh!=Vg<(k!Q=G*)a^g+i^K!_B!s|*IZ^jtZR)I4Y zFe0Op`|6T4yg^#%;$`~ICnBS>ElJX5bp5MA7KC+)Og-DkrUAWq?-)8ENr6^L)Cg$Y z=nA*78tGkG|{X&226FWX{_Vy z(^ml*WVN2EuOkFB&$O9SBxgXQ&HSq9F4s*#SBZwG0qmq-KPioWD;EX~xv zt8qaQ;^NzvlJ0z1<9eS*CTN+LNp|v;s#f|DshYEi*|D3SuepRC6ZM>k^#-HlV0j>- z4F4g|3Mm!Jh&INTuf5?HWp*3p47K!nFM|fPwTFp)am3C_7ENC`-;~rOWgHb;^H%Quo(hsa^qE4b|M$jwX}#1vq8}^kBEbZ=|I2%co;SM8LMjbNcN4@a3(M>UL);&%2`Y3&Bj~XY<<(?y3j8&elRuGV zDog3mgsPaT5J>lbw;5NrkGlCWo+M&j|7{&H~A*^Ww{qyz5k~PWzjZhmH5E7!q1<-z2{mSjdc*DHM1)-BuRn z?RG3xR~%hr>#(FWr~l-$r<)}0=R-K9L-eB%b{?kMl%U@V`(3viqt_Hi!*0~VvPh9G z&D)p+7N7&`j13cXFolP>>^z547MlUlbzEabpL2IJtGfQN#Lu3&g}M8+Ui-WC$A=GW zx@@$61E|u{K&4$j-NZG_GT3eL=f`ud$!hYTz|c0D!nxTTIJ@LGCg{xsM!p1ge{4gr z%@@1fG1KjE57Axb41m74-CYw;Ycr028>07qpuELq9Y>*96t;=iV5Bmm(Blnnl#`^T zE%6haS;1-@C_J`X1iymSP2q<)rrh=?kx%!mAr`1>VL3zhyQI8y|i ze8^WVxYNRo^l>&WWkg{Q<$@z$`W$uge&NCTv|XIrLq<%u-U>6*=?G!bZBkWNFo23p zoBv}<1tr*4DP1mLo;QSjktd8@&=0dsMpzt(#UF+TX^zo;8=fr5*1`_QoKwn@E$Pp! z<}Sk0k#^AAKKnm@+KG_e?|m64B$Pc%M&$F1qs;8-yg6Kh+eMQj?R6{0WtC$* zOAVriyGdj#7+V8}B@enWQkrLpJ!bIc<2b+Hn+NM{3GbaNa&C)@&!Gln<0))z3|@owGpZUjz*)sVYANtGPB#ytuM=D#jXW-V5?pSO!oo` zKM`&VeXTUE)`Z*l3_o{N`6?)ljOTWKKs;)#n0$iwuxhfrimU%-nv z29&1zS{T^A2!%gD?iYE%7u3duGWwJ|KY?9yW z$y`^&Br{AQq1WU2z%3#DMaoP=D7G3XO6u;mClK;3;@iv0u&eGrMbBDS1&~xiF|* z(_&}{te09we7Y^tv63rFjxhbj)wf}NSzUQ?H@R%()a09%mi-R7k^hJx?AlBox(9b! z{S%Hm1tVLSJFCGGx9x4={-&>c8%}Qrr3{qB;Pxw;X`;#?>dPGr%Z)|+LctPdx~!4% z$!Q+W6y}$ZK-c5<7?%o)IX(8M6}xH@mRKysV80sUf)AlP2xGHRt5;2aDiG zYmw~$rDVL<(iC4d)4Z!n0gITMT;WlFBn(=5*c9q#*sU$aEvbVG8T{H|5Z8RzU{1!Mtlx(K0%(wXhG4~|%o=PyjSF#f^0ZhQ_5aYDIyMTcF5p;#KIfRa0XvTP z$2A=8^=fyi3?HDD7MOyhf)<*Gn_)P?{r$K-fa!;6S0q<6N;|O!(*uVX`cVQTGOvg`m1Z(BQzr-G*t7H(5vtXX$vatR z4hdWd*1o^Si08X^j8)on*Xf*}RyF!uV@X+ah3NXiGC!%ai=oW&V$xcS_x=`(zpGar zenn6UFl{iciE3qwvc=||4vz`UXXKG>I0TgsF}d6kFU~?$hi9`HOHFkk?O|rs#c+dP z1m6SblWpfE@&S9tfVWtv+F(tykA6}O<2bdLQ zlB(8o7P}CkbRIMqXm=ZDu&D!MlI9x1B{G}HWo)F4zUb{xtm^#u>*?c*T2y6UO^(`T z@A!^U;h4KP=k2byDzg_f^cVnx>I0g$Tj`-rD=iq0(v?n4u$XAig<0J@1S>qCvWJQu zO%7Y7=!e2bna1xgfMCFGo3C0mYElpxU2%Nvfgg-*_&v*42_`=! z2A^#Kr0dTdSeg{8+8++Gx}H-sxM=4aRDi=da^+1Ri-{ zOFQXZDRJpEUNc(Ga&7Ls30vnH@iS*@31KX}CVYF;55BiFstSU~^cp4lGNk!0Zo>-y?q9{}KPBAidv}pCQ1Z z{Fv7?k9Eouvag<;wd8_FP=5Q}a!W=h0sn-+aU)TkLi@KPDea|pam>ENFviX`@nBGv)CEkxiX*0f%gJj61UtqkDRBi|Oz)oec+bkFnIvtShvwAAUjS z{_^3O+uoz+ip7qHO_)bmz{3KZ6>(%1QRo>qvb8pZ$#0@aTbA8?!Z%{#L6$CH<$imi zcDwb4K5l?7InV8>=s=Cq(o?Me@-f|{BYD38W!m6cpXO5g@A$T{MdI!TfCwue`Sb=G z@EpfE`M8D*RUzV8%|D)*Ta#)!sWv66x1Wj~q*D}iBN74DHY*sy)_=CW>3)n|#(U5Z zq$dKJO?<2JgM{%I)E~)4Y_#_P3IQERgsv5ObP>=jf%Rv|vhR%Z$kx)~MW(+9ztl_{ zCQz4cAtzcIbLtwHj&Z*uBUJkE1p1m^xn;&8{mX#$S1RUCL#OMe0%>#fSt>aipuQ^- z@phQxj>zb%rzHV_1HE$+$5}s}2D@c8Y+2kuE|fLC9eyOJB!V|Qrwb%cJTOsy1YK2P z;A@)#SW!yFsxd(f)6HzgJeG<#q~I(%CYG0?2hA7k>h(~DN=wm@<+olKtM9J|2{jnH zf0OyJm@Bp_RD=SORPVBeJ2yKp*Q6*R_a@1rRt$*8Vk3KQV4t`q994?DtjO7?bh2cY z_FDQamLUd>3e^;6e7!9dbf$yfUlgTD11y@PIq5br3tluftKDWwbH=oL+W~jR5V^&? zqB{Duj6UeT%zhH@4AL)Mgvb4CD@PzNF2Iebp#g#9WGKzG7=ilg@O~$DhLlqtS@h-x zFs8{EnAWvPepdbvaYooa0CgicBRb4~fno#459%#HpaJyP(*Y$92VcR79UlnwQWfTF z{UrKZipAdTO1j@ImSAuKTCE^`xJA9A8cXxnXfM(tJR-&ec0`s;6oDA znHSSzT`Nea2s6`OD`~%O>Qr9zO`A)wH+Yq#MH?Uwi53Wo+Hn zQA4W=_;kQ%Ua>CAd}kvO+27{f60Axo++>yW{aZ?SyE3SwNVh|I7V#QJ)&4qheLikr zrJED6v*~hkgE3N@-1s&_d@O!Re#KYdE%%wst>(Y+fWob5*Uda`Tt<}W1NbT?>>F6= zU+xN)i315!x|cc)GmkCQp^z?b#A(-+3NZ|IFbaJ5eR);n*@*qSp`EUV=u zSXSlUDp|6$S_I<&*tM^y3$=_6Shnqi^oE0n-vutNK1I3SEJyO*m%s1-hB+}Z(Hvs{ zbbDW?fXu>k&w!5T2l*f#+qJBPa+K7{N2UkWZdmVIKiVI)%rLTrW0}8-x$RgW3hNY# zeQ|AFxRIfk0?g$Bh@dbNK!BREZGwzyND_3JId3hf*BE<}wioN0=*EbX?NVGf|D?BZ z1tOygYc4;7KXBBaF*KlxU)VcRz_qGkZV?XmeSFC zl#IF{q4a)k&F>SEHr=eV@2Td_F>RlM9z+D@rGwHj^_jC~vRQ0b z0o+tsyvFG`^*S3*BVh9O+x%b7{u?##D(2W%F1Wy=hQ0pBK%19TO9EaBH@iU&nvb_1 z*#0XsLODQayR;9}r_`YtWHiI3@yu&xx*MHf^!7>tpMiYLNt}6t6N(o4)#1uWd!YHL zsr=)52mT-nS(G4@aM-9eHCMEk$g%+DKpo~Y@_=tp$2uXWwng+X+Vl?lR9hgvZOy!j z6;rBPM38e-PpplzI_;H1Pg#b4_kPw(mrUmtVz=+BM` z+SJ-d4;;<9_XzUe>B}G&uMW;$`=i{M5@c(?Nls-G9X)KH5cEoQb53>MCN|go1!ow4 zR~b}S7bvdXd1Z!`J?wW1*FB_R%WIgdD<>~-1X3AYwNQ1+7xs81hY;XF%LOsT(FAAm z-wZ%UuN=U`PDrb+7Y=&Ge*YrB9V+EAM4C*LuA#iA%NKtqKZd~BfNqSWF}LXd@ZT8E z4f5=*5eKmTXqqeD7s2WQwH>seKPUGuz+2Q0F*2_B-$(obyZ_Hx*xv`n*3zndut5)- z3Vfcr7;btX0DN*>CX1uLo|kJ(U=rUCm%rkkM_H83`d!arPO^$hlF#zrCmO&R|9Fq9 z-hAZ4tRH!j$${^18=qlj|KTOsMtM@xj@<~Emm9=;D$G#H3&V(JiFQxo)yR4dJdvpm zoQTaSl%>z{E3sz&L0Qq`4oQiJxp$HO;_!=H)C?dUJTWk@+>k>H|sKqGLVt|g2rPhC;gWz=!D=mJ#^Ur(2@sQZUI_=>^hg}<4A z{e3rLP9*PR>Uy2`M{vmH;qg+c}w%N%M z-S&K!vM3_I+58suzS5x!y_aTy{A9S2QI?fnkqt+~ssJ-~97ok;- zso|-GS%khcaOo$dMkUF_o&%#p&pGC%H1k*j*XL)NWI4g+$74Vh2@zi>X2nKrpta|3|-uMQ{OTbK|qVKJRTr&;)RdVspbkwa5$7Z;LSM5~umG&IK zK=-mA6GF*IZ5b#S69LYv?;%oQU{5vd7}cs|$LD;h14k&0ftI&t^YhO*mK-5-{;Jn* z2ca+yorT5glqOZxEoWwvYqU+iy&rJWUrWEdD-=^(#6syg+xKhX7OZya^i>0nG6@Q? z+Tm4;k>eNSkEHV_8)X9oFF<7&)Mb`YXNW|scgijJYnmWN?MLi|(RRo?(t1gq`p2Wt z`6N}8{fTx7vs!1jO%5T@t{bblIeOJ&8hqEzQeiItq%d7Q?dTNN!8^`7*o~bb(_66d z53i+Pf-1n9@j3wYcFpY1`nP|0hXValkBRNSyy}E$FFhprpmZM%;U&E6tx{jR5~Ivl zT0l953qODH3uH(Ss?O^h_z8r<5!KZgJq!Uf%gL_N!|r#2J)&2e9a|xK14oifsS>8U zt`UtE)%$CDjW$|0Q_+p>qB|^m{iM6|i=!4Uuw$ly_`%Vm+ET}{CYz}j)+athtWTd+ zQ8TovV#?8*@Nzy(YY;)OwHJyXWMGjircHzUoyyI7TqBmLvh@|S6{c{b-I|~5e+za) zg@Hmznd5~lTkYC6gV5@(`kJ=^1(Hb&5f(sOb#R_g405Xu5OkRIzY<3^>NlxJRsKGR zHTR63TBK|(aa`4{XJpLi)?S$}+-DE*z{h`nu80WIz>Z!1j%jg7QxuG;yX2Qlhh_Wc zRI|U(Ew?0%G>$s#gXA^oe<=lmSi$}g6GYm%*}BVb{~Th@g-_*TA*#5*m3`LpVvBX* zq4fPeN0R7!50Gy)@0*1~0HyO)DOh!`?)GP+Aqk@vQ$vwH+n`w&hYuC}DT0<`3X z!M=oc_n($utND3Bcr`s~H#JfFkQ3$CZSLa#O*pQH-Gcb<0Xr|U4ti-R={FL*Jtdtd zusTykr^-0;?zd18QfB^8W#~Xik~XhG(6}alkl#Yr*+?|$OkZZcDK4T94*1A#b&VNY zQuG}=p#%LEPSbRdWqTPBLB*YBg;OJ;;##5aPezZU^Y%9zA`$W<*Fn54Kd{t);3W@h zu-MQOS76@R&J&!o>0R&7Om$CpS}IT8QhKUh;B-2NV%B0UJN#GmBys9npT8Y?Dc2&r zP;_749z$#!j{7X7OYtR7qEBGD?MMeO5QW&qLTujvXH1i6ufZd&e{|mvT1%;XlwmnE zfETB2gUUE-*L1{LZdTsi9Z9cEX~0J=>U1mIm2d;5<{^6O~fL7~}34p$KBC#6%%g0wmMj(rnt7GlQs`+%0-K zzEVQ?7^tHP9itUWw;647{Cq4~5pTZn4!(cfBomDyZg-vH{K})uyQbeJO>#!XF_Oc& zXSHjs{UX6#7Y~;B^$kcGZuw4IMtvQ+UVeq4CrDA)jzVJPlV|%H@v6>!(2|9bA^Ezf zJid2GWi}C-E^hb4Fp6q(Kr=qsQalpUZWw1tGhta$_NmxaSS*bkpGB7fx<$X-E*e-9 z!r8ZRazhv+&E#Lt13BWKd)sT*6R1(GxH}mOx2Jrx8|W6lH@SW#*b=RWd|-*WDF)oC z-$@g0NO6xA`ndmL*sEXXz_y=gxxI%;8LxwBl`A$kB}$yBEC|I0O19Gq@HHc+b2NDV z=)-OXF?Nn2{)TXc8^*mUzM=~vy?kAwhh}X^agkQO^L%~?tJoUu&_XejMQs0!#x@E1 zg~x?jv-Kk}5JkO1uX`52z4X#9*3BE}OV%d9Petw|hk<1^z4eG?$E`JhO)e-^M|p@E zW2Pwt{;2LK+K5*QDwBC{qttQ=V8J_k#8=~rjx|=tm^2B zV`O=6W{l-W_hM$zsas&vT}M1+JV_HeOC)U6Q8MOb?1rsug?e4yquckuUsoPVZyi18 zwySfeJK0iJ1pEN-v(>mz;h}w_+4(RGq|sA|=GJ)OukX3RX*1-g3%bvhM@gU-Rk*xD z2SAG`Ag?yI>AR0+ALPk(t#a<1PRH5r>KI~*4&?K1#5RR7SEF(WUoR07YH2ygQp(S^ zKifJ2kzL_hI=P`AEgIXBxaHZ`2Q@-|a}K)V%-KQ*eT*#RVc3K`6vrnj#IR?Eei)+% zR4-s1bNGIweq?^+eiRO9rkJl)-)Ghl>SHB7w_9vZ^gA$v!Yqi}PK42w;IsEyQ zn%V0cQzFr_&kn2Wh+AJ+1 z9TE}!4qPji5_N^`>W}PzW`=EL-R#F{*hLGoahJ#-tZM0X%5pAtd(dY=6+V5kmDZ){ ztB(h{@r8;4q?3VGAnxZfSoK0Zeu+RUo|p5~v2Red)Y|Y2lJtA3JYq>?YK999pSZzD ziwbRO+g!g@oXsf-P}fZ19yHrgujgTJ7$XIhiS`b<-R6`i&LUZs+=;=`-(FySMv+2{ zF9aTMOW11Zcb|=ssUEsGxke3ZRXMc{MCTl!=MSkYO6v4IYP$V0t5eU&{24bm=5^|B zGPvVwuF>R>p1*g&p=K5zK(4cxREPW5^Gv4UXFgbHz2-nhQv2A}K$IV+9oRruVvZzr zI+EvD^`cm0=0t!mWu2t*7DQtDWs!b&4F8Am3qRQ$m#?sXI?cap;@6T3@@~(&2 zHQ6sOhK|N;w4d|YFMZMFo7kHvTh7Qb;#=YW-S}*_(jeW0%&g6MYs7uYo^Eb=R*d5A ze0xGnKwWpa-I*0W&d(?kRyn_=ljX;JRX)uLP#zI!5Jxd#w(U24SU95$-J#7u3*n8w z&i;KEP3C_7sFz`xn{q^VGu$8rk)5>J)l8-sbt_R#}H{4dB~0Xz@D#J;DEo z-8b{Vrq_5ttK<`VzPyn=02zl0hWCDW@;q=^>DLeS+%He3AN+f1CP_-x=PF5`zFo)B z+fYY*7qLykDsI5CT2Wh9=Aogq6DxHKJ-DYQ_hiS{I|z58Jw3e$R1HT;^m=EgN+8gJz>VSyi(+Py(JPPbk>~Z z&kmPEY<=1yK;!^GFePr%vW@wfyXu|Je93yD-iR?7$Ijy(mGR?u(qx8VbcaM*I1tR0 z4gOU#%(HaQwvhd$@w=zB+e%Oi3Fx>-wAk*qu%$D9>Q612nConw_uV!3@O6UEA(Fd$ zb)*C)d%QT;b&5;7A%@-&K%z&u2{s$OAtejD2AjR~#CeTo2}ODt98Q+C(TqWy#6))7 zmy+xKA^OrAeck3v)3MWo-;-Y?t*I$Lqbu*mlRgafexuo!Zm`3D!8{cv3LSFmH4O-3 zK-=(2pMWCQ5BH42u1`-%$;y3w5gd%ZOXUS*)^hw6E4l?ix^m~J(I=@|Jb^Ja1Zp<1 zoqIe-R<^jAKWwvctFt*BtAjncx6$vl9HuAF0xky7IZxcVlEUT=z)*9Kr}bu80pXrg zZF48CkQ%${L`%+34^pU$c zXM?@A*`)#Z@c`^IW9P)!D$6EW!I&+EzsB{wD5#O46@@E9tTzA+0dk|x*x3VR+~0ku zC4Ul%IMyTMc}faCmY~5o^A;2N_PBAvHBG?VW5fI^Z}s%(m^fz8w1cY=4XdH|C{&Ff zEFtN2|1-*M`q62?U(#BJ;-6jHTNHG4m|24fEt_{cO?0_=ea4!hinyYC9R{@i05sop z!X`!W7zD#}Fm`&NY7IP@Q;}F5{sZ++;ZV<9Du4dzP+nR|s#3x@`2PT=YFr2a literal 0 HcmV?d00001 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance_whenClosed.default-dark.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance_whenClosed.default-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..80740c8feffc311e860f564d8d2e95918ad61956 GIT binary patch literal 26132 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 Y7sgc-Pc8)fF$PHWf!6&BMXS*N0qj1iCIA2c literal 0 HcmV?d00001 From f50d4c2d449deaad21a125835840f61a54d58d35 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 20:04:31 +0100 Subject: [PATCH 35/47] Add test coverage to disabling online indicator in ChatUserAvatarView --- .../AvatarView/ChatUserAvatarView_Tests.swift | 9 +++++++++ ...whenOnlineIndicatorDisabled.default-light.png | Bin 0 -> 6666 bytes 2 files changed, 9 insertions(+) create mode 100644 Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/__Snapshots__/ChatUserAvatarView_Tests/test_appearance_whenOnlineIndicatorDisabled.default-light.png diff --git a/Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/ChatUserAvatarView_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/ChatUserAvatarView_Tests.swift index 7af4458106..2fbad2206d 100644 --- a/Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/ChatUserAvatarView_Tests.swift +++ b/Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/ChatUserAvatarView_Tests.swift @@ -37,6 +37,15 @@ final class ChatUserAvatarView_Tests: XCTestCase { AssertSnapshot(avatarViewOffline, variants: .onlyUserInterfaceStyles, suffix: "without online indicator") } + func test_appearance_whenOnlineIndicatorDisabled() { + let avatarViewOnline = ChatUserAvatarView().withoutAutoresizingMaskConstraints + avatarViewOnline.addSizeConstraints() + avatarViewOnline.components = .mock + avatarViewOnline.content = user + avatarViewOnline.shouldShowOnlineIndicator = false + AssertSnapshot(avatarViewOnline, variants: [.defaultLight]) + } + func test_appearanceCustomization_usingAppearanceAndComponents() { class RectIndicator: UIView, MaskProviding { override func didMoveToSuperview() { diff --git a/Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/__Snapshots__/ChatUserAvatarView_Tests/test_appearance_whenOnlineIndicatorDisabled.default-light.png b/Tests/StreamChatUITests/SnapshotTests/CommonViews/AvatarView/__Snapshots__/ChatUserAvatarView_Tests/test_appearance_whenOnlineIndicatorDisabled.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..232eb3383537f54813836ea319a0b917b532751d GIT binary patch literal 6666 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 Date: Mon, 19 Aug 2024 20:10:15 +0100 Subject: [PATCH 36/47] Add test coverage to quoted poll --- .../QuotedChatMessageView_Tests.swift | 12 ++++++++++-- .../test_withPoll.default-light.png | Bin 0 -> 5397 bytes 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/__Snapshots__/QuotedChatMessageView_Tests/test_withPoll.default-light.png diff --git a/Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/QuotedChatMessageView_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/QuotedChatMessageView_Tests.swift index d89aaba8e4..ab3b2d874c 100644 --- a/Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/QuotedChatMessageView_Tests.swift +++ b/Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/QuotedChatMessageView_Tests.swift @@ -248,6 +248,12 @@ final class QuotedChatMessageView_Tests: XCTestCase { AssertSnapshot(view, variants: [.defaultLight]) } + func test_withPoll() { + view.content = makeContent(text: "", poll: .mock(name: "Best player")) + + AssertSnapshot(view, variants: [.defaultLight]) + } + func test_appearanceCustomization_usingComponents() { class TestView: ChatAvatarView { override func setUpAppearance() { @@ -352,7 +358,8 @@ extension QuotedChatMessageView_Tests { channel: ChatChannel? = nil, isSentByCurrentUser: Bool = false, avatarAlignment: QuotedAvatarAlignment = .leading, - attachments: [AnyChatMessageAttachment] = [] + attachments: [AnyChatMessageAttachment] = [], + poll: Poll? = nil ) -> QuotedChatMessageView.Content { let message = ChatMessage.mock( id: .unique, @@ -361,7 +368,8 @@ extension QuotedChatMessageView_Tests { author: .mock(id: .unique), translations: translations, attachments: attachments, - isSentByCurrentUser: isSentByCurrentUser + isSentByCurrentUser: isSentByCurrentUser, + poll: poll ) return .init(message: message, avatarAlignment: avatarAlignment, channel: channel) } diff --git a/Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/__Snapshots__/QuotedChatMessageView_Tests/test_withPoll.default-light.png b/Tests/StreamChatUITests/SnapshotTests/CommonViews/QuotedChatMessageView/__Snapshots__/QuotedChatMessageView_Tests/test_withPoll.default-light.png new file mode 100644 index 0000000000000000000000000000000000000000..7ccbc30c50e0ceae4f456fc281edf323ecb1c578 GIT binary patch literal 5397 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 N`r7xj%J0~R{|DD@2W0>N literal 0 HcmV?d00001 From 57073a4497b7c9cf1c99395808f93a8ab5627f4d Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 20:58:40 +0100 Subject: [PATCH 37/47] Fix some existing snapshot tests --- Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift index c44e643488..a5c03536bf 100644 --- a/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift +++ b/Sources/StreamChatUI/ChatMessageList/ChatMessageListVC.swift @@ -773,8 +773,7 @@ open class ChatMessageListVC: _ViewController, guard let message = message, - let channel = dataSource?.channel(for: self), - let currentUserId = client.currentUserId + let channel = dataSource?.channel(for: self) else { return cell } @@ -782,7 +781,7 @@ open class ChatMessageListVC: _ViewController, cell.messageContentView?.delegate = self cell.messageContentView?.channel = channel cell.messageContentView?.content = message - cell.messageContentView?.currentUserId = currentUserId + cell.messageContentView?.currentUserId = client.currentUserId /// Process cell decorations cell.setDecoration(for: .header, decorationView: delegate?.chatMessageListVC(self, headerViewForMessage: message, at: indexPath)) From bf1f7136059f331b6a86648926d10081ca1db1aa Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 21:08:59 +0100 Subject: [PATCH 38/47] Use UIStackView for Spacer() to avoid drawing --- .../ViewContainerBuilder/ViewContainerBuilder.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift b/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift index eff8be21ff..45464444b6 100644 --- a/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift +++ b/Sources/StreamChatUI/ViewContainerBuilder/ViewContainerBuilder.swift @@ -115,7 +115,7 @@ public func HContainer( /// A flexible space that expands along the major axis of its containing stack layout. public func Spacer() -> UIView { - let view = UIView() + let view = UIStackView() view.translatesAutoresizingMaskIntoConstraints = false return view } From c3e81a22a13ed613b9f42047ec244bb36ac23ba7 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 23:49:52 +0100 Subject: [PATCH 39/47] Fix Xcode 14 Build --- .../Attachments/Poll/PollAttachmentViewInjector.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift index 24d2792489..cf93bc8b80 100644 --- a/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift +++ b/Sources/StreamChatUI/ChatMessageList/Attachments/Poll/PollAttachmentViewInjector.swift @@ -58,15 +58,15 @@ public class PollAttachmentViewInjector: AttachmentViewInjector { pollAttachmentView.onOptionTap = { [weak self] option in guard let self = self else { return } - pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapOption: option, in: message) + self.pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapOption: option, in: message) } pollAttachmentView.onEndTap = { [weak self] poll in guard let self = self else { return } - pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapEndPoll: poll, in: message) + self.pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapEndPoll: poll, in: message) } pollAttachmentView.onResultsTap = { [weak self] poll in guard let self = self else { return } - pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapPollResults: poll, in: message) + self.pollAttachmentViewDelegate?.pollAttachmentView(self.pollAttachmentView, didTapPollResults: poll, in: message) } pollAttachmentView.content = .init(poll: poll, currentUserId: currentUserId) From fb7a7d449b8f777bf0a6ae1fc01fc196273b43a8 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 19 Aug 2024 23:55:54 +0100 Subject: [PATCH 40/47] Fix Poll AttachmentView Tests on CI --- .../test_appearance.default-light.png | Bin 29952 -> 29956 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 36273 -> 36277 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 30096 -> 30089 bytes .../test_appearance.small-dark.png | Bin 29143 -> 29105 bytes ...est_appearance_whenClosed.default-dark.png | Bin 26132 -> 26106 bytes ...st_appearance_whenClosed.default-light.png | Bin 25620 -> 25628 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatMessageList/Poll/__Snapshots__/PollAttachmentView_Tests/test_appearance.default-light.png index 06c10d5d9ca677866def393aed3a94cbe4c3c763..5c9aeb4e42f6e879053be88823b8f2f48c105cb3 100644 GIT binary patch literal 29956 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