Skip to content

Conversation

@Stream-SDK-Bot
Copy link
Collaborator

βœ… Added

  • Add message highlighting on jumping to a quoted message #1032
  • Display double grey checkmark when delivery events are enabled #1038

🐞 Fixed

  • Fix composer deleting newly entered text after deleting draft text #1030
  • Fix mark unread action not shown for messages that are root of a thread in the channel view #1041

Stream Bot and others added 11 commits October 22, 2025 18:41
…1030)

* Fix new input text in the composer deleted after quickly deleting previous text from draft

* Update CHANGELOG.md
* Display double grey checkmark when delivery events are enabled

* Update CHANGELOG.md

* Add MessageReadIndicatorView_Tests

* Fix tests compilations

* Add test coverage to the channelListItem

* [CI] Snapshots (#1039)

Co-authored-by: Stream Bot <[email protected]>

---------

Co-authored-by: Stream SDK Bot <[email protected]>
Co-authored-by: Stream Bot <[email protected]>
* Fix message being highlighted when marking it unread

* Add additional test coverage
…ad in the channel view (#1041)

* Fix mark unread action not shown for messages that are root of a thread in the channel view

* Update CHANGELOG.md

* Fix mark unread action not shown for messages that are root of a thread in the channel view
@Stream-SDK-Bot Stream-SDK-Bot requested a review from a team as a code owner November 7, 2025 16:25
@github-actions
Copy link

github-actions bot commented Nov 7, 2025

1 Warning
⚠️ Big PR

Generated by 🚫 Danger

@github-actions
Copy link

github-actions bot commented Nov 7, 2025

Public Interface

 public struct MessageListConfig  
-   
+   public let highlightMessageWhenJumping: Bool
- 
+   
-   public init(messageListType: MessageListType = .messaging,typingIndicatorPlacement: TypingIndicatorPlacement = .bottomOverlay,groupMessages: Bool = true,messageDisplayOptions: MessageDisplayOptions = MessageDisplayOptions(),messagePaddings: MessagePaddings = MessagePaddings(),dateIndicatorPlacement: DateIndicatorPlacement = .overlay,pageSize: Int = 25,messagePopoverEnabled: Bool = true,doubleTapOverlayEnabled: Bool = false,becomesFirstResponderOnOpen: Bool = false,resignsFirstResponderOnScrollDown: Bool = true,updateChannelsFromMessageList: Bool = false,maxTimeIntervalBetweenMessagesInGroup: TimeInterval = 60,cacheSizeOnChatDismiss: Int = 1024 * 1024 * 100,iPadSplitViewEnabled: Bool = true,scrollingAnchor: UnitPoint = .center,showNewMessagesSeparator: Bool = true,handleTabBarVisibility: Bool = true,messageListAlignment: MessageListAlignment = .standard,uniqueReactionsEnabled: Bool = false,localLinkDetectionEnabled: Bool = true,isMessageEditedLabelEnabled: Bool = true,markdownSupportEnabled: Bool = true,userBlockingEnabled: Bool = false,bouncedMessagesAlertActionsEnabled: Bool = true,skipEditedMessageLabel: @escaping (ChatMessage) -> Bool = { _ in false },draftMessagesEnabled: Bool = false,downloadFileAttachmentsEnabled: Bool = false,hidesCommandsOverlayOnMessageListTap: Bool = true,hidesAttachmentsPickersOnMessageListTap: Bool = true)
+ 
+   public init(messageListType: MessageListType = .messaging,typingIndicatorPlacement: TypingIndicatorPlacement = .bottomOverlay,groupMessages: Bool = true,messageDisplayOptions: MessageDisplayOptions = MessageDisplayOptions(),messagePaddings: MessagePaddings = MessagePaddings(),dateIndicatorPlacement: DateIndicatorPlacement = .overlay,pageSize: Int = 25,messagePopoverEnabled: Bool = true,doubleTapOverlayEnabled: Bool = false,becomesFirstResponderOnOpen: Bool = false,resignsFirstResponderOnScrollDown: Bool = true,updateChannelsFromMessageList: Bool = false,maxTimeIntervalBetweenMessagesInGroup: TimeInterval = 60,cacheSizeOnChatDismiss: Int = 1024 * 1024 * 100,iPadSplitViewEnabled: Bool = true,scrollingAnchor: UnitPoint = .center,showNewMessagesSeparator: Bool = true,highlightMessageWhenJumping: Bool = true,handleTabBarVisibility: Bool = true,messageListAlignment: MessageListAlignment = .standard,uniqueReactionsEnabled: Bool = false,localLinkDetectionEnabled: Bool = true,isMessageEditedLabelEnabled: Bool = true,markdownSupportEnabled: Bool = true,userBlockingEnabled: Bool = false,bouncedMessagesAlertActionsEnabled: Bool = true,skipEditedMessageLabel: @escaping (ChatMessage) -> Bool = { _ in false },draftMessagesEnabled: Bool = false,downloadFileAttachmentsEnabled: Bool = false,hidesCommandsOverlayOnMessageListTap: Bool = true,hidesAttachmentsPickersOnMessageListTap: Bool = true)

 open class ChatChannelViewModel: ObservableObject, MessagesDataSource  
-   @Published public var listId
+   @Published public var highlightedMessageId: String?
-   @Published public var showScrollToLatestButton
+   @Published public var listId
-   @Published public var currentDateString: String?
+   @Published public var showScrollToLatestButton
-   @Published public var messages
+   @Published public var currentDateString: String?
-   @Published public var messagesGroupingInfo
+   @Published public var messages
-   @Published public var currentSnapshot: UIImage?
+   @Published public var messagesGroupingInfo
-   @Published public var reactionsShown
+   @Published public var currentSnapshot: UIImage?
-   @Published public var bouncedMessage: ChatMessage?
+   @Published public var reactionsShown
-   @Published public var bouncedActionsViewShown
+   @Published public var bouncedMessage: ChatMessage?
-   @Published public var quotedMessage: ChatMessage?
+   @Published public var bouncedActionsViewShown
-   @Published public var editedMessage: ChatMessage?
+   @Published public var quotedMessage: ChatMessage?
-   @Published public var channelHeaderType: ChannelHeaderType
+   @Published public var editedMessage: ChatMessage?
-   @Published public var threadMessage: ChatMessage?
+   @Published public var channelHeaderType: ChannelHeaderType
-   @Published public var threadMessageShown
+   @Published public var threadMessage: ChatMessage?
-   @Published public var shouldShowTypingIndicator
+   @Published public var threadMessageShown
-   @Published public var scrollPosition: String?
+   @Published public var shouldShowTypingIndicator
-   @Published public private var loadingNextMessages: Bool
+   @Published public var scrollPosition: String?
-   @Published public var firstUnreadMessageId: String?
+   @Published public private var loadingNextMessages: Bool
-   public var currentUserMarkedMessageUnread: Bool
+   @Published public var firstUnreadMessageId: String?
-   @Published public private var channel: ChatChannel?
+   public var currentUserMarkedMessageUnread: Bool
-   public var isMessageThread: Bool
+   @Published public private var channel: ChatChannel?
-   
+   public var isMessageThread: Bool
- 
+   
-   public init(channelController: ChatChannelController,messageController: ChatMessageController? = nil,scrollToMessage: ChatMessage? = nil)
+ 
-   
+   public init(channelController: ChatChannelController,messageController: ChatMessageController? = nil,scrollToMessage: ChatMessage? = nil)
- 
+   
-   public func scrollToLastMessage()
+ 
-   public func messageSentTapped()
+   public func scrollToLastMessage()
-   public func jumpToMessage(messageId: String)-> Bool
+   public func messageSentTapped()
-   open func handleMessageAppear(index: Int,scrollDirection: ScrollDirection)
+   public func jumpToMessage(messageId: String)-> Bool
-   open func groupMessages()
+   public func highlightMessage(withId messageId: MessageId)
-   public func showReactionOverlay(for view: AnyView)
+   open func handleMessageAppear(index: Int,scrollDirection: ScrollDirection)
-   public func showBouncedActionsView(for message: ChatMessage)
+   open func groupMessages()
-   public func deleteMessage(_ message: ChatMessage)
+   public func showReactionOverlay(for view: AnyView)
-   public func resendMessage(_ message: ChatMessage)
+   public func showBouncedActionsView(for message: ChatMessage)
-   public func editMessage(_ message: ChatMessage)
+   public func deleteMessage(_ message: ChatMessage)
-   open func messageActionExecuted(_ messageActionInfo: MessageActionInfo)
+   public func resendMessage(_ message: ChatMessage)
-   @objc public func onViewAppear()
+   public func editMessage(_ message: ChatMessage)
-   @objc public func onViewDissappear()
+   open func messageActionExecuted(_ messageActionInfo: MessageActionInfo)
-   public func setActive()
+   @objc public func onViewAppear()
+   @objc public func onViewDissappear()
+   public func setActive()

 public struct ColorPalette  
-   public var shadow: UIColor
+   public var messageCellHighlightBackground: UIColor
-   public var lightBorder: UIColor
+   public var shadow: UIColor
-   public var innerBorder: UIColor
+   public var lightBorder: UIColor
-   public var border: UIColor
+   public var innerBorder: UIColor
-   public var border2: UIColor
+   public var border: UIColor
-   public var border3: UIColor
+   public var border2: UIColor
-   public var alert: UIColor
+   public var border3: UIColor
-   public var alternativeActiveTint: UIColor
+   public var alert: UIColor
-   public var inactiveTint: UIColor
+   public var alternativeActiveTint: UIColor
-   public var alternativeInactiveTint: UIColor
+   public var inactiveTint: UIColor
-   public lazy var messageCurrentUserBackground: [UIColor]
+   public var alternativeInactiveTint: UIColor
-   public lazy var messageCurrentUserEmphemeralBackground: [UIColor]
+   public lazy var messageCurrentUserBackground: [UIColor]
-   public lazy var messageOtherUserBackground: [UIColor]
+   public lazy var messageCurrentUserEmphemeralBackground: [UIColor]
-   public lazy var messageCurrentUserTextColor: UIColor
+   public lazy var messageOtherUserBackground: [UIColor]
-   public lazy var messageOtherUserTextColor: UIColor
+   public lazy var messageCurrentUserTextColor: UIColor
-   public lazy var quotedMessageBackgroundCurrentUser: UIColor
+   public lazy var messageOtherUserTextColor: UIColor
-   public lazy var quotedMessageBackgroundOtherUser: UIColor
+   public lazy var quotedMessageBackgroundCurrentUser: UIColor
-   public lazy var reactionCurrentUserColor: UIColor?
+   public lazy var quotedMessageBackgroundOtherUser: UIColor
-   public lazy var reactionOtherUserColor: UIColor?
+   public lazy var reactionCurrentUserColor: UIColor?
-   public lazy var selectedReactionBackgroundColor: UIColor?
+   public lazy var reactionOtherUserColor: UIColor?
-   public var voiceMessageControlBackground: UIColor
+   public lazy var selectedReactionBackgroundColor: UIColor?
-   public var messageLinkAttachmentAuthorColor: Color
+   public var voiceMessageControlBackground: UIColor
-   public var messageLinkAttachmentTitleColor: Color
+   public var messageLinkAttachmentAuthorColor: Color
-   public var messageLinkAttachmentTextColor: Color
+   public var messageLinkAttachmentTitleColor: Color
-   public lazy var composerPlaceholderColor: UIColor
+   public var messageLinkAttachmentTextColor: Color
-   public lazy var composerInputBackground: UIColor
+   public lazy var composerPlaceholderColor: UIColor
-   public lazy var composerInputHighlightedBorder: UIColor
+   public lazy var composerInputBackground: UIColor
-   public var navigationBarGlyph: UIColor
+   public lazy var composerInputHighlightedBorder: UIColor
-   public var navigationBarTitle: UIColor
+   public var navigationBarGlyph: UIColor
-   public var navigationBarSubtitle: UIColor
+   public var navigationBarTitle: UIColor
-   public var navigationBarTintColor: Color
+   public var navigationBarSubtitle: UIColor
-   public var navigationBarBackground: UIColor?
+   public var navigationBarTintColor: Color
-   public var bannerBackgroundColor: UIColor
+   public var navigationBarBackground: UIColor?
-   
+   public var bannerBackgroundColor: UIColor
- 
+   
-   public init()
+ 
+   public init()

 public struct MessageRepliesView: View  
-   public init(factory: Factory,channel: ChatChannel,message: ChatMessage,replyCount: Int,showReplyCount: Bool = true,isRightAligned: Bool? = nil)
+   public init(factory: Factory,channel: ChatChannel,message: ChatMessage,replyCount: Int,showReplyCount: Bool = true,isRightAligned: Bool? = nil,threadReplyMessage: ChatMessage? = nil)

 public struct MessageReadIndicatorView: View  
-   public init(readUsers: [ChatUser],showReadCount: Bool,localState: LocalMessageState? = nil)
+   public init(readUsers: [ChatUser],showReadCount: Bool,showDelivered: Bool = false,localState: LocalMessageState? = nil)

@Stream-SDK-Bot
Copy link
Collaborator Author

SDK Size

title previous release current release diff status
StreamChatSwiftUI 9.58 MB 9.63 MB +50 KB 🟒

@Stream-SDK-Bot
Copy link
Collaborator Author

StreamChatSwiftUI XCSize

Object Diff (bytes)
MessageRepliesView.o +30004
ChatChannelViewModel.o +5012
MessageContainerView.o +2215
DefaultViewFactory.o +928
ChatChannelView.o +714
Show 18 more objects
Object Diff (bytes)
PollAllOptionsView.o +425
MessageComposerViewModel.o -296
AudioSessionFeedbackGenerator.o +250
ColorPalette.o +172
ReactionsOverlayView.o +148
MessageActionsResolver.o +128
MessageComposerView.o +124
AlertBannerViewModifier.o +124
ChatChannelList.o -104
FileAttachmentsView.o +104
BottomReactionsView.o -104
MessageListConfig.o +104
MessageListView.o -92
SlowModeView.o -76
RecordingTipView.o +72
Utils.o +48
Images.o -48
ChannelHeaderLoader.o -44

@github-actions
Copy link

github-actions bot commented Nov 7, 2025

Build for regression testing β„–131 has been uploaded to TestFlight 🎁

@sonarqubecloud
Copy link

sonarqubecloud bot commented Nov 7, 2025

@nuno-vieira
Copy link
Member

/merge release

@testableapple
Copy link
Contributor

Publication of the release has been launched πŸ‘

@github-actions github-actions bot merged commit d971b88 into main Nov 7, 2025
12 checks passed
@github-actions github-actions bot deleted the release/4.92.0 branch November 7, 2025 18:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants