From a551c0fcb8e4f5481c49d6d2b4a0ab2ab18081be Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 24 Mar 2023 11:32:42 -0500 Subject: [PATCH] add examples for onmounted --- examples/controll_focus.rs | 44 +++++++++++++++++++++++++ examples/read_size.rs | 57 +++++++++++++++++++++++++++++++++ examples/scroll_to_top.rs | 33 +++++++++++++++++++ packages/desktop/src/element.rs | 2 -- packages/desktop/src/lib.rs | 2 +- 5 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 examples/controll_focus.rs create mode 100644 examples/read_size.rs create mode 100644 examples/scroll_to_top.rs diff --git a/examples/controll_focus.rs b/examples/controll_focus.rs new file mode 100644 index 000000000..0f14a940b --- /dev/null +++ b/examples/controll_focus.rs @@ -0,0 +1,44 @@ +use std::rc::Rc; + +use dioxus::prelude::*; + +fn main() { + dioxus_desktop::launch(app); +} + +fn app(cx: Scope) -> Element { + let elements: &UseRef>> = use_ref(cx, || Vec::new()); + let running = use_state(cx, || true); + + use_future!(cx, |(elements, running)| async move { + let mut focused = 0; + if *running.current() { + loop { + tokio::time::sleep(std::time::Duration::from_millis(10)).await; + if let Some(element) = elements.read().get(focused) { + element.set_focus(true); + } else { + focused = 0; + } + focused += 1; + } + } + }); + + cx.render(rsx!( + div { + h1 { "Input Roulette" } + for i in 0..100 { + input { + value: "{i}", + onmounted: move |cx| { + elements.write().push(cx.inner().clone()); + }, + oninput: move |_| { + running.set(false); + } + } + } + } + )) +} diff --git a/examples/read_size.rs b/examples/read_size.rs new file mode 100644 index 000000000..be996e2dd --- /dev/null +++ b/examples/read_size.rs @@ -0,0 +1,57 @@ +use std::rc::Rc; + +use dioxus::{html::geometry::euclid::Rect, prelude::*}; + +fn main() { + dioxus_desktop::launch_cfg( + app, + dioxus_desktop::Config::default().with_custom_head( + r#" + +"# + .to_owned(), + ), + ); +} + +fn app(cx: Scope) -> Element { + let div_element: &UseRef>> = use_ref(cx, || None); + + let dimentions = use_ref(cx, || Rect::zero()); + + cx.render(rsx!( + div { + width: "50%", + height: "50%", + background_color: "red", + onmounted: move |cx| { + div_element.set(Some(cx.inner().clone())); + }, + "This element is {dimentions.read():?}" + } + + button { + onclick: move |_| { + to_owned![div_element, dimentions]; + async move { + if let Some(div) = div_element.read().as_ref() { + if let Ok(rect)=div.get_client_rect().await{ + dimentions.set(rect); + } + } + } + }, + "Read dimentions" + } + )) +} diff --git a/examples/scroll_to_top.rs b/examples/scroll_to_top.rs new file mode 100644 index 000000000..4eb38a451 --- /dev/null +++ b/examples/scroll_to_top.rs @@ -0,0 +1,33 @@ +use dioxus::prelude::*; + +fn main() { + dioxus_desktop::launch(app); +} + +fn app(cx: Scope) -> Element { + let header_element = use_ref(cx, || None); + + cx.render(rsx!( + div { + h1 { + onmounted: move |cx| { + header_element.set(Some(cx.inner().clone())); + }, + "Scroll to top example" + } + + for i in 0..100 { + div { "Item {i}" } + } + + button { + onclick: move |_| { + if let Some(header) = header_element.read().as_ref() { + header.scroll_to(ScrollBehavior::Smooth); + } + }, + "Scroll to top" + } + } + )) +} diff --git a/packages/desktop/src/element.rs b/packages/desktop/src/element.rs index e94a481c7..94db28f0b 100644 --- a/packages/desktop/src/element.rs +++ b/packages/desktop/src/element.rs @@ -88,12 +88,10 @@ impl RenderedElementBacking for DesktopElement { self.id.0, focus ); - println!("script: {}", script); let fut = self .query .new_query::(&script, &self.webview) .resolve(); - println!("fut"); Box::pin(async move { match fut.await { diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index 8e92d90aa..701c0e0bb 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -265,7 +265,7 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) EventData::Ipc(msg) if msg.method() == "query" => { let params = msg.params(); - if let Ok(result) = dbg!(serde_json::from_value::(params)) { + if let Ok(result) = serde_json::from_value::(params) { let view = webviews.get(&event.1).unwrap(); let query = view .dom