@@ -101,7 +101,16 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
101101 }
102102 }
103103
104- private let searchType : ChannelListSearchType
104+ /// The type for search results.
105+ ///
106+ /// Setting a new value will reload search results.
107+ @Published public var searchType : ChannelListSearchType {
108+ didSet {
109+ guard searchType != oldValue else { return }
110+ performSearch ( )
111+ }
112+ }
113+
105114 /// The channel search controller which should be created only by ``performChannelSearch()``.
106115 public var channelListSearchController : ChatChannelListController ?
107116 /// The message search controller which should be created only by ``performMessageSearch()``.
@@ -116,7 +125,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
116125 @Published public var searchText = " " {
117126 didSet {
118127 if searchText != oldValue {
119- handleSearchTextChange ( )
128+ performSearch ( )
120129 }
121130 }
122131 }
@@ -337,7 +346,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
337346 . filter { $0. id != chatClient. currentUserId }
338347 }
339348
340- private func handleSearchTextChange ( ) {
349+ private func performSearch ( ) {
341350 if searchText. isEmpty {
342351 clearSearchResults ( )
343352 return
@@ -393,10 +402,11 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
393402 /// Creates a new message search controller, sets its delegate, and triggers the search operation.
394403 open func performMessageSearch( ) {
395404 messageSearchController = chatClient. messageSearchController ( )
396- messageSearchController? . delegate = self
397405 loadingSearchResults = true
398406 messageSearchController? . search ( text: searchText) { [ weak self] _ in
399407 self ? . loadingSearchResults = false
408+ self ? . messageSearchController? . delegate = self
409+ self ? . updateMessageSearchResults ( )
400410 }
401411 }
402412
@@ -420,7 +430,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
420430 }
421431
422432 private func updateMessageSearchResults( ) {
423- guard let messageSearchController = messageSearchController else {
433+ guard let messageSearchController, searchType == . messages else {
424434 return
425435 }
426436
@@ -433,7 +443,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
433443 return ChannelSelectionInfo (
434444 channel: channel,
435445 message: message,
436- searchType: . channels
446+ searchType: . messages
437447 )
438448 }
439449 DispatchQueue . main. async {
@@ -443,7 +453,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
443453 }
444454
445455 private func updateChannelSearchResults( ) {
446- guard let channelListSearchController = self . channelListSearchController else {
456+ guard let channelListSearchController, searchType == . channels else {
447457 return
448458 }
449459
0 commit comments