Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/yew/src/html/component/scope.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ impl<COMP: Component> Scope<COMP> {
) {
let placeholder = {
let placeholder: Node = document().create_text_node("").into();
insert_node(&placeholder, &parent, next_sibling.get());
insert_node(&placeholder, &parent, &next_sibling.get());
node_ref.set(Some(placeholder.clone()));
VNode::VRef(placeholder)
};
Expand Down
12 changes: 11 additions & 1 deletion packages/yew/src/html/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub type Html = VNode;
/// ```
/// ## Relevant examples
/// - [Node Refs](https://github.com/yewstack/yew/tree/master/examples/node_refs)
#[derive(Debug, Default, Clone)]
#[derive(Default, Clone)]
pub struct NodeRef(Rc<RefCell<NodeRefInner>>);

impl PartialEq for NodeRef {
Expand All @@ -73,6 +73,16 @@ impl PartialEq for NodeRef {
}
}

impl std::fmt::Debug for NodeRef {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"NodeRef {{ references: {:?} }}",
self.get().map(|n| crate::utils::print_node(&n))
)
}
}

#[derive(PartialEq, Debug, Default, Clone)]
struct NodeRefInner {
node: Option<Node>,
Expand Down
10 changes: 10 additions & 0 deletions packages/yew/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,13 @@ impl<IN, OUT> IntoIterator for NodeSeq<IN, OUT> {
self.0.into_iter()
}
}

/// Print Node contents as a string for debugging purposes
pub fn print_node(n: &web_sys::Node) -> String {
use wasm_bindgen::JsCast;

match n.dyn_ref::<web_sys::Element>() {
Some(el) => el.outer_html(),
None => n.text_content().unwrap_or_default(),
}
}
4 changes: 2 additions & 2 deletions packages/yew/src/virtual_dom/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -353,10 +353,10 @@ pub(crate) trait VDiff {
) -> NodeRef;
}

pub(crate) fn insert_node(node: &Node, parent: &Element, next_sibling: Option<Node>) {
pub(crate) fn insert_node(node: &Node, parent: &Element, next_sibling: &Option<Node>) {
match next_sibling {
Some(next_sibling) => parent
.insert_before(&node, Some(&next_sibling))
.insert_before(&node, Some(next_sibling))
.expect("failed to insert tag before next sibling"),
None => parent.append_child(node).expect("failed to append child"),
};
Expand Down
3 changes: 1 addition & 2 deletions packages/yew/src/virtual_dom/vcomp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ impl VComp {
}
}

#[allow(unused)]
pub(crate) fn root_vnode(&self) -> Option<impl Deref<Target = VNode> + '_> {
self.scope.as_ref().and_then(|scope| scope.root_vnode())
}
Expand Down Expand Up @@ -250,7 +249,7 @@ impl PartialEq for VComp {

impl fmt::Debug for VComp {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("VComp")
write!(f, "VComp {{ root: {:?} }}", self.root_vnode().as_deref())
}
}

Expand Down
Loading