From 7b83450a9ca77d45ac434ec377decedd563b7adc Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Wed, 3 May 2023 12:17:39 +0400 Subject: [PATCH] ios: AddGroupMembersView fixes (#2369) --- apps/ios/Shared/Model/SimpleXAPI.swift | 6 ------ .../Views/Chat/Group/AddGroupMembersView.swift | 18 +++++++++++++----- .../Views/Chat/Group/GroupChatInfoView.swift | 7 ++++++- .../Shared/Views/NewChat/AddGroupView.swift | 4 ++-- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 70f772286c..33d5b99ba8 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -953,12 +953,6 @@ func apiListMembers(_ groupId: Int64) async -> [GroupMember] { return [] } -func apiListMembersSync(_ groupId: Int64) -> [GroupMember] { - let r = chatSendCmdSync(.apiListMembers(groupId: groupId)) - if case let .groupMembers(_, group) = r { return group.members } - return [] -} - func filterMembersToAdd(_ ms: [GroupMember]) -> [Contact] { let memberContactIds = ms.compactMap{ m in m.memberCurrent ? m.memberContactId : nil } return ChatModel.shared.chats diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift index e2ce4fc64d..f52b7c327c 100644 --- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift @@ -10,13 +10,22 @@ import SwiftUI import SimpleXChat struct AddGroupMembersView: View { - @EnvironmentObject var chatModel: ChatModel @Environment(\.dismiss) var dismiss: DismissAction var chat: Chat + var groupInfo: GroupInfo + + var body: some View { + AddGroupMembersViewCommon(chat: chat, groupInfo: groupInfo, addedMembersCb: { _ in dismiss() }) + } +} + +struct AddGroupMembersViewCommon: View { + @EnvironmentObject var chatModel: ChatModel + var chat: Chat @State var groupInfo: GroupInfo var creatingGroup: Bool = false var showFooterCounter: Bool = true - var addedMembersCb: ((Set) -> Void)? = nil + var addedMembersCb: ((Set) -> Void) @State private var selectedContacts = Set() @State private var selectedRole: GroupMemberRole = .member @State private var alert: AddGroupMembersAlert? @@ -39,7 +48,7 @@ struct AddGroupMembersView: View { addGroupMembersView() .toolbar { ToolbarItem(placement: .navigationBarTrailing) { - Button ("Skip") { addedMembersCb?(selectedContacts) } + Button ("Skip") { addedMembersCb(selectedContacts) } } } } @@ -128,8 +137,7 @@ struct AddGroupMembersView: View { let member = try await apiAddMember(groupInfo.groupId, contactId, selectedRole) await MainActor.run { _ = ChatModel.shared.upsertGroupMember(groupInfo, member) } } - await MainActor.run { dismiss() } - if let cb = addedMembersCb { cb(selectedContacts) } + addedMembersCb(selectedContacts) } catch { let a = getErrorAlert(error, "Error adding member(s)") alert = .error(title: a.title, error: a.message) diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift index efbb3c1320..a6219175cc 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift @@ -142,7 +142,12 @@ struct GroupChatInfoView: View { NavigationLink { AddGroupMembersView(chat: chat, groupInfo: groupInfo) .onAppear { - ChatModel.shared.groupMembers = apiListMembersSync(groupInfo.groupId) + Task { + let groupMembers = await apiListMembers(groupInfo.groupId) + await MainActor.run { + ChatModel.shared.groupMembers = groupMembers + } + } } } label: { Label("Invite members", systemImage: "plus") diff --git a/apps/ios/Shared/Views/NewChat/AddGroupView.swift b/apps/ios/Shared/Views/NewChat/AddGroupView.swift index 998ae395bb..5b6c9b5dc3 100644 --- a/apps/ios/Shared/Views/NewChat/AddGroupView.swift +++ b/apps/ios/Shared/Views/NewChat/AddGroupView.swift @@ -24,14 +24,14 @@ struct AddGroupView: View { var body: some View { if let chat = chat, let groupInfo = groupInfo { - AddGroupMembersView( + AddGroupMembersViewCommon( chat: chat, groupInfo: groupInfo, creatingGroup: true, showFooterCounter: false ) { _ in dismiss() - DispatchQueue.main.async { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { m.chatId = groupInfo.id } }