diff --git a/src/myfasthtml/controls/DataGridsManager.py b/src/myfasthtml/controls/DataGridsManager.py
index f5e4fb1..14c0899 100644
--- a/src/myfasthtml/controls/DataGridsManager.py
+++ b/src/myfasthtml/controls/DataGridsManager.py
@@ -320,7 +320,7 @@ class DataGridsManager(SingleInstance, DatagridMetadataProvider):
def _mk_tree(self):
tree = TreeView(self, _id="-treeview")
for element in self._state.elements:
- parent_id = tree.ensure_path(element.namespace)
+ parent_id = tree.ensure_path(element.namespace, node_type="folder")
tree.add_node(TreeNode(id=element.document_id,
label=element.name,
type=element.type,
diff --git a/src/myfasthtml/controls/TreeView.py b/src/myfasthtml/controls/TreeView.py
index df99050..87bc06c 100644
--- a/src/myfasthtml/controls/TreeView.py
+++ b/src/myfasthtml/controls/TreeView.py
@@ -341,10 +341,11 @@ class TreeView(MultipleInstance):
return self
def _start_rename(self, node_id: str):
- """Start renaming a node (sets editing state)."""
+ """Start renaming a node (sets editing state and selection)."""
if node_id not in self._state.items:
raise ValueError(f"Node {node_id} does not exist")
-
+
+ self._state.selected = node_id
self._state.editing = node_id
return self
diff --git a/tests/controls/test_treeview.py b/tests/controls/test_treeview.py
index 76b1f5b..c64c374 100644
--- a/tests/controls/test_treeview.py
+++ b/tests/controls/test_treeview.py
@@ -570,8 +570,8 @@ class TestTreeviewBehaviour:
assert first_id == second_id
assert tree_view._state.items[first_id].label == "folder2"
- def test_i_can_add_the_same_node_id_twice(self, root_instance):
- """Test that adding a node with the same ID as an existing node raises ValueError."""
+ def test_adding_node_with_duplicate_id_replaces_existing(self, root_instance):
+ """Test that adding a node with duplicate ID replaces the existing node."""
tree_view = TreeView(root_instance)
node1 = TreeNode(label="Node", type="folder", id="existing_id")
@@ -580,43 +580,47 @@ class TestTreeviewBehaviour:
node2 = TreeNode(label="Other Node", type="folder", id="existing_id")
tree_view.add_node(node2)
- assert len(tree_view._state.items) == 1, "Node should not have been added to items"
- assert tree_view._state.items[node1.id] == node2, "Node should not have been replaced"
-
+ # Only one node should exist
+ assert len(tree_view._state.items) == 1, "Should have only one node with this ID"
+
+ # The second node should have replaced the first
+ assert tree_view._state.items["existing_id"] == node2, "Second node should replace the first"
+ assert tree_view._state.items["existing_id"].label == "Other Node", "Replacement node should have new label"
+
def test_selecting_node_cancels_edit_mode(self, root_instance):
"""Test that selecting a node cancels any active edit mode."""
tree_view = TreeView(root_instance)
node1 = TreeNode(label="Node 1", type="folder")
node2 = TreeNode(label="Node 2", type="folder")
-
+
tree_view.add_node(node1)
tree_view.add_node(node2)
-
+
# Start editing node1
tree_view._start_rename(node1.id)
assert tree_view._state.editing == node1.id
-
+
# Select node2
tree_view._select_node(node2.id)
-
+
# Edit mode should be cancelled
assert tree_view._state.editing is None
assert tree_view._state.selected == node2.id
-
+
def test_selecting_same_editing_node_cancels_edit_mode(self, root_instance):
"""Test that selecting the same node being edited cancels edit mode."""
tree_view = TreeView(root_instance)
node = TreeNode(label="Node", type="folder")
-
+
tree_view.add_node(node)
-
+
# Start editing the node
tree_view._start_rename(node.id)
assert tree_view._state.editing == node.id
-
+
# Select the same node
tree_view._select_node(node.id)
-
+
# Edit mode should be cancelled
assert tree_view._state.editing is None
assert tree_view._state.selected == node.id