From a9e189be9afa0e4105af035b97b21195ef3871cf Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Tue, 30 Jul 2024 20:57:36 -0700 Subject: [PATCH 1/2] Dismiss selected node after deleting it Dont allow deleting the connected node Hide 3 context menu items that need refactoring. --- Localizable.xcstrings | 3 + .../Helpers/Actions/DeleteNodeButton.swift | 77 +++++++++++-------- Meshtastic/Views/Nodes/NodeList.swift | 32 ++++---- 3 files changed, 64 insertions(+), 48 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index d0857465..fa57ae2f 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -5196,6 +5196,9 @@ }, "Delete Node" : { + }, + "Delete Node?" : { + }, "Description" : { diff --git a/Meshtastic/Views/Nodes/Helpers/Actions/DeleteNodeButton.swift b/Meshtastic/Views/Nodes/Helpers/Actions/DeleteNodeButton.swift index 247a4380..71c3a317 100644 --- a/Meshtastic/Views/Nodes/Helpers/Actions/DeleteNodeButton.swift +++ b/Meshtastic/Views/Nodes/Helpers/Actions/DeleteNodeButton.swift @@ -10,42 +10,55 @@ struct DeleteNodeButton: View { var connectedNode: NodeInfoEntity var node: NodeInfoEntity + + @Environment(\.dismiss) private var dismiss - @State - private var isPresentingAlert = false + @State private var isPresentingAlert = false - var body: some View { - Button(role: .destructive) { - isPresentingAlert = true - } label: { - Label { - Text("Delete Node") - } icon: { - Image(systemName: "trash") - .symbolRenderingMode(.multicolor) - } - } - .confirmationDialog( - "are.you.sure", - isPresented: $isPresentingAlert, - titleVisibility: .visible - ) { - Button("Delete Node", role: .destructive) { - guard let deleteNode = getNodeInfo( - id: node.num, - context: context - ) else { - Logger.data.error("Unable to find node info to delete node \(node.num)") - return + var body: some View { + if node.num != connectedNode.num { + Button(role: .destructive) { + isPresentingAlert = true + } label: { + Label { + Text("Delete Node") + } icon: { + Image(systemName: "trash") + .symbolRenderingMode(.multicolor) } - let success = bleManager.removeNode( - node: deleteNode, - connectedNodeNum: connectedNode.num - ) - if !success { - Logger.data.error("Failed to delete node \(deleteNode.user?.longName ?? "unknown".localized)") + } + .alert( + "are.you.sure", + isPresented: $isPresentingAlert + ) { + Button("OK") { }.keyboardShortcut(.defaultAction) + } message: { + Text("Delete Node?") + } + .confirmationDialog( + "are.you.sure", + isPresented: $isPresentingAlert, + titleVisibility: .visible + ) { + Button("Delete Node", role: .destructive) { + guard let deleteNode = getNodeInfo( + id: node.num, + context: context + ) else { + Logger.data.error("Unable to find node info to delete node \(node.num)") + return + } + let success = bleManager.removeNode( + node: deleteNode, + connectedNodeNum: connectedNode.num + ) + if !success { + Logger.data.error("Failed to delete node \(deleteNode.user?.longName ?? "unknown".localized)") + } else { + dismiss() + } } } } - } + } } diff --git a/Meshtastic/Views/Nodes/NodeList.swift b/Meshtastic/Views/Nodes/NodeList.swift index 4d7ec453..9d796a16 100644 --- a/Meshtastic/Views/Nodes/NodeList.swift +++ b/Meshtastic/Views/Nodes/NodeList.swift @@ -80,22 +80,22 @@ struct NodeList: View { ) } - if let connectedNode { - ExchangePositionsButton( - bleManager: bleManager, - node: node - ) - TraceRouteButton( - bleManager: bleManager, - node: node - ) - DeleteNodeButton( - bleManager: bleManager, - context: context, - connectedNode: connectedNode, - node: node - ) - } +// if let connectedNode { +// ExchangePositionsButton( +// bleManager: bleManager, +// node: node +// ) +// TraceRouteButton( +// bleManager: bleManager, +// node: node +// ) +// DeleteNodeButton( +// bleManager: bleManager, +// context: context, +// connectedNode: connectedNode, +// node: node +// ) +// } } var body: some View { From 73ffb056632c5e41d65cc2593720fb351f3d701d Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Wed, 31 Jul 2024 14:47:31 -0700 Subject: [PATCH 2/2] Hide just broken delete button --- Meshtastic/Views/Nodes/NodeList.swift | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Meshtastic/Views/Nodes/NodeList.swift b/Meshtastic/Views/Nodes/NodeList.swift index 9d796a16..ac9aa65e 100644 --- a/Meshtastic/Views/Nodes/NodeList.swift +++ b/Meshtastic/Views/Nodes/NodeList.swift @@ -80,22 +80,22 @@ struct NodeList: View { ) } -// if let connectedNode { -// ExchangePositionsButton( -// bleManager: bleManager, -// node: node -// ) -// TraceRouteButton( -// bleManager: bleManager, -// node: node -// ) + if let connectedNode { + ExchangePositionsButton( + bleManager: bleManager, + node: node + ) + TraceRouteButton( + bleManager: bleManager, + node: node + ) // DeleteNodeButton( // bleManager: bleManager, // context: context, // connectedNode: connectedNode, // node: node // ) -// } + } } var body: some View {