From 0d3d2212c020a998bc64d6b06327fcb5d3f58c11 Mon Sep 17 00:00:00 2001 From: Diogo Date: Thu, 12 Dec 2024 14:26:47 +0000 Subject: [PATCH] only show preset when it has matches --- .../Shared/Views/ChatList/ChatListView.swift | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index aa7761f10a..806c85bf84 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -667,9 +667,34 @@ enum ChatTagFilter: Identifiable, Equatable { struct ChatTagsView: View { @EnvironmentObject var chatTagsModel: ChatTagsModel - + @EnvironmentObject var chatModel: ChatModel + + var presetTagFilters: [ChatTagFilter] { + get { + var tags: [ChatTagFilter] = [] + var filtersLeft = chatTagsModel.presetTags + for chat in chatModel.chats { + for filter in filtersLeft { + if case let .presetTag(_, _, filterFunction) = filter { + if filterFunction(chat.chatInfo) { + tags.append(filter) + break + } + } + } + + filtersLeft.removeAll { tags.contains($0) } + if filtersLeft.isEmpty { + break + } + } + + return tags + } + } + var body: some View { - let tags = chatTagsModel.presetTags + chatTagsModel.tags + let tags = presetTagFilters + chatTagsModel.tags HStack { ForEach(tags, id: \.id) { tag in let current = chatTagsModel.selectedTag == tag @@ -700,6 +725,9 @@ struct ChatTagsView: View { }.task { getChatTags() } + .onChange(of: chatModel.currentUser?.userId) { _ in + getChatTags() + } } private func getChatTags() {