From 8d685f40b7e0ef6521c60310d8687291e9b9c48a Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jan 2022 02:09:02 -0500 Subject: [PATCH 1/3] feat: handle bool attrs properly --- packages/desktop/src/index.js | 6 +++++- packages/web/src/dom.rs | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/desktop/src/index.js b/packages/desktop/src/index.js index b4f673bf3..ca08863cd 100644 --- a/packages/desktop/src/index.js +++ b/packages/desktop/src/index.js @@ -369,7 +369,11 @@ class Interpreter { node.innerHTML = value; break; default: - node.setAttribute(name, value); + if (value == "false") { + node.removeAttribute(name); + } else { + node.setAttribute(name, value); + } } } } diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index 6de9247f5..280e285a5 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -347,7 +347,15 @@ impl WebsysDom { fallback(); } } - _ => fallback(), + _ => { + if value == "false" { + if let Some(el) = node.dyn_ref::() { + let _ = el.remove_attribute(name); + } + } else { + fallback(); + } + } } } } From 3d90a2616d71bc1f6d40d3f7eb2a9eea7facdb31 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jan 2022 02:10:47 -0500 Subject: [PATCH 2/3] feat: add disabled example --- examples/disabled.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 examples/disabled.rs diff --git a/examples/disabled.rs b/examples/disabled.rs new file mode 100644 index 000000000..e4ca7d9ee --- /dev/null +++ b/examples/disabled.rs @@ -0,0 +1,23 @@ +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(app); +} + +fn app(cx: Scope) -> Element { + let disabled = use_state(&cx, || false); + + cx.render(rsx! { + div { + button { + onclick: move |_| disabled.set(!disabled.get()), + "click to " [if *disabled {"enable"} else {"disable"} ] " the lower button" + } + + button { + disabled: "{disabled}", + "lower button" + } + } + }) +} From 21232285d9d84168d9003969ddd254fc22951e4b Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jan 2022 02:14:05 -0500 Subject: [PATCH 3/3] fix: add exclusion list --- packages/desktop/src/index.js | 3 ++- packages/web/src/dom.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/desktop/src/index.js b/packages/desktop/src/index.js index ca08863cd..931eb7d32 100644 --- a/packages/desktop/src/index.js +++ b/packages/desktop/src/index.js @@ -369,7 +369,8 @@ class Interpreter { node.innerHTML = value; break; default: - if (value == "false") { + // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364 + if (value == "false" && name != "capture" && name != "download") { node.removeAttribute(name); } else { node.setAttribute(name, value); diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index 280e285a5..e9cf66af2 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -348,7 +348,8 @@ impl WebsysDom { } } _ => { - if value == "false" { + // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364 + if value == "false" && ((name != "capture") && (name != "download")) { if let Some(el) = node.dyn_ref::() { let _ = el.remove_attribute(name); }