diff --git a/docs/guide/src/interactivity/index.md b/docs/guide/src/interactivity/index.md index 02c39b5b1..670ca5a40 100644 --- a/docs/guide/src/interactivity/index.md +++ b/docs/guide/src/interactivity/index.md @@ -64,7 +64,7 @@ The most common hook you'll use for storing state is `use_state`. `use_state` pr ```rust fn App(cx: Scope)-> Element { - let (post, set_post) = use_state(&cx, || { + let post = use_state(&cx, || { PostData { id: Uuid::new_v4(), score: 10, @@ -112,11 +112,11 @@ For example, let's say we provide a button to generate a new post. Whenever the ```rust fn App(cx: Scope)-> Element { - let (post, set_post) = use_state(&cx, || PostData::new()); + let post = use_state(&cx, || PostData::new()); cx.render(rsx!{ button { - onclick: move |_| set_post(PostData::random()) + onclick: move |_| post.set(PostData::random()) "Generate a random post" } Post { props: &post } @@ -141,19 +141,19 @@ We can use tasks in our components to build a tiny stopwatch that ticks every se ```rust fn App(cx: Scope)-> Element { - let (elapsed, set_elapsed) = use_state(&cx, || 0); - - use_future(&cx, || { - to_owned![set_elapsed]; // explicitly capture this hook for use in async + let elapsed = use_state(&cx, || 0); + + use_future(&cx, (), |()| { + to_owned![elapsed]; // explicitly capture this hook for use in async async move { loop { - TimeoutFuture::from_ms(1000).await; - set_elapsed.modify(|i| i + 1) + gloo_timers::future::TimeoutFuture::new(1_000).await; + elapsed.modify(|i| i + 1) } } }); - rsx!(cx, div { "Current stopwatch time: {sec_elapsed}" }) + rsx!(cx, div { "Current stopwatch time: {elapsed}" }) } ``` diff --git a/docs/reference/src/platforms/desktop.md b/docs/reference/src/platforms/desktop.md index 18393f132..985fbe6d9 100644 --- a/docs/reference/src/platforms/desktop.md +++ b/docs/reference/src/platforms/desktop.md @@ -11,7 +11,7 @@ Getting Set up with Dioxus-Desktop is quite easy. Make sure you have Rust and Ca ```shell $ cargo new --bin demo -$ cd app +$ cd demo ``` Add Dioxus with the `desktop` feature: diff --git a/packages/core/src/properties.rs b/packages/core/src/properties.rs index e81fc52a2..e138acaa6 100644 --- a/packages/core/src/properties.rs +++ b/packages/core/src/properties.rs @@ -33,7 +33,7 @@ impl<'a, const A: bool> FragmentBuilder<'a, A> { /// fn App(cx: Scope) -> Element { /// cx.render(rsx!{ /// CustomCard { -/// h1 {}2 +/// h1 {} /// p {} /// } /// }) diff --git a/packages/core/src/virtual_dom.rs b/packages/core/src/virtual_dom.rs index 3614eed00..19e23df41 100644 --- a/packages/core/src/virtual_dom.rs +++ b/packages/core/src/virtual_dom.rs @@ -591,7 +591,7 @@ impl VirtualDom { /// /// *value.borrow_mut() = "goodbye"; /// - /// let edits = dom.diff(); + /// let edits = dom.hard_diff(ScopeId(0)); /// ``` pub fn hard_diff(&mut self, scope_id: ScopeId) -> Mutations { let mut diff_machine = DiffState::new(&self.scopes); diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index 3d4bf0b26..d6d436a09 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -212,7 +212,12 @@ pub(super) fn handler( log::warn!("Open print modal failed: {e}"); } } - DevTool => webview.open_devtools(), + DevTool => { + #[cfg(debug_assertions)] + webview.open_devtools(); + #[cfg(not(debug_assertions))] + log::warn!("Devtools are disabled in release builds"); + } Eval(code) => { if let Err(e) = webview.evaluate_script(code.as_str()) { diff --git a/packages/interpreter/src/interpreter.js b/packages/interpreter/src/interpreter.js index a908ad74c..0c129efda 100644 --- a/packages/interpreter/src/interpreter.js +++ b/packages/interpreter/src/interpreter.js @@ -140,7 +140,9 @@ export class Interpreter { RemoveAttribute(root, field, ns) { const name = field; const node = this.nodes[root]; - if (ns !== null || ns !== undefined) { + if (ns == "style") { + node.style.removeProperty(name); + } else if (ns !== null || ns !== undefined) { node.removeAttributeNS(ns, name); } else if (name === "value") { node.value = ""; diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index 94d66460f..ebcdefbcc 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -178,7 +178,7 @@ fn virtual_event_from_websys_event( }) } "keydown" | "keypress" | "keyup" => Arc::new(KeyboardData::from(event)), - "focus" | "blur" => Arc::new(FocusData {}), + "focus" | "blur" | "focusout" | "focusin" => Arc::new(FocusData {}), // todo: these handlers might get really slow if the input box gets large and allocation pressure is heavy // don't have a good solution with the serialized event problem @@ -258,9 +258,9 @@ fn virtual_event_from_websys_event( Arc::new(FormData { value, values }) } - "click" | "contextmenu" | "doubleclick" | "drag" | "dragend" | "dragenter" | "dragexit" - | "dragleave" | "dragover" | "dragstart" | "drop" | "mousedown" | "mouseenter" - | "mouseleave" | "mousemove" | "mouseout" | "mouseover" | "mouseup" => { + "click" | "contextmenu" | "dblclick" | "doubleclick" | "drag" | "dragend" | "dragenter" + | "dragexit" | "dragleave" | "dragover" | "dragstart" | "drop" | "mousedown" + | "mouseenter" | "mouseleave" | "mousemove" | "mouseout" | "mouseover" | "mouseup" => { Arc::new(MouseData::from(event)) } "pointerdown" | "pointermove" | "pointerup" | "pointercancel" | "gotpointercapture" @@ -305,6 +305,8 @@ fn event_name_from_typ(typ: &str) -> &'static str { "keypress" => "keypress", "keyup" => "keyup", "focus" => "focus", + "focusout" => "focusout", + "focusin" => "focusin", "blur" => "blur", "change" => "change", "input" => "input", @@ -314,6 +316,7 @@ fn event_name_from_typ(typ: &str) -> &'static str { "click" => "click", "contextmenu" => "contextmenu", "doubleclick" => "doubleclick", + "dblclick" => "dblclick", "drag" => "drag", "dragend" => "dragend", "dragenter" => "dragenter", @@ -374,8 +377,8 @@ fn event_name_from_typ(typ: &str) -> &'static str { "volumechange" => "volumechange", "waiting" => "waiting", "toggle" => "toggle", - _ => { - panic!("unsupported event type") + a => { + panic!("unsupported event type {:?}", a); } } }