Skip to content

Commit af99bf0

Browse files
add missing file
1 parent 6de675a commit af99bf0

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

glue_jupyter/common/hooks.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from glue.viewers.common.viewer import Viewer
2+
from glue.viewers.common.state import State
3+
import react_ipywidgets as react
4+
5+
def use_echo_state(state: State, name):
6+
value, set_value = react.use_state(getattr(state, name), key=name)
7+
8+
def add_event_handler():
9+
def handler(new_value):
10+
set_value(new_value)
11+
12+
def cleanup():
13+
state.remove_callback(name, handler)
14+
15+
state.add_callback(name, handler)
16+
return cleanup
17+
18+
react.use_side_effect(add_event_handler)
19+
20+
def set_value_sync(new_value):
21+
setattr(
22+
state, name, new_value
23+
) # this will update us via add_event_handler, no need to call set_value
24+
25+
return value, set_value_sync
26+
27+
28+
def use_layer_watch(viewer: Viewer):
29+
# use a counter to force updates due to external state changes
30+
counter, set_counter = react.use_state(0)
31+
32+
def hookup():
33+
def handler():
34+
new_counter = counter + 1
35+
set_counter(new_counter)
36+
37+
def cleanup():
38+
viewer._layer_artist_container.change_callbacks.remove(handler)
39+
40+
viewer._layer_artist_container.on_changed(handler)
41+
return cleanup
42+
43+
react.use_side_effect(hookup)

0 commit comments

Comments
 (0)