From 8fe6d460095bf86da5a9ad97f553f3d7a6f100e9 Mon Sep 17 00:00:00 2001 From: Blake McAnally Date: Mon, 15 Jul 2024 21:39:22 -0500 Subject: [PATCH] Fix node list routing in catalyst app by ensuring that selectedNode is cleared --- Meshtastic/Views/Nodes/NodeList.swift | 29 +++++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Meshtastic/Views/Nodes/NodeList.swift b/Meshtastic/Views/Nodes/NodeList.swift index 46caacda..4d7ec453 100644 --- a/Meshtastic/Views/Nodes/NodeList.swift +++ b/Meshtastic/Views/Nodes/NodeList.swift @@ -54,6 +54,13 @@ struct NodeList: View { ) var nodes: FetchedResults + var connectedNode: NodeInfoEntity? { + getNodeInfo( + id: bleManager.connectedPeripheral?.num ?? 0, + context: context + ) + } + @ViewBuilder func contextMenuActions( node: NodeInfoEntity, @@ -93,8 +100,6 @@ struct NodeList: View { var body: some View { NavigationSplitView(columnVisibility: $columnVisibility) { - let connectedNodeNum = Int(bleManager.connectedPeripheral?.num ?? 0) - let connectedNode = nodes.first(where: { $0.num == connectedNodeNum }) List(nodes, id: \.self, selection: $selectedNode) { node in NodeListItem( node: node, @@ -161,10 +166,7 @@ struct NodeList: View { if let node = selectedNode { NavigationStack { NodeDetail( - connectedNode: nodes.first(where: { - let connectedNodeNum = Int(bleManager.connectedPeripheral?.num ?? 0) - return $0.num == connectedNodeNum - }), + connectedNode: connectedNode, node: node, columnVisibility: columnVisibility ) @@ -188,7 +190,6 @@ struct NodeList: View { } ) } - } else { if #available (iOS 17, *) { ContentUnavailableView("select.node", systemImage: "flipphone") @@ -250,14 +251,20 @@ struct NodeList: View { await searchNodeList() } } + .onChange(of: router.navigationState) { _ in + // Handle deep link routing + if case .nodes(let selected) = router.navigationState { + self.selectedNode = selected.flatMap { + getNodeInfo(id: $0, context: context) + } + } else { + self.selectedNode = nil + } + } .onAppear { Task { await searchNodeList() } - // Handle deep link routing - if case .nodes(let selected) = router.navigationState, let selectedNodeNum = selected { - self.selectedNode = getNodeInfo(id: selectedNodeNum, context: context) - } } }