Skip to content

Commit 0e26945

Browse files
authored
Allow setting searchType dynamically in ChatChannelListViewModel (#693)
1 parent 5a1ec9a commit 0e26945

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
### ✅ Added
77
- Make `CreatePollView` public [#685](https://github.com/GetStream/stream-chat-swiftui/pull/685)
8-
- Allow customizing channel and message search in the `ChatChannelListViewModel` [#XYZ](ADD)
8+
- Make `ChatChannelListViewModel.searchType` public and observable [#693](https://github.com/GetStream/stream-chat-swiftui/pull/693)
9+
- Allow customizing channel and message search in the `ChatChannelListViewModel` [#690](https://github.com/GetStream/stream-chat-swiftui/pull/690)
910
- Allow overriding `ChatChannelListViewModel.performChannelSearch` and `ChatChannelListViewModel.performMessageSearch`
1011
- Make `ChatChannelListViewModel.channelListSearchController` and `ChatChannelListViewModel.messageSearchController` public
1112
### 🐞 Fixed

Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)