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()