Browse Source

fix color picker example

Evan Almloff 2 years ago
parent
commit
d8da8e4275
2 changed files with 15 additions and 7 deletions
  1. 3 1
      packages/tui/examples/colorpicker.rs
  2. 12 6
      packages/tui/src/dioxus.rs

+ 3 - 1
packages/tui/examples/colorpicker.rs

@@ -1,6 +1,7 @@
 use dioxus::core::RenderReturn;
 use dioxus::prelude::*;
 use dioxus_tui::query::Query;
+use dioxus_tui::DioxusElementToNodeId;
 use dioxus_tui::Size;
 
 fn main() {
@@ -11,6 +12,7 @@ fn app(cx: Scope) -> Element {
     let hue = use_state(cx, || 0.0);
     let brightness = use_state(cx, || 0.0);
     let tui_query: Query = cx.consume_context().unwrap();
+    let mapping: DioxusElementToNodeId = cx.consume_context().unwrap();
     // disable templates so that every node has an id and can be queried
     cx.render(rsx! {
         div{
@@ -19,7 +21,7 @@ fn app(cx: Scope) -> Element {
             onmousemove: move |evt| {
                 if let RenderReturn::Ready(node) = cx.root_node() {
                     if let Some(id) = node.root_ids.get(0){
-                        let node = tui_query.get(id);
+                        let node = tui_query.get(mapping.get_node_id(id).unwrap());
                         let Size{width, height} = node.size().unwrap();
                         let pos = evt.inner().element_coordinates();
                         hue.set((pos.x as f32/width as f32)*255.0);

+ 12 - 6
packages/tui/src/dioxus.rs

@@ -23,20 +23,26 @@ pub fn launch_cfg(app: Component<()>, cfg: Config) {
 
 pub fn launch_cfg_with_props<Props: 'static>(app: Component<Props>, props: Props, cfg: Config) {
     render(cfg, |rdom, taffy, event_tx| {
+        let dioxus_state = {
+            let mut rdom = rdom.write().unwrap();
+            DioxusState::create(&mut rdom)
+        };
+        let dioxus_state = Rc::new(RwLock::new(dioxus_state));
         let mut vdom = VirtualDom::new_with_props(app, props)
             .with_root_context(TuiContext { tx: event_tx })
             .with_root_context(Query {
                 rdom: rdom.clone(),
                 stretch: taffy.clone(),
+            })
+            .with_root_context(DioxusElementToNodeId {
+                mapping: dioxus_state.clone(),
             });
         let muts = vdom.rebuild();
         let mut rdom = rdom.write().unwrap();
-        let mut dioxus_state = DioxusState::create(&mut rdom);
-        dioxus_state.apply_mutations(&mut rdom, muts);
-        let dioxus_state = Rc::new(RwLock::new(dioxus_state));
-        vdom = vdom.with_root_context(DioxusElementToNodeId {
-            mapping: dioxus_state.clone(),
-        });
+        dioxus_state
+            .write()
+            .unwrap()
+            .apply_mutations(&mut rdom, muts);
         DioxusRenderer {
             vdom,
             dioxus_state,