tree.py 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. from typing import Callable, Optional
  2. from nicegui.events import ValueChangeEventArguments, handle_event
  3. from ..element import Element
  4. class Tree(Element):
  5. def __init__(self, nodes: list, *,
  6. node_key: str = 'id',
  7. label_key: str = 'label',
  8. children_key: str = 'children',
  9. on_select: Optional[Callable] = None) -> None:
  10. """Tree
  11. :param nodes: hierarchical list of node objects
  12. :param node_key: property name of each node object that holds its unique id (default: "id")
  13. :param label_key: property name of each node object that holds its label (default: "label")
  14. :param children_key: property name of each node object that holds its list of children (default: "children")
  15. :param on_click: callback which is invoked when the node selection changes
  16. """
  17. super().__init__('q-tree')
  18. self._props['nodes'] = nodes
  19. self._props['node-key'] = node_key
  20. self._props['label-key'] = label_key
  21. self._props['children-key'] = children_key
  22. self._props['selected'] = []
  23. def handle_selected(msg):
  24. handle_event(on_select, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
  25. self.on('update:selected', handle_selected)