From c49f28da26cca7787e8e06586bbdeca468663a42 Mon Sep 17 00:00:00 2001 From: Kodjo Sossouvi Date: Fri, 20 Feb 2026 22:06:23 +0100 Subject: [PATCH] minor updates --- src/myfasthtml/controls/DataGridsManager.py | 2 +- src/myfasthtml/controls/TreeView.py | 5 ++-- tests/controls/test_treeview.py | 32 ++++++++++++--------- 3 files changed, 22 insertions(+), 17 deletions(-) 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