@@ -105,6 +105,9 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
105
105
internal var channelListSearchController : ChatChannelListController ?
106
106
internal var messageSearchController : ChatMessageSearchController ?
107
107
108
+ /// Serial queue used to process the search results.
109
+ private let queue = DispatchQueue ( label: " com.getstream.stream-chat-swiftui.ChatChannelListViewModel " )
110
+
108
111
@Published public var loadingSearchResults = false
109
112
@Published public var searchResults = [ ChannelSelectionInfo] ( )
110
113
@Published var hideTabBar = false
@@ -362,7 +365,6 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
362
365
messageSearchController. loadNextMessages { [ weak self] _ in
363
366
guard let self = self else { return }
364
367
self . loadingNextChannels = false
365
- self . updateMessageSearchResults ( )
366
368
}
367
369
}
368
370
}
@@ -387,18 +389,12 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
387
389
}
388
390
389
391
private func performMessageSearch( ) {
390
- guard let userId = chatClient. currentUserId else { return }
391
392
messageSearchController = chatClient. messageSearchController ( )
392
393
messageSearchController? . delegate = self
393
- let query = MessageSearchQuery (
394
- channelFilter: . containMembers( userIds: [ userId] ) ,
395
- messageFilter: . autocomplete( . text, text: searchText)
396
- )
397
394
loadingSearchResults = true
398
- messageSearchController? . search ( query : query , completion : { [ weak self] _ in
395
+ messageSearchController? . search ( text : searchText ) { [ weak self] _ in
399
396
self ? . loadingSearchResults = false
400
- self ? . updateMessageSearchResults ( )
401
- } )
397
+ }
402
398
}
403
399
404
400
private func performChannelSearch( ) {
@@ -423,10 +419,22 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
423
419
return
424
420
}
425
421
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
+ )
429
433
}
434
+ DispatchQueue . main. async {
435
+ self ? . searchResults = results
436
+ }
437
+ }
430
438
}
431
439
432
440
private func updateChannelSearchResults( ) {
0 commit comments