Übersicht: Verbindungs-Label klarer, Verbindungszeilen anklickbar
Nutzerfrage: was bedeutet "Optionen" bei einer IP-Adresse verknüpften DHCP-Netzwerk-Zeile? Umbenannt zu "DHCP-Optionen". Zusätzlich: die "Verbindungen"-Zeilen im Detailpanel eines Knotens sind jetzt anklickbar (springt zum verbundenen Element, wie bei Linien-Klicks) und zeigen beim Hovern eine Klartext-Erklärung als Tooltip (OverviewStyle. explanation(for:), bereits für EdgeDetailView gebaut). 59 Unit-Tests grün. Manual.md/HANDOFF.md aktualisiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
This commit is contained in:
@@ -204,7 +204,10 @@ struct OverviewView: View {
|
||||
viewModel.selectedNodeID = nodeID
|
||||
}
|
||||
} else if let id = viewModel.selectedNodeID, let node = viewModel.graph.nodes.first(where: { $0.id == id }) {
|
||||
NodeDetailView(node: node, graph: viewModel.graph, onEdit: editNode)
|
||||
NodeDetailView(node: node, graph: viewModel.graph, onEdit: editNode) { nodeID in
|
||||
selectedEdge = nil
|
||||
viewModel.selectedNodeID = nodeID
|
||||
}
|
||||
} else {
|
||||
LegendView()
|
||||
}
|
||||
@@ -536,6 +539,7 @@ private struct NodeDetailView: View {
|
||||
let node: OverviewNode
|
||||
let graph: OverviewGraph
|
||||
let onEdit: (OverviewNode) -> Void
|
||||
let onSelectNode: (String) -> Void
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
@@ -578,12 +582,18 @@ private struct NodeDetailView: View {
|
||||
ForEach(connected) { edge in
|
||||
let otherID = edge.from == node.id ? edge.to : edge.from
|
||||
let otherTitle = graph.nodes.first(where: { $0.id == otherID })?.title ?? otherID
|
||||
Label(
|
||||
edge.label.map { "\(otherTitle) (\($0))" } ?? otherTitle,
|
||||
systemImage: edge.from == node.id ? "arrow.right" : "arrow.left"
|
||||
)
|
||||
.foregroundStyle(OverviewStyle.color(for: edge.kind))
|
||||
.font(.caption)
|
||||
Button {
|
||||
onSelectNode(otherID)
|
||||
} label: {
|
||||
Label(
|
||||
edge.label.map { "\(otherTitle) (\($0))" } ?? otherTitle,
|
||||
systemImage: edge.from == node.id ? "arrow.right" : "arrow.left"
|
||||
)
|
||||
.foregroundStyle(OverviewStyle.color(for: edge.kind))
|
||||
.font(.caption)
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.help(OverviewStyle.explanation(for: edge.kind))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ final class OverviewViewModel: ObservableObject {
|
||||
))
|
||||
let networkPart = address.split(separator: "/").first.map(String.init) ?? address
|
||||
if let addressID = networkToAddressID[networkPart] {
|
||||
edges.append(OverviewEdge(from: addressID, to: id, label: "Optionen", kind: .dhcp))
|
||||
edges.append(OverviewEdge(from: addressID, to: id, label: "DHCP-Optionen", kind: .dhcp))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user