@@ -101,7 +101,16 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
101
101
}
102
102
}
103
103
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
+
105
114
/// The channel search controller which should be created only by ``performChannelSearch()``.
106
115
public var channelListSearchController : ChatChannelListController ?
107
116
/// The message search controller which should be created only by ``performMessageSearch()``.
@@ -116,7 +125,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
116
125
@Published public var searchText = " " {
117
126
didSet {
118
127
if searchText != oldValue {
119
- handleSearchTextChange ( )
128
+ performSearch ( )
120
129
}
121
130
}
122
131
}
@@ -337,7 +346,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
337
346
. filter { $0. id != chatClient. currentUserId }
338
347
}
339
348
340
- private func handleSearchTextChange ( ) {
349
+ private func performSearch ( ) {
341
350
if searchText. isEmpty {
342
351
clearSearchResults ( )
343
352
return
@@ -393,10 +402,11 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
393
402
/// Creates a new message search controller, sets its delegate, and triggers the search operation.
394
403
open func performMessageSearch( ) {
395
404
messageSearchController = chatClient. messageSearchController ( )
396
- messageSearchController? . delegate = self
397
405
loadingSearchResults = true
398
406
messageSearchController? . search ( text: searchText) { [ weak self] _ in
399
407
self ? . loadingSearchResults = false
408
+ self ? . messageSearchController? . delegate = self
409
+ self ? . updateMessageSearchResults ( )
400
410
}
401
411
}
402
412
@@ -420,7 +430,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
420
430
}
421
431
422
432
private func updateMessageSearchResults( ) {
423
- guard let messageSearchController = messageSearchController else {
433
+ guard let messageSearchController, searchType == . messages else {
424
434
return
425
435
}
426
436
@@ -433,7 +443,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
433
443
return ChannelSelectionInfo (
434
444
channel: channel,
435
445
message: message,
436
- searchType: . channels
446
+ searchType: . messages
437
447
)
438
448
}
439
449
DispatchQueue . main. async {
@@ -443,7 +453,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
443
453
}
444
454
445
455
private func updateChannelSearchResults( ) {
446
- guard let channelListSearchController = self . channelListSearchController else {
456
+ guard let channelListSearchController, searchType == . channels else {
447
457
return
448
458
}
449
459
0 commit comments