Refactored DataGridsManager.py for better reading

This commit is contained in:
2026-02-20 23:32:11 +01:00
parent c49f28da26
commit 730f55d65b
6 changed files with 141 additions and 63 deletions

View File

@@ -12,6 +12,7 @@ from typing import Optional
from fasthtml.components import Div, Input, Span
from myfasthtml.controls.BaseCommands import BaseCommands
from myfasthtml.controls.IconsHelper import IconsHelper
from myfasthtml.controls.Keyboard import Keyboard
from myfasthtml.controls.helpers import mk
from myfasthtml.core.commands import Command, CommandTemplate
@@ -190,6 +191,8 @@ class TreeView(MultipleInstance):
if self.conf.icons:
self._state.icon_config = self.conf.icons
else:
self._state.icon_config = {"folder": "TreeViewFolder"}
def set_icon_config(self, config: dict[str, str]):
"""
@@ -344,7 +347,7 @@ class TreeView(MultipleInstance):
"""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
@@ -395,7 +398,7 @@ class TreeView(MultipleInstance):
"""Select a node."""
if node_id not in self._state.items:
raise ValueError(f"Node {node_id} does not exist")
# Cancel edit mode when selecting
self._state.editing = None
self._state.selected = node_id
@@ -446,6 +449,7 @@ class TreeView(MultipleInstance):
toggle = None
# Label or input for editing
icon = IconsHelper.get(self._state.icon_config.get(node.type, None))
if is_editing:
label_element = mk.mk(Input(
name="node_label",
@@ -453,18 +457,24 @@ class TreeView(MultipleInstance):
cls="mf-treenode-input input input-sm"
), command=CommandTemplate("TreeView.SaveRename", self.commands.save_rename, args=[node_id]))
else:
label_element = mk.mk(
label_element = mk.label(
Span(node.label, cls="mf-treenode-label text-sm"),
icon=icon,
enable_button=False,
command=self.commands.select_node(node_id)
)
offset = 20
if icon is not None:
offset += 25
# Node element
node_element = Div(
toggle,
label_element,
*([self._render_action_buttons(node_id)] if not is_editing else []),
cls=f"mf-treenode flex {'selected' if is_selected and not is_editing else ''}",
style=f"padding-left: {level * 20}px"
style=f"padding-left: {level * offset}px"
)
# Children (if expanded)