Skip to content

Conversation

Stream-SDK-Bot
Copy link
Collaborator

βœ… Added

  • Add option to scroll to and open a channel from the channel list #932
  • Make MediaItem and MediaAttachmentContentView public to allow customization #935

🐞 Fixed

  • Show attachment title instead of URL in the FileAttachmentPreview view #930
  • Fix overriding title color in ChannelTitleView #931
  • Use channel capabilities for validating delete message action #933
  • Fix the video attachments now fetch the URL once on appear and pause when swiping to another item in the gallery #934

@Stream-SDK-Bot Stream-SDK-Bot requested a review from a team as a code owner September 1, 2025 07:01
Copy link

github-actions bot commented Sep 1, 2025

Public Interface

+ public struct MediaAttachmentContentView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(factory: Factory,mediaItem: MediaItem,mediaAttachment: MediaAttachment,allMediaAttachments: [MediaAttachment],itemWidth: CGFloat,index: Int)

+ public struct MediaItem: Identifiable  
+ 
+   public let id: String
+   public let isVideo: Bool
+   public let message: ChatMessage
+   public var videoAttachment: ChatMessageVideoAttachment?
+   public var imageAttachment: ChatMessageImageAttachment?
+   public var mediaAttachment: MediaAttachment?
+   
+ 
+   public init(id: String,isVideo: Bool,message: ChatMessage,videoAttachment: ChatMessageVideoAttachment?,imageAttachment: ChatMessageImageAttachment?)



 open class ChatChannelListViewModel: ObservableObject, ChatChannelListControllerDelegate, ChatMessageSearchControllerDelegate  
-   @Published public var channels
+   @Published public var scrolledChannelId: String?
-   @Published public var selectedChannel: ChannelSelectionInfo?
+   @Published public var channels
-   @Published public var swipedChannelId: String?
+   @Published public var selectedChannel: ChannelSelectionInfo?
-   @Published public var channelAlertType: ChannelAlertType?
+   @Published public var swipedChannelId: String?
-   @Published public var customChannelPopupType: ChannelPopupType?
+   @Published public var channelAlertType: ChannelAlertType?
-   @Published public var alertShown
+   @Published public var customChannelPopupType: ChannelPopupType?
-   @Published public var loading
+   @Published public var alertShown
-   @Published public var customAlertShown
+   @Published public var loading
-   @Published public var searchType: ChannelListSearchType
+   @Published public var customAlertShown
-   public var channelListSearchController: ChatChannelListController?
+   @Published public var searchType: ChannelListSearchType
-   public var messageSearchController: ChatMessageSearchController?
+   public var channelListSearchController: ChatChannelListController?
-   @Published public var loadingSearchResults
+   public var messageSearchController: ChatMessageSearchController?
-   @Published public var searchResults
+   @Published public var loadingSearchResults
-   @Published public var searchText
+   @Published public var searchResults
-   public var isSearching: Bool
+   @Published public var searchText
-   
+   public var isSearching: Bool
- 
+   
-   public init(channelListController: ChatChannelListController? = nil,selectedChannelId: String? = nil,searchType: ChannelListSearchType = .channels)
+ 
-   
+   public init(channelListController: ChatChannelListController? = nil,selectedChannelId: String? = nil,searchType: ChannelListSearchType = .channels)
- 
+   
-   public func name(forChannel channel: ChatChannel)-> String
+ 
-   public func checkForChannels(index: Int)
+   public func name(forChannel channel: ChatChannel)-> String
-   public func loadAdditionalSearchResults(index: Int)
+   public func checkForChannels(index: Int)
-   public func onlineIndicatorShown(for channel: ChatChannel)-> Bool
+   public func openChannel(with channelId: ChannelId)
-   public func onDeleteTapped(channel: ChatChannel)
+   public func loadAdditionalSearchResults(index: Int)
-   public func onMoreTapped(channel: ChatChannel)
+   public func onlineIndicatorShown(for channel: ChatChannel)-> Bool
-   public func delete(channel: ChatChannel)
+   public func onDeleteTapped(channel: ChatChannel)
-   open func showErrorPopup(_ error: Error?)
+   public func onMoreTapped(channel: ChatChannel)
-   open func setChannelAlertType(_ channelAlertType: ChannelAlertType)
+   public func delete(channel: ChatChannel)
-   public func controller(_ controller: ChatChannelListController,didChangeChannels changes: [ListChange<ChatChannel>])
+   open func showErrorPopup(_ error: Error?)
-   open func controller(_ controller: ChatChannelListController,shouldAddNewChannelToList channel: ChatChannel)-> Bool
+   open func setChannelAlertType(_ channelAlertType: ChannelAlertType)
-   open func controller(_ controller: ChatChannelListController,shouldListUpdatedChannel channel: ChatChannel)-> Bool
+   public func controller(_ controller: ChatChannelListController,didChangeChannels changes: [ListChange<ChatChannel>])
-   public func preselectChannelIfNeeded()
+   open func controller(_ controller: ChatChannelListController,shouldAddNewChannelToList channel: ChatChannel)-> Bool
-   public func controller(_ controller: ChatMessageSearchController,didChangeMessages changes: [ListChange<ChatMessage>])
+   open func controller(_ controller: ChatChannelListController,shouldListUpdatedChannel channel: ChatChannel)-> Bool
-   open func performMessageSearch()
+   public func preselectChannelIfNeeded()
-   open func performChannelSearch()
+   public func controller(_ controller: ChatMessageSearchController,didChangeMessages changes: [ListChange<ChatMessage>])
+   open func performMessageSearch()
+   open func performChannelSearch()

 public struct ChannelList: View  
-   public init(factory: Factory,channels: LazyCachedMapCollection<ChatChannel>,selectedChannel: Binding<ChannelSelectionInfo?>,swipedChannelId: Binding<String?>,scrollable: Bool = true,onlineIndicatorShown: ((ChatChannel) -> Bool)? = nil,imageLoader: ((ChatChannel) -> UIImage)? = nil,onItemTap: @escaping (ChatChannel) -> Void,onItemAppear: @escaping (Int) -> Void,channelNaming: ((ChatChannel) -> String)? = nil,channelDestination: @escaping (ChannelSelectionInfo) -> Factory.ChannelDestination,trailingSwipeRightButtonTapped: @escaping (ChatChannel) -> Void = { _ in },trailingSwipeLeftButtonTapped: @escaping (ChatChannel) -> Void = { _ in },leadingSwipeButtonTapped: @escaping (ChatChannel) -> Void = { _ in })
+   public init(factory: Factory,channels: LazyCachedMapCollection<ChatChannel>,selectedChannel: Binding<ChannelSelectionInfo?>,swipedChannelId: Binding<String?>,scrolledChannelId: Binding<String?> = .constant(nil),scrollable: Bool = true,onlineIndicatorShown: ((ChatChannel) -> Bool)? = nil,imageLoader: ((ChatChannel) -> UIImage)? = nil,onItemTap: @escaping (ChatChannel) -> Void,onItemAppear: @escaping (Int) -> Void,channelNaming: ((ChatChannel) -> String)? = nil,channelDestination: @escaping (ChannelSelectionInfo) -> Factory.ChannelDestination,trailingSwipeRightButtonTapped: @escaping (ChatChannel) -> Void = { _ in },trailingSwipeLeftButtonTapped: @escaping (ChatChannel) -> Void = { _ in },leadingSwipeButtonTapped: @escaping (ChatChannel) -> Void = { _ in })

@Stream-SDK-Bot
Copy link
Collaborator Author

SDK Size

title previous release current release diff status
StreamChatSwiftUI 9.22 MB 9.24 MB +19 KB 🟒

Copy link

github-actions bot commented Sep 1, 2025

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

Copy link

sonarqubecloud bot commented Sep 1, 2025

Quality Gate Failed Quality Gate failed

Failed conditions
68.6% Coverage on New Code (required β‰₯ 80%)

See analysis details on SonarQube Cloud

@laevandus
Copy link
Contributor

/merge release

@testableapple
Copy link
Contributor

Publication of the release has been launched πŸ‘

@github-actions github-actions bot merged commit 7f53caf into main Sep 1, 2025
11 of 12 checks passed
@github-actions github-actions bot deleted the release/4.87.0 branch September 1, 2025 08:05
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.

5 participants