From 3e722f7c7fc5851b50da4ab31dc37e602dec154f Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Wed, 18 Dec 2024 13:42:15 +0200 Subject: [PATCH 1/2] Allow setting searchType dynamically in ChatChannelListViewModel --- CHANGELOG.md | 1 + .../ChatChannelListViewModel.swift | 24 +++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5cf3b681..d7b4e2753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### ✅ Added - Make `CreatePollView` public [#685](https://github.com/GetStream/stream-chat-swiftui/pull/685) +- Make `ChatChannelListViewModel.searchType` public and observable [#693](https://github.com/GetStream/stream-chat-swiftui/pull/693) - Allow customizing channel and message search in the `ChatChannelListViewModel` [#XYZ](ADD) - Allow overriding `ChatChannelListViewModel.performChannelSearch` and `ChatChannelListViewModel.performMessageSearch` - Make `ChatChannelListViewModel.channelListSearchController` and `ChatChannelListViewModel.messageSearchController` public diff --git a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift index c0e090565..ca892b583 100644 --- a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListViewModel.swift @@ -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()``. @@ -116,7 +125,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController @Published public var searchText = "" { didSet { if searchText != oldValue { - handleSearchTextChange() + performSearch() } } } @@ -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 @@ -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() } } @@ -420,7 +430,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController } private func updateMessageSearchResults() { - guard let messageSearchController = messageSearchController else { + guard let messageSearchController, searchType == .messages else { return } @@ -433,7 +443,7 @@ open class ChatChannelListViewModel: ObservableObject, ChatChannelListController return ChannelSelectionInfo( channel: channel, message: message, - searchType: .channels + searchType: .messages ) } DispatchQueue.main.async { @@ -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 } From 2783f6e93e4233fb782ea256c4c7c9688e0fa6bb Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Wed, 18 Dec 2024 14:07:42 +0200 Subject: [PATCH 2/2] Add missing link --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b4e2753..93714e07e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### ✅ Added - Make `CreatePollView` public [#685](https://github.com/GetStream/stream-chat-swiftui/pull/685) - Make `ChatChannelListViewModel.searchType` public and observable [#693](https://github.com/GetStream/stream-chat-swiftui/pull/693) -- Allow customizing channel and message search in the `ChatChannelListViewModel` [#XYZ](ADD) +- Allow customizing channel and message search in the `ChatChannelListViewModel` [#690](https://github.com/GetStream/stream-chat-swiftui/pull/690) - Allow overriding `ChatChannelListViewModel.performChannelSearch` and `ChatChannelListViewModel.performMessageSearch` - Make `ChatChannelListViewModel.channelListSearchController` and `ChatChannelListViewModel.messageSearchController` public ### 🐞 Fixed