Skip to content

Commit

Permalink
Allow setting searchType dynamically in ChatChannelListViewModel
Browse files Browse the repository at this point in the history
  • Loading branch information
laevandus committed Dec 18, 2024
1 parent 5a1ec9a commit 89715f4
Showing 1 changed file with 17 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,16 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
}
}

private let searchType: ChannelListSearchType
/// The type for search results.
///
/// Setting a new value will reload search results.
@Published public var searchType: ChannelListSearchType {
didSet {
guard searchType != oldValue else { return }
performSearch()
}
}

/// The channel search controller which should be created only by ``performChannelSearch()``.
public var channelListSearchController: ChatChannelListController?
/// The message search controller which should be created only by ``performMessageSearch()``.
Expand All @@ -116,7 +125,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
@Published public var searchText = "" {
didSet {
if searchText != oldValue {
handleSearchTextChange()
performSearch()
}
}
}
Expand Down Expand Up @@ -337,7 +346,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
.filter { $0.id != chatClient.currentUserId }
}

private func handleSearchTextChange() {
private func performSearch() {
if searchText.isEmpty {
clearSearchResults()
return
Expand Down Expand Up @@ -393,10 +402,11 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
/// Creates a new message search controller, sets its delegate, and triggers the search operation.
open func performMessageSearch() {
messageSearchController = chatClient.messageSearchController()
messageSearchController?.delegate = self
loadingSearchResults = true
messageSearchController?.search(text: searchText) { [weak self] _ in
self?.loadingSearchResults = false
self?.messageSearchController?.delegate = self
self?.updateMessageSearchResults()
}
}

Expand All @@ -420,7 +430,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
}

private func updateMessageSearchResults() {
guard let messageSearchController = messageSearchController else {
guard let messageSearchController, searchType == .messages else {
return
}

Expand All @@ -433,7 +443,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
return ChannelSelectionInfo(
channel: channel,
message: message,
searchType: .channels
searchType: .messages
)
}
DispatchQueue.main.async {
Expand All @@ -443,7 +453,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController
}

private func updateChannelSearchResults() {
guard let channelListSearchController = self.channelListSearchController else {
guard let channelListSearchController, searchType == .channels else {
return
}

Expand Down

0 comments on commit 89715f4

Please sign in to comment.