@@ -105,6 +105,9 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
105105 internal var channelListSearchController : ChatChannelListController ?
106106 internal var messageSearchController : ChatMessageSearchController ?
107107
108+ /// Serial queue used to process the search results.
109+ private let queue = DispatchQueue ( label: " com.getstream.stream-chat-swiftui.ChatChannelListViewModel " )
110+
108111 @Published public var loadingSearchResults = false
109112 @Published public var searchResults = [ ChannelSelectionInfo] ( )
110113 @Published var hideTabBar = false
@@ -362,7 +365,6 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
362365 messageSearchController. loadNextMessages { [ weak self] _ in
363366 guard let self = self else { return }
364367 self . loadingNextChannels = false
365- self . updateMessageSearchResults ( )
366368 }
367369 }
368370 }
@@ -387,18 +389,12 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
387389 }
388390
389391 private func performMessageSearch( ) {
390- guard let userId = chatClient. currentUserId else { return }
391392 messageSearchController = chatClient. messageSearchController ( )
392393 messageSearchController? . delegate = self
393- let query = MessageSearchQuery (
394- channelFilter: . containMembers( userIds: [ userId] ) ,
395- messageFilter: . autocomplete( . text, text: searchText)
396- )
397394 loadingSearchResults = true
398- messageSearchController? . search ( query : query , completion : { [ weak self] _ in
395+ messageSearchController? . search ( text : searchText ) { [ weak self] _ in
399396 self ? . loadingSearchResults = false
400- self ? . updateMessageSearchResults ( )
401- } )
397+ }
402398 }
403399
404400 private func performChannelSearch( ) {
@@ -423,10 +419,22 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
423419 return
424420 }
425421
426- searchResults = messageSearchController. messages
427- . compactMap { message in
428- message. makeChannelSelectionInfo ( with: chatClient)
422+ queue. async { [ weak self] in
423+ let results : [ ChannelSelectionInfo ] = messageSearchController. messages. compactMap { message in
424+ guard let channelId = message. cid else { return nil }
425+ guard let channel = self ? . chatClient. channelController ( for: channelId) . channel else {
426+ return nil
427+ }
428+ return ChannelSelectionInfo (
429+ channel: channel,
430+ message: message,
431+ searchType: . channels
432+ )
429433 }
434+ DispatchQueue . main. async {
435+ self ? . searchResults = results
436+ }
437+ }
430438 }
431439
432440 private func updateChannelSearchResults( ) {
0 commit comments