File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments