diff --git a/examples/hello_world.rs b/examples/hello_world.rs index 8e9cc45..c1eebf7 100644 --- a/examples/hello_world.rs +++ b/examples/hello_world.rs @@ -1,4 +1,4 @@ -use leptos::{ev::keydown, html::Div, *}; +use leptos::{ev::keydown, *}; use leptos_use::use_event_listener; use lerni::*; @@ -23,7 +23,7 @@ pub fn Counter() -> impl IntoView { let node_ref = create_node_ref(); _ = use_event_listener(document().body(), keydown, move |e| { - if is_slide_visible(&node_ref) { + if is_active_slide(node_ref) { if e.key() == "Enter" { set_counter.set(counter.get() + 1); } else if e.key() == "Escape" && counter.get() > 0 { @@ -32,31 +32,19 @@ pub fn Counter() -> impl IntoView { } }); - let on_click = move |_| { - let panel_item_refs: Option>> = use_context(); - if let Some(panel_item_refs) = panel_item_refs { - let slide_number = slide_number(&node_ref); - if let Some(n) = slide_number { - let panel_item_ref = panel_item_refs.get(n); - if let Some(panel_item_ref) = panel_item_ref { - if let Some(e) = panel_item_ref.get() { - _ = e.inner_html(""); - } - } - } + create_effect(move |_| { + if let Some(el) = node_ref.get() { + let panel_item = + view! { }; + _ = el.on_mount(move |_| mount_on_panel(node_ref, panel_item)); } - }; + }); view! { - - - - + } } diff --git a/src/utils.rs b/src/utils.rs index 9524f3e..57d2c4c 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -70,8 +70,8 @@ pub mod keys { pub const DIGIT_9: u32 = 57; } -/// Check whether a slide is visible. -pub fn is_slide_visible(node_ref: &NodeRef
) -> bool { +/// Check whether a slide is active. +pub fn is_active_slide(node_ref: NodeRef
) -> bool { if let Some(node) = node_ref.get() { if let Some(parent) = node.parent_element() { return parent.get_attribute("hidden").is_none(); @@ -82,8 +82,8 @@ pub fn is_slide_visible(node_ref: &NodeRef
) -> bool { } /// Check whether a slide is visible. -pub fn slide_number(node_ref: &NodeRef
) -> Option { - if let Some(node) = node_ref.get() { +pub fn slide_number(node_ref: NodeRef
) -> Option { + if let Some(node) = node_ref.get_untracked() { if let Some(parent) = node.parent_element() { return parent.get_attribute("number").and_then(|n| n.parse().ok()); } @@ -91,3 +91,17 @@ pub fn slide_number(node_ref: &NodeRef
) -> Option { None } + +/// Mount a child view on a panel. +pub fn mount_on_panel(node_ref: NodeRef
, item: impl IntoView) { + let panel_item_refs: Option>> = use_context(); + if let Some(panel_item_refs) = panel_item_refs { + if let Some(n) = slide_number(node_ref) { + if let Some(panel_item_ref) = panel_item_refs.get(n) { + if let Some(el) = panel_item_ref.get_untracked() { + _ = el.child(item); + } + } + } + } +}