ask to delete unused invitation

This commit is contained in:
spaced4ndy 2023-12-04 13:00:43 +04:00
parent 230b5aeb92
commit 9e75e63962
3 changed files with 38 additions and 15 deletions

View File

@ -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

View File

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

View File

@ -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 {