From 9e75e63962d10ed5f4c7cd52d301eca961d57de2 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 4 Dec 2023 13:00:43 +0400 Subject: [PATCH] ask to delete unused invitation --- apps/ios/Shared/Model/ChatModel.swift | 16 ++++++++-- .../Views/NewChat/NewChatMenuButton.swift | 6 +++- .../Shared/Views/NewChat/NewChatView.swift | 31 ++++++++++++------- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 054aa08da..4a12a5037 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -87,8 +87,8 @@ final class ChatModel: ObservableObject { @Published var showCallView = false // remote desktop @Published var remoteCtrlSession: RemoteCtrlSession? - // currently showing invitation connection id - @Published var invitationConnId: String? + // currently showing invitation connection + @Published var showingInvitation: ShowingInvitation? // audio recording and playback @Published var stopPreviousRecPlay: URL? = nil // coordinates currently playing source @Published var draft: ComposeState? @@ -621,11 +621,16 @@ final class ChatModel: ObservableObject { } func dismissConnReqView(_ id: String) { - if id == invitationConnId { + if id == showingInvitation?.connId { + markShowingInvitationUsed() dismissAllSheets() } } + func markShowingInvitationUsed() { + showingInvitation?.connChatUsed = true + } + func removeChat(_ id: String) { withAnimation { chats.removeAll(where: { $0.id == id }) @@ -702,6 +707,11 @@ final class ChatModel: ObservableObject { } } +struct ShowingInvitation { + var connId: String + var connChatUsed: Bool +} + struct NTFContactRequest { var incognito: Bool var chatId: String diff --git a/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift b/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift index c3452ce18..830da644e 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift @@ -36,7 +36,11 @@ struct NewChatMenuButton: View { .scaledToFit() .frame(width: 24, height: 24) } - .sheet(item: $newChatMenuOption) { opt in + .sheet(item: $newChatMenuOption, onDismiss: { + if case .newContact = newChatMenuOption { + + } + }) { opt in switch opt { case .newContact: NewChatView(selection: .invite) case .newGroup: AddGroupView() diff --git a/apps/ios/Shared/Views/NewChat/NewChatView.swift b/apps/ios/Shared/Views/NewChat/NewChatView.swift index 6a820aa4d..92562766f 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatView.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatView.swift @@ -45,7 +45,6 @@ struct NewChatView: View { @State var selection: NewChatOption @State var showQRCodeScanner = false @State private var invitationUsed: Bool = false - @State private var connectionChatCreated: Bool = false @State private var contactConnection: PendingContactConnection? = nil @State private var connReqInvitation: String = "" @State private var creatingConnReq = false @@ -65,6 +64,7 @@ struct NewChatView: View { } } .padding() + .padding(.top) Picker("New chat", selection: $selection) { Label("Add contact", systemImage: "link") @@ -116,20 +116,28 @@ struct NewChatView: View { createInvitation(selection) } .onChange(of: invitationUsed) { used in - if used && !connectionChatCreated, - let conn = contactConnection { - m.updateContactConnection(conn) - connectionChatCreated = true + if used && !(m.showingInvitation?.connChatUsed ?? true) { + m.markShowingInvitationUsed() } } .onDisappear { - m.invitationConnId = nil - if !connectionChatCreated, + if !(m.showingInvitation?.connChatUsed ?? true), let conn = contactConnection { - Task { - try await apiDeleteChat(type: .contactConnection, id: conn.apiId) - } + AlertManager.shared.showAlert(Alert( + title: Text("Keep unused invitation?"), + message: Text("You can view invitation link again in connection details."), + primaryButton: .default(Text("Keep")) {}, + secondaryButton: .destructive(Text("Delete")) { + Task { + await deleteChat(Chat( + chatInfo: .contactConnection(contactConnection: conn), + chatItems: [] + )) + } + } + )) } + m.showingInvitation = nil } .alert(item: $alert) { a in switch(a) { @@ -165,9 +173,10 @@ struct NewChatView: View { let (r, apiAlert) = await apiAddContact(incognito: incognitoGroupDefault.get()) if let (connReq, pcc) = r { await MainActor.run { + m.updateContactConnection(pcc) + m.showingInvitation = ShowingInvitation(connId: pcc.id, connChatUsed: false) connReqInvitation = connReq contactConnection = pcc - m.invitationConnId = pcc.id } } else { await MainActor.run {