Skip to content

Commit 58a9ade

Browse files
committed
fix: remove node with edge instances
1 parent 09aab62 commit 58a9ade

2 files changed

Lines changed: 27 additions & 3 deletions

File tree

src/panel_reactflow/base.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2219,7 +2219,12 @@ def remove_node(self, node_id: str) -> None:
22192219
"""
22202220
removed_node = next((node for node in self.nodes if self._node_id(node) == node_id), None)
22212221
nodes = [node for node in self.nodes if self._node_id(node) != node_id]
2222-
removed_edges = [edge for edge in self.edges if edge.get("source") == node_id or edge.get("target") == node_id]
2222+
removed_edges = [
2223+
edge
2224+
for edge in self.edges
2225+
if (edge.source if isinstance(edge, Edge) else edge.get("source")) == node_id
2226+
or (edge.target if isinstance(edge, Edge) else edge.get("target")) == node_id
2227+
]
22232228
self.nodes = nodes
22242229
if removed_edges:
22252230
remaining_edges = [edge for edge in self.edges if edge not in removed_edges]
@@ -2229,15 +2234,15 @@ def remove_node(self, node_id: str) -> None:
22292234
{
22302235
"type": "node_deleted",
22312236
"node_id": node_id,
2232-
"deleted_edges": [edge.get("id") for edge in removed_edges],
2237+
"deleted_edges": [self._edge_id(edge) for edge in removed_edges],
22332238
},
22342239
)
22352240
if isinstance(removed_node, Node):
22362241
removed_node.flow = None
22372242
payload = {
22382243
"type": "node_deleted",
22392244
"node_id": node_id,
2240-
"deleted_edges": [edge.get("id") for edge in removed_edges],
2245+
"deleted_edges": [self._edge_id(edge) for edge in removed_edges],
22412246
}
22422247
self._invoke_node_hook(removed_node, "on_delete", payload)
22432248
self._invoke_node_hook(removed_node, "on_event", payload)

tests/test_api.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,3 +847,22 @@ def test_mixed_edgespec_and_dict() -> None:
847847
assert isinstance(flow.edges[1], dict)
848848
assert flow.edges[0]["id"] == "e1"
849849
assert flow.edges[1]["id"] == "e2"
850+
851+
852+
def test_remove_node_with_edge_instances() -> None:
853+
nodes = [
854+
Node(id="a", position={"x": 0, "y": 0}, label="Node A"),
855+
Node(id="b", position={"x": 250, "y": 0}, label="Node B"),
856+
Node(id="c", position={"x": 125, "y": 150}, label="Node C"),
857+
]
858+
edges = [
859+
Edge(id="e1", source="a", target="c"),
860+
Edge(id="e2", source="b", target="c"),
861+
]
862+
flow = ReactFlow(nodes=nodes, edges=edges)
863+
864+
flow.remove_node("a")
865+
assert len(flow.nodes) == 2
866+
assert all(n.id != "a" for n in flow.nodes)
867+
assert len(flow.edges) == 1
868+
assert flow.edges[0].id == "e2"

0 commit comments

Comments
 (0)