From aec5cd9dfa346b59725e872827f3bb3bb1b7752a Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Sat, 26 Mar 2022 12:53:24 -0500 Subject: [PATCH 1/2] fix lazynode diff bug adding children --- packages/core/src/diff.rs | 1 + tests/diffing.rs | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/core/src/diff.rs b/packages/core/src/diff.rs index 5682772be..768fbe3b9 100644 --- a/packages/core/src/diff.rs +++ b/packages/core/src/diff.rs @@ -424,6 +424,7 @@ impl<'b> DiffState<'b> { (0, 0) => {} (0, _) => { let created = self.create_children(new.children); + self.mutations.push_root(root); self.mutations.append_children(created as u32); } (_, _) => self.diff_children(old.children, new.children), diff --git a/tests/diffing.rs b/tests/diffing.rs index f11f62c42..843d76138 100644 --- a/tests/diffing.rs +++ b/tests/diffing.rs @@ -730,3 +730,28 @@ fn remove_list_nokeyed() { ] ); } + +#[test] +fn add_nested_elements() { + let vdom = new_dom(); + + let (_create, change) = vdom.diff_lazynodes( + rsx! { + div{} + }, + rsx! { + div{ + div{} + } + }, + ); + + assert_eq!( + change.edits, + [ + CreateElement { root: 2, tag: "div" }, + PushRoot { root: 1 }, + AppendChildren { many: 1 }, + ] + ); +} From 43b5a230f0bf59128ec73dc6ef0d23719a54325b Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Sat, 26 Mar 2022 13:35:23 -0500 Subject: [PATCH 2/2] PushRoot before adding children --- packages/core/src/diff.rs | 2 +- tests/diffing.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/diff.rs b/packages/core/src/diff.rs index 768fbe3b9..a0be7fd3c 100644 --- a/packages/core/src/diff.rs +++ b/packages/core/src/diff.rs @@ -423,8 +423,8 @@ impl<'b> DiffState<'b> { match (old.children.len(), new.children.len()) { (0, 0) => {} (0, _) => { - let created = self.create_children(new.children); self.mutations.push_root(root); + let created = self.create_children(new.children); self.mutations.append_children(created as u32); } (_, _) => self.diff_children(old.children, new.children), diff --git a/tests/diffing.rs b/tests/diffing.rs index 843d76138..e7bc6749d 100644 --- a/tests/diffing.rs +++ b/tests/diffing.rs @@ -749,8 +749,8 @@ fn add_nested_elements() { assert_eq!( change.edits, [ - CreateElement { root: 2, tag: "div" }, PushRoot { root: 1 }, + CreateElement { root: 2, tag: "div" }, AppendChildren { many: 1 }, ] );