diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift index 3879e78d3..dbea6a17e 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift @@ -370,7 +370,11 @@ struct GroupChatInfoView: View { private func addOrEditWelcomeMessage() -> some View { NavigationLink { - GroupWelcomeView(groupId: groupInfo.groupId, groupInfo: $groupInfo) + GroupWelcomeView( + groupInfo: $groupInfo, + groupProfile: groupInfo.groupProfile, + welcomeText: groupInfo.groupProfile.description ?? "" + ) .navigationTitle("Welcome message") .navigationBarTitleDisplayMode(.large) } label: { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift b/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift index e5ff644a9..c69cc526d 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift @@ -11,10 +11,9 @@ import SimpleXChat struct GroupWelcomeView: View { @Environment(\.dismiss) var dismiss: DismissAction - @EnvironmentObject private var m: ChatModel - var groupId: Int64 @Binding var groupInfo: GroupInfo - @State private var welcomeText: String = "" + @State var groupProfile: GroupProfile + @State var welcomeText: String @State private var editMode = true @FocusState private var keyboardVisible: Bool @State private var showSaveDialog = false @@ -24,7 +23,7 @@ struct GroupWelcomeView: View { if groupInfo.canEdit { editorView() .modifier(BackButton { - if welcomeText == groupInfo.groupProfile.description || (welcomeText == "" && groupInfo.groupProfile.description == nil) { + if welcomeTextUnchanged() { dismiss() } else { showSaveDialog = true @@ -33,7 +32,6 @@ struct GroupWelcomeView: View { .confirmationDialog("Save welcome message?", isPresented: $showSaveDialog) { Button("Save and update group profile") { save() - dismiss() } Button("Exit without saving") { dismiss() } } @@ -47,8 +45,9 @@ struct GroupWelcomeView: View { } } .onAppear { - welcomeText = groupInfo.groupProfile.description ?? "" - keyboardVisible = true + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + keyboardVisible = true + } } } @@ -113,7 +112,11 @@ struct GroupWelcomeView: View { Button("Save and update group profile") { save() } - .disabled(welcomeText == groupInfo.groupProfile.description || (welcomeText == "" && groupInfo.groupProfile.description == nil)) + .disabled(welcomeTextUnchanged()) + } + + private func welcomeTextUnchanged() -> Bool { + welcomeText == groupInfo.groupProfile.description || (welcomeText == "" && groupInfo.groupProfile.description == nil) } private func save() { @@ -123,11 +126,13 @@ struct GroupWelcomeView: View { if welcome?.count == 0 { welcome = nil } - var groupProfileUpdated = groupInfo.groupProfile - groupProfileUpdated.description = welcome - groupInfo = try await apiUpdateGroup(groupId, groupProfileUpdated) - m.updateGroup(groupInfo) - welcomeText = welcome ?? "" + groupProfile.description = welcome + let gInfo = try await apiUpdateGroup(groupInfo.groupId, groupProfile) + await MainActor.run { + groupInfo = gInfo + ChatModel.shared.updateGroup(gInfo) + dismiss() + } } catch let error { logger.error("apiUpdateGroup error: \(responseError(error))") } @@ -137,6 +142,6 @@ struct GroupWelcomeView: View { struct GroupWelcomeView_Previews: PreviewProvider { static var previews: some View { - GroupWelcomeView(groupId: 1, groupInfo: Binding.constant(GroupInfo.sampleData)) + GroupProfileView(groupInfo: Binding.constant(GroupInfo.sampleData), groupProfile: GroupProfile.sampleData) } }