From d0870591532cbf8d60709d8ce2f62cb3520c9d38 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Wed, 7 May 2025 07:37:17 +0000 Subject: [PATCH] ios: close support chat for invitee when accepted (#5873) --- apps/ios/Shared/Model/ChatModel.swift | 1 + apps/ios/Shared/Model/SimpleXAPI.swift | 8 +++++++- apps/ios/Shared/Views/Chat/ChatView.swift | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 76b71f0117..d247ac9ebd 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -387,6 +387,7 @@ final class ChatModel: ObservableObject { // ItemsModel for secondary chat view (such as support scope chat), as opposed to ItemsModel.shared used for primary chat @Published var secondaryIM: ItemsModel? = nil + @Published var secondaryPendingInviteeChatOpened = false static var ok: Bool { ChatModel.shared.chatDbStatus == .ok } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 969661fe6c..6e704daaa5 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -2285,11 +2285,17 @@ func processReceivedMsg(_ res: ChatEvent) async { } } case let .userJoinedGroup(user, groupInfo): - // TODO [knocking] close support scope for this group if it's currently opened if active(user) { await MainActor.run { m.updateGroup(groupInfo) } + if m.chatId == groupInfo.id, + case .memberSupport(nil) = m.secondaryIM?.groupScopeInfo { + await MainActor.run { + m.secondaryPendingInviteeChatOpened = false + m.secondaryIM = nil + } + } } case let .joinedGroupMember(user, groupInfo, member): if active(user) { diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 2dcac773eb..e6df139569 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -234,6 +234,7 @@ struct ChatView: View { groupInfo.membership.memberPending { let secIM = ItemsModel(secondaryIMFilter: .groupChatScopeContext(groupScopeInfo: userSupportScopeInfo)) secIM.loadOpenChat(chat.id) { + chatModel.secondaryPendingInviteeChatOpened = true showUserSupportChatSheet = true } } @@ -268,6 +269,11 @@ struct ChatView: View { dismiss() } } + .onChange(of: chatModel.secondaryPendingInviteeChatOpened) { opened in + if im.secondaryIMFilter != nil && !opened { + dismiss() + } + } .onChange(of: chatModel.openAroundItemId) { openAround in if let openAround { closeSearch()