Skip to content

Commit 284f8d6

Browse files
Handle aiidalab#921
1 parent 12a3c32 commit 284f8d6

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

src/aiidalab_qe/app/result/__init__.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
from aiida.engine import ProcessState
55
from aiidalab_widgets_base import (
6-
AiidaNodeViewWidget,
76
ProcessMonitor,
87
ProcessNodesTreeWidget,
98
WizardAppWidgetStep,
@@ -36,6 +35,8 @@ def __init__(self, model: ResultsModel, **kwargs):
3635

3736
self.rendered = False
3837

38+
self.node_views = {} # keep track of the node views
39+
3940
def render(self):
4041
if self.rendered:
4142
return
@@ -45,18 +46,14 @@ def render(self):
4546
(self._model, "process_uuid"),
4647
(self.process_tree, "value"),
4748
)
48-
49-
self.node_view = AiidaNodeViewWidget(layout={"width": "auto", "height": "auto"})
50-
ipw.dlink(
51-
(self.process_tree, "selected_nodes"),
52-
(self.node_view, "node"),
53-
transform=lambda nodes: nodes[0] if nodes else None,
49+
self.process_tree.observe(
50+
self._on_node_selection_change,
51+
"selected_nodes",
5452
)
5553

5654
self.process_status = ipw.VBox(
5755
children=[
5856
self.process_tree,
59-
self.node_view,
6057
],
6158
)
6259

@@ -148,6 +145,9 @@ def _on_process_change(self, _):
148145
self._update_kill_button_layout()
149146
self._update_clean_scratch_button_layout()
150147

148+
def _on_node_selection_change(self, change):
149+
self._update_node_view(change["new"])
150+
151151
def _on_kill_button_click(self, _):
152152
self._model.kill_process()
153153
self._update_kill_button_layout()
@@ -160,6 +160,31 @@ def _on_clean_scratch_button_click(self, _):
160160
self._model.clean_remote_data()
161161
self._update_clean_scratch_button_layout()
162162

163+
def _update_node_view(self, nodes):
164+
"""Update the node view based on the selected nodes.
165+
166+
parameters
167+
----------
168+
`nodes`: `list`
169+
List of selected nodes.
170+
"""
171+
from aiidalab_widgets_base.viewers import viewer
172+
173+
if not nodes:
174+
return
175+
# only show the first selected node
176+
node = nodes[0]
177+
# check if the viewer is already added
178+
if node.uuid in self.node_views:
179+
node_view = self.node_views[node.uuid]
180+
else:
181+
node_view = viewer(node)
182+
self.node_views[node.uuid] = node_view
183+
self.process_status.children = [
184+
self.process_tree,
185+
node_view,
186+
]
187+
163188
def _update_kill_button_layout(self):
164189
if not self.rendered:
165190
return

0 commit comments

Comments
 (0)