|
@@ -1,4 +1,4 @@
|
|
-from typing import Callable, Optional
|
|
|
|
|
|
+from typing import Any, Callable, Dict, Optional
|
|
|
|
|
|
from nicegui.events import ValueChangeEventArguments, handle_event
|
|
from nicegui.events import ValueChangeEventArguments, handle_event
|
|
|
|
|
|
@@ -11,7 +11,9 @@ class Tree(Element):
|
|
node_key: str = 'id',
|
|
node_key: str = 'id',
|
|
label_key: str = 'label',
|
|
label_key: str = 'label',
|
|
children_key: str = 'children',
|
|
children_key: str = 'children',
|
|
- on_select: Optional[Callable] = None) -> None:
|
|
|
|
|
|
+ on_select: Optional[Callable] = None,
|
|
|
|
+ on_expand: Optional[Callable] = None,
|
|
|
|
+ on_tick: Optional[Callable] = None) -> None:
|
|
"""Tree
|
|
"""Tree
|
|
|
|
|
|
Display hierarchical data using Quasar's `QTree <https://quasar.dev/vue-components/tree>`_ component.
|
|
Display hierarchical data using Quasar's `QTree <https://quasar.dev/vue-components/tree>`_ component.
|
|
@@ -23,6 +25,8 @@ class Tree(Element):
|
|
:param label_key: property name of each node object that holds its label (default: "label")
|
|
:param label_key: property name of each node object that holds its label (default: "label")
|
|
:param children_key: property name of each node object that holds its list of children (default: "children")
|
|
:param children_key: property name of each node object that holds its list of children (default: "children")
|
|
:param on_select: callback which is invoked when the node selection changes
|
|
:param on_select: callback which is invoked when the node selection changes
|
|
|
|
+ :param on_expand: callback which is invoked when the node expansion changes
|
|
|
|
+ :param on_tick: callback which is invoked when a node is ticked or unticked
|
|
"""
|
|
"""
|
|
super().__init__('q-tree')
|
|
super().__init__('q-tree')
|
|
self._props['nodes'] = nodes
|
|
self._props['nodes'] = nodes
|
|
@@ -30,7 +34,25 @@ class Tree(Element):
|
|
self._props['label-key'] = label_key
|
|
self._props['label-key'] = label_key
|
|
self._props['children-key'] = children_key
|
|
self._props['children-key'] = children_key
|
|
self._props['selected'] = []
|
|
self._props['selected'] = []
|
|
|
|
+ self._props['expanded'] = []
|
|
|
|
+ self._props['ticked'] = []
|
|
|
|
|
|
- def handle_selected(msg):
|
|
|
|
|
|
+ def update_prop(name: str, value: Any) -> None:
|
|
|
|
+ if self._props[name] != value:
|
|
|
|
+ self._props[name] = value
|
|
|
|
+ self.update()
|
|
|
|
+
|
|
|
|
+ def handle_selected(msg: Dict) -> None:
|
|
|
|
+ update_prop('selected', msg['args'])
|
|
handle_event(on_select, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
|
|
handle_event(on_select, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
|
|
self.on('update:selected', handle_selected)
|
|
self.on('update:selected', handle_selected)
|
|
|
|
+
|
|
|
|
+ def handle_expanded(msg: Dict) -> None:
|
|
|
|
+ update_prop('expanded', msg['args'])
|
|
|
|
+ handle_event(on_expand, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
|
|
|
|
+ self.on('update:expanded', handle_expanded)
|
|
|
|
+
|
|
|
|
+ def handle_ticked(msg: Dict) -> None:
|
|
|
|
+ update_prop('ticked', msg['args'])
|
|
|
|
+ handle_event(on_tick, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
|
|
|
|
+ self.on('update:ticked', handle_ticked)
|